mock-web-service 0.7 → 0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|