mock-web-service 0.7 → 0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +40 -0
- data/README.md +4 -0
- data/Rakefile +9 -0
- data/lib/mock-web-service/response_options.rb +14 -0
- data/lib/mock-web-service/server.rb +42 -24
- data/lib/mock-web-service/version.rb +1 -1
- data/lib/mock_web_service.rb +4 -1
- data/mock-web-service.gemspec +20 -0
- data/spec/mock-web-service/add_response_spec.rb +84 -0
- data/spec/mock-web-service/add_soap_response_spec.rb +29 -0
- data/spec/mock-web-service/server_spec.rb +62 -0
- data/spec/spec_helper.rb +8 -0
- metadata +26 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d271bc6486c63ee8546ce7ba810db4f5804689b
|
4
|
+
data.tar.gz: 3bdb1cd6040790d820463b2f462f95301d0bc025
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b825be28e4d589d5e87e96423c5278ea8867a028de82be6af46aa9da945a7e5688a384ee835997833bb83401d26b9ea40fa3d75231c100e7fb99b8d345faf82
|
7
|
+
data.tar.gz: 0ede7bac4ddee569b6831676da0cb1f56b20bd99905ce2e5e6f93e840b5db4f3cc004b434e931e44fbb2b10421fc0b613c74ebe1f3848e4f6e2e9b0351e00904
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
mock-web-service (0.7)
|
5
|
+
sinatra
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.2.5)
|
11
|
+
rack (1.6.4)
|
12
|
+
rack-protection (1.5.3)
|
13
|
+
rack
|
14
|
+
rspec (3.0.0)
|
15
|
+
rspec-core (~> 3.0.0)
|
16
|
+
rspec-expectations (~> 3.0.0)
|
17
|
+
rspec-mocks (~> 3.0.0)
|
18
|
+
rspec-core (3.0.3)
|
19
|
+
rspec-support (~> 3.0.0)
|
20
|
+
rspec-expectations (3.0.3)
|
21
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
+
rspec-support (~> 3.0.0)
|
23
|
+
rspec-mocks (3.0.3)
|
24
|
+
rspec-support (~> 3.0.0)
|
25
|
+
rspec-support (3.0.3)
|
26
|
+
sinatra (1.4.6)
|
27
|
+
rack (~> 1.4)
|
28
|
+
rack-protection (~> 1.4)
|
29
|
+
tilt (>= 1.3, < 3)
|
30
|
+
tilt (2.0.1)
|
31
|
+
|
32
|
+
PLATFORMS
|
33
|
+
x86-mingw32
|
34
|
+
|
35
|
+
DEPENDENCIES
|
36
|
+
mock-web-service!
|
37
|
+
rspec (>= 2.12.0)
|
38
|
+
|
39
|
+
BUNDLED WITH
|
40
|
+
1.10.6
|
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module MockWebService
|
2
|
+
class ResponseOptions
|
3
|
+
attr_accessor :method, :path, :status, :content_type
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
self.method = :get
|
7
|
+
self.path = '/'
|
8
|
+
self.status = 200
|
9
|
+
self.content_type = 'text/html;charset=utf-8'
|
10
|
+
|
11
|
+
yield self if block_given?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,56 +1,74 @@
|
|
1
|
-
require_relative 'async'
|
2
|
-
|
3
1
|
module MockWebService
|
4
|
-
|
5
2
|
class Server
|
6
3
|
@@requests = []
|
4
|
+
@@responses = {}
|
5
|
+
|
6
|
+
def get_latest_request
|
7
|
+
@@requests.pop
|
8
|
+
end
|
7
9
|
|
8
|
-
def
|
10
|
+
def get_all_requests
|
9
11
|
@@requests
|
10
12
|
end
|
11
13
|
|
12
|
-
def
|
13
|
-
@@requests =
|
14
|
+
def clear_requests
|
15
|
+
@@requests = []
|
14
16
|
end
|
15
17
|
|
16
18
|
def start(overrides = {})
|
17
|
-
|
18
|
-
options = {:bind => '0.0.0.0', :server_settings =>
|
19
|
-
options.merge!(overrides)
|
19
|
+
disable_logging = {AccessLog: []}
|
20
|
+
options = {:bind => '0.0.0.0', :server_settings => disable_logging}.merge(overrides)
|
20
21
|
Async.instance.run { Sinatra::Base.start!(options)}
|
21
22
|
end
|
22
23
|
|
23
24
|
def add_response(response)
|
24
25
|
Sinatra::Base.reset!
|
25
26
|
Sinatra::Base.post '*/*' do
|
27
|
+
content_type 'text/xml'
|
28
|
+
@@requests.push(request.body.read)
|
29
|
+
response
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_soap_response(response)
|
34
|
+
set_response(ResponseOptions.new {|opts| opts.path = '*/*'; opts.method = :post}) do
|
26
35
|
content_type 'text/xml'
|
27
|
-
@@requests.push(request.body.read)
|
28
36
|
response
|
29
37
|
end
|
30
38
|
end
|
31
39
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
def add(response, opts = ResponseOptions.new)
|
41
|
+
@@responses[opts.path] = response
|
42
|
+
set_response(opts) do
|
43
|
+
status(opts.status)
|
44
|
+
content_type opts.content_type
|
45
|
+
@@requests.push(request)
|
46
|
+
return @@responses[opts.path]
|
39
47
|
end
|
40
|
-
request
|
41
48
|
end
|
42
49
|
|
43
|
-
def
|
44
|
-
|
50
|
+
def wait_for_next_request(timeout_seconds = 5, retry_interval = 0.5)
|
51
|
+
start = Time.now
|
52
|
+
current_requests_count = @@requests.length
|
53
|
+
while (@@requests.length == current_requests_count)
|
54
|
+
break if (Time.now - start).to_i >= timeout_seconds
|
55
|
+
sleep(retry_interval)
|
56
|
+
end
|
57
|
+
@@requests.last
|
45
58
|
end
|
46
59
|
|
47
|
-
def
|
48
|
-
|
60
|
+
def reset_server
|
61
|
+
Sinatra::Base.reset!
|
62
|
+
@@requests = []
|
63
|
+
@@responses = {}
|
49
64
|
end
|
50
65
|
|
51
|
-
|
52
|
-
|
66
|
+
private
|
67
|
+
|
68
|
+
def set_response(opts, &block)
|
69
|
+
Sinatra::Base.send(opts.method, opts.path, &block)
|
53
70
|
end
|
71
|
+
|
54
72
|
end
|
55
73
|
|
56
74
|
end
|
data/lib/mock_web_service.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'mock-web-service/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'mock-web-service'
|
7
|
+
s.version = MockWebService::VERSION
|
8
|
+
s.date = '2015-11-10'
|
9
|
+
s.description = 'Tool for mocking web requests'
|
10
|
+
s.authors = ['Mosaic']
|
11
|
+
s.email = 'mosaic.development@sherwin.com'
|
12
|
+
s.summary = 'Beta'
|
13
|
+
s.files = `git ls-files`.split($/)
|
14
|
+
s.require_paths = ['lib']
|
15
|
+
s.homepage = ''
|
16
|
+
s.license = 'MIT'
|
17
|
+
s.add_dependency 'sinatra'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rspec', '>= 2.12.0'
|
20
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Add response' do
|
4
|
+
|
5
|
+
let(:server){Server.new}
|
6
|
+
let(:default_uri) {URI('http://127.0.0.1:4567')}
|
7
|
+
let(:default_response) {'Default Response'}
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
server.start({:port => 4567})
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
Sinatra::Base.reset!
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should be able to get the response from default path' do
|
18
|
+
server.add(default_response)
|
19
|
+
res = Net::HTTP.get(default_uri)
|
20
|
+
expect(res).to eq(default_response)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should be able to return different for same route' do
|
24
|
+
server.add('Response One')
|
25
|
+
server.add('Response Two')
|
26
|
+
res = Net::HTTP.get(default_uri)
|
27
|
+
|
28
|
+
expect(res).to eq('Response Two')
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should be able to post and get the response from default path' do
|
32
|
+
server.add(default_response,ResponseOptions.new { |opts| opts.method = :post })
|
33
|
+
res = Net::HTTP.post_form(default_uri, {})
|
34
|
+
expect(res.body).to eq(default_response)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should be able to get the response from specific path' do
|
38
|
+
expected_path = '/expectedPath.html'
|
39
|
+
server.add(default_response)
|
40
|
+
server.add('Expected Response', ResponseOptions.new{|opts| opts.path = expected_path})
|
41
|
+
|
42
|
+
default_uri.path = expected_path
|
43
|
+
expected_response = Net::HTTP.get_response(default_uri)
|
44
|
+
|
45
|
+
expect(expected_response.body).to eq('Expected Response')
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should set response content type' do
|
49
|
+
server.add('')
|
50
|
+
res = Net::HTTP.get_response(default_uri)
|
51
|
+
expect(res['Content-Type']).to eq('text/html;charset=utf-8')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should be able to override response content type' do
|
55
|
+
content_type = 'text/json;charset=utf-8'
|
56
|
+
server.add('{name: json}', ResponseOptions.new { |opts| opts.content_type = content_type })
|
57
|
+
|
58
|
+
res = Net::HTTP.get_response(default_uri)
|
59
|
+
|
60
|
+
expect(res['Content-Type']).to include(content_type)
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'with request method of post' do
|
64
|
+
it 'should receive a default HTTP Status of OK' do
|
65
|
+
server.add('Expected Response', ResponseOptions.new { |opts| opts.method = :post })
|
66
|
+
|
67
|
+
res = Net::HTTP.post_form(default_uri, {})
|
68
|
+
|
69
|
+
expect(res).to be_a(Net::HTTPOK)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should be able to override status' do
|
73
|
+
opts = ResponseOptions.new do |opts|
|
74
|
+
opts.method = :post
|
75
|
+
opts.status = 500
|
76
|
+
end
|
77
|
+
|
78
|
+
server.add('Expected Response', opts)
|
79
|
+
res = Net::HTTP.post_form(default_uri, {})
|
80
|
+
expect(res).to be_a(Net::HTTPInternalServerError)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Add soap response' do
|
4
|
+
|
5
|
+
let(:server){Server.new}
|
6
|
+
let(:default_uri) {URI('http://127.0.0.1:4567')}
|
7
|
+
let(:default_response) {'Default Response'}
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
server.start({:port => 4567})
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
Sinatra::Base.reset!
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should default to post method' do
|
18
|
+
server.add_soap_response(default_response)
|
19
|
+
res = Net::HTTP.post_form(default_uri, {})
|
20
|
+
expect(res.body).to eq(default_response)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should default to xml content type' do
|
24
|
+
server.add_soap_response('')
|
25
|
+
res = Net::HTTP.post_form(default_uri, {})
|
26
|
+
expect(res['Content-Type']).to eq('text/xml;charset=utf-8')
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Wait for next request' do
|
4
|
+
|
5
|
+
let(:server){Server.new}
|
6
|
+
let(:default_uri) {URI('http://127.0.0.1:4567')}
|
7
|
+
let(:default_response) {'Default Response'}
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
server.start({:port => 4567})
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:each) do
|
14
|
+
Sinatra::Base.reset!
|
15
|
+
server.clear_requests
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should return the first request' do
|
19
|
+
server.add(default_response)
|
20
|
+
thread = Thread.new do
|
21
|
+
Thread.current[:result]= server.wait_for_next_request
|
22
|
+
end
|
23
|
+
Net::HTTP.get(default_uri)
|
24
|
+
thread.join
|
25
|
+
expect(thread[:result].env['REQUEST_URI']).to include default_uri.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should wait for a new request' do
|
29
|
+
server.add(default_response)
|
30
|
+
server.add(default_response, ResponseOptions.new{|opts| opts.method= :post; opts.path= '/Test.html'})
|
31
|
+
|
32
|
+
Net::HTTP.get(default_uri)
|
33
|
+
thread = Thread.new do
|
34
|
+
Thread.current[:result]= server.wait_for_next_request
|
35
|
+
end
|
36
|
+
Net::HTTP.post_form(default_uri + '/Test.html', {:test => 'data'})
|
37
|
+
thread.join
|
38
|
+
expect(thread[:result].env['REQUEST_METHOD']).to eq "POST"
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should default timeout value to 5' do
|
42
|
+
t1 = Time.now
|
43
|
+
|
44
|
+
request = server.wait_for_next_request
|
45
|
+
t2 = Time.now
|
46
|
+
|
47
|
+
expect(request).to be_nil
|
48
|
+
time = (t2 - t1)
|
49
|
+
expect(time.to_i).to be 5
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should allow the timeout value to be set' do
|
53
|
+
t1 = Time.now
|
54
|
+
|
55
|
+
request = server.wait_for_next_request 2
|
56
|
+
t2 = Time.now
|
57
|
+
|
58
|
+
expect(request).to be_nil
|
59
|
+
expect((t2 - t1).to_i).to be 2
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mock-web-service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.8'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mosaic
|
@@ -24,16 +24,41 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.12.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.12.0
|
27
41
|
description: Tool for mocking web requests
|
28
42
|
email: mosaic.development@sherwin.com
|
29
43
|
executables: []
|
30
44
|
extensions: []
|
31
45
|
extra_rdoc_files: []
|
32
46
|
files:
|
47
|
+
- ".gitignore"
|
48
|
+
- Gemfile
|
49
|
+
- Gemfile.lock
|
50
|
+
- README.md
|
51
|
+
- Rakefile
|
33
52
|
- lib/mock-web-service/async.rb
|
53
|
+
- lib/mock-web-service/response_options.rb
|
34
54
|
- lib/mock-web-service/server.rb
|
35
55
|
- lib/mock-web-service/version.rb
|
36
56
|
- lib/mock_web_service.rb
|
57
|
+
- mock-web-service.gemspec
|
58
|
+
- spec/mock-web-service/add_response_spec.rb
|
59
|
+
- spec/mock-web-service/add_soap_response_spec.rb
|
60
|
+
- spec/mock-web-service/server_spec.rb
|
61
|
+
- spec/spec_helper.rb
|
37
62
|
homepage: ''
|
38
63
|
licenses:
|
39
64
|
- MIT
|