mockserver-client 1.0.8.pre → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -1
  3. data/Gemfile.lock +79 -0
  4. data/README.md +89 -229
  5. data/Rakefile +8 -8
  6. data/docs/Body.md +7 -0
  7. data/docs/BodyWithContentType.md +7 -0
  8. data/docs/ConnectionOptions.md +12 -0
  9. data/docs/ControlApi.md +269 -0
  10. data/docs/Delay.md +9 -0
  11. data/docs/Expectation.md +7 -0
  12. data/docs/ExpectationApi.md +51 -0
  13. data/docs/Expectations.md +7 -0
  14. data/docs/HttpClassCallback.md +8 -0
  15. data/docs/HttpError.md +10 -0
  16. data/docs/HttpForward.md +11 -0
  17. data/docs/HttpObjectCallback.md +8 -0
  18. data/docs/HttpOverrideForwardedRequest.md +9 -0
  19. data/docs/HttpRequest.md +15 -0
  20. data/docs/HttpResponse.md +14 -0
  21. data/docs/HttpTemplate.md +10 -0
  22. data/docs/KeyToMultiValue.md +7 -0
  23. data/docs/KeyToValue.md +7 -0
  24. data/docs/Ports.md +8 -0
  25. data/docs/TimeToLive.md +10 -0
  26. data/docs/Times.md +9 -0
  27. data/docs/Verification.md +9 -0
  28. data/docs/VerificationSequence.md +8 -0
  29. data/docs/VerificationTimes.md +9 -0
  30. data/docs/VerifyApi.md +94 -0
  31. data/lib/mockserver-client.rb +62 -15
  32. data/lib/mockserver-client/api/control_api.rb +316 -0
  33. data/lib/mockserver-client/api/expectation_api.rb +73 -0
  34. data/lib/mockserver-client/api/verify_api.rb +127 -0
  35. data/lib/mockserver-client/api_client.rb +388 -0
  36. data/lib/mockserver-client/api_error.rb +38 -0
  37. data/lib/mockserver-client/configuration.rb +202 -0
  38. data/lib/mockserver-client/models/body.rb +174 -0
  39. data/lib/mockserver-client/models/body_with_content_type.rb +174 -0
  40. data/lib/mockserver-client/models/connection_options.rb +219 -0
  41. data/lib/mockserver-client/models/delay.rb +192 -0
  42. data/lib/mockserver-client/models/expectation.rb +174 -0
  43. data/lib/mockserver-client/models/expectations.rb +174 -0
  44. data/lib/mockserver-client/models/http_class_callback.rb +183 -0
  45. data/lib/mockserver-client/models/http_error.rb +201 -0
  46. data/lib/mockserver-client/models/http_forward.rb +244 -0
  47. data/lib/mockserver-client/models/http_object_callback.rb +183 -0
  48. data/lib/mockserver-client/models/http_override_forwarded_request.rb +192 -0
  49. data/lib/mockserver-client/models/http_request.rb +246 -0
  50. data/lib/mockserver-client/models/http_response.rb +237 -0
  51. data/lib/mockserver-client/models/http_template.rb +235 -0
  52. data/lib/mockserver-client/models/key_to_multi_value.rb +174 -0
  53. data/lib/mockserver-client/models/key_to_value.rb +174 -0
  54. data/lib/mockserver-client/models/ports.rb +185 -0
  55. data/lib/mockserver-client/models/time_to_live.rb +235 -0
  56. data/lib/mockserver-client/models/times.rb +192 -0
  57. data/lib/mockserver-client/models/verification.rb +192 -0
  58. data/lib/mockserver-client/models/verification_sequence.rb +185 -0
  59. data/lib/mockserver-client/models/verification_times.rb +192 -0
  60. data/lib/mockserver-client/version.rb +15 -0
  61. data/mockserver-client.gemspec +44 -36
  62. data/spec/api/control_api_spec.rb +102 -0
  63. data/spec/api/expectation_api_spec.rb +46 -0
  64. data/spec/api/verify_api_spec.rb +57 -0
  65. data/spec/api_client_spec.rb +226 -0
  66. data/spec/configuration_spec.rb +42 -0
  67. data/spec/models/body_spec.rb +35 -0
  68. data/spec/models/body_with_content_type_spec.rb +35 -0
  69. data/spec/models/connection_options_spec.rb +65 -0
  70. data/spec/models/delay_spec.rb +47 -0
  71. data/spec/models/expectation_spec.rb +35 -0
  72. data/spec/models/expectations_spec.rb +35 -0
  73. data/spec/models/http_class_callback_spec.rb +41 -0
  74. data/spec/models/http_error_spec.rb +53 -0
  75. data/spec/models/http_forward_spec.rb +63 -0
  76. data/spec/models/http_object_callback_spec.rb +41 -0
  77. data/spec/models/http_override_forwarded_request_spec.rb +47 -0
  78. data/spec/models/http_request_spec.rb +83 -0
  79. data/spec/models/http_response_spec.rb +77 -0
  80. data/spec/models/http_template_spec.rb +57 -0
  81. data/spec/models/key_to_multi_value_spec.rb +35 -0
  82. data/spec/models/key_to_value_spec.rb +35 -0
  83. data/spec/models/ports_spec.rb +41 -0
  84. data/spec/models/time_to_live_spec.rb +57 -0
  85. data/spec/models/times_spec.rb +47 -0
  86. data/spec/models/verification_sequence_spec.rb +41 -0
  87. data/spec/models/verification_spec.rb +47 -0
  88. data/spec/models/verification_times_spec.rb +47 -0
  89. data/spec/spec_helper.rb +103 -53
  90. metadata +225 -158
  91. data/.gitignore +0 -21
  92. data/.rubocop.yml +0 -7
  93. data/bin/mockserver +0 -9
  94. data/lib/cli.rb +0 -146
  95. data/lib/mockserver/abstract_client.rb +0 -111
  96. data/lib/mockserver/mock_server_client.rb +0 -46
  97. data/lib/mockserver/model/array_of.rb +0 -85
  98. data/lib/mockserver/model/body.rb +0 -56
  99. data/lib/mockserver/model/cookie.rb +0 -36
  100. data/lib/mockserver/model/delay.rb +0 -34
  101. data/lib/mockserver/model/enum.rb +0 -47
  102. data/lib/mockserver/model/expectation.rb +0 -139
  103. data/lib/mockserver/model/forward.rb +0 -41
  104. data/lib/mockserver/model/header.rb +0 -43
  105. data/lib/mockserver/model/parameter.rb +0 -43
  106. data/lib/mockserver/model/request.rb +0 -81
  107. data/lib/mockserver/model/response.rb +0 -45
  108. data/lib/mockserver/model/times.rb +0 -61
  109. data/lib/mockserver/proxy_client.rb +0 -9
  110. data/lib/mockserver/utility_methods.rb +0 -59
  111. data/lib/mockserver/version.rb +0 -5
  112. data/pom.xml +0 -118
  113. data/spec/fixtures/forward_mockserver.json +0 -7
  114. data/spec/fixtures/incorrect_login_response.json +0 -20
  115. data/spec/fixtures/post_login_request.json +0 -22
  116. data/spec/fixtures/register_expectation.json +0 -50
  117. data/spec/fixtures/retrieved_request.json +0 -22
  118. data/spec/fixtures/search_request.json +0 -6
  119. data/spec/fixtures/times_once.json +0 -6
  120. data/spec/integration/mock_client_integration_spec.rb +0 -82
  121. data/spec/mockserver/builder_spec.rb +0 -90
  122. data/spec/mockserver/mock_client_spec.rb +0 -80
  123. data/spec/mockserver/proxy_client_spec.rb +0 -38
@@ -1,82 +0,0 @@
1
- # encoding: UTF-8
2
- require 'rspec'
3
- require 'net/http'
4
- require 'webmock/rspec'
5
- require_relative '../../lib/mockserver-client'
6
-
7
- RSpec.configure do |config|
8
- include WebMock::API
9
- include MockServer
10
- include MockServer::UtilityMethods
11
- include MockServer::Model::DSL
12
-
13
- # Only accept expect syntax do not allow old should syntax
14
- config.expect_with :rspec do |c|
15
- c.syntax = :expect
16
- end
17
- end
18
-
19
- describe MockServer::MockServerClient do
20
-
21
- let(:client) { MockServer::MockServerClient.new('localhost', 1080) }
22
-
23
- before do
24
- # To suppress logging output to standard output, write to a temporary file
25
- client.logger = LoggingFactory::DEFAULT_FACTORY.log('test', output: 'tmp.log', truncate: true)
26
- end
27
-
28
- def create_agent
29
- uri = URI('http://api.nsa.gov:1337/agent')
30
- http = Net::HTTP.new(uri.host, uri.port)
31
- req = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
32
- req.body = { name: 'John Doe', role: 'agent' }.to_json
33
- res = http.request(req)
34
- puts "response #{res.body}"
35
- rescue => e
36
- puts "failed #{e}"
37
- end
38
-
39
- it 'setup complex expectation' do
40
- WebMock.allow_net_connect!
41
-
42
- # given
43
- mock_expectation = expectation do |expectation|
44
- expectation.request do |request|
45
- request.method = 'POST'
46
- request.path = '/somePath'
47
- request.query_string_parameters << parameter('param', 'someQueryStringValue')
48
- request.headers << header('Header', 'someHeaderValue')
49
- request.cookies << cookie('cookie', 'someCookieValue')
50
- request.body = exact('someBody')
51
- end
52
-
53
- expectation.response do |response|
54
- response.status_code = 201
55
- response.headers << header('header', 'someHeaderValue')
56
- response.body = body('someBody')
57
- response.delay = delay_by(:SECONDS, 1)
58
- end
59
-
60
- expectation.times = exactly(1)
61
- end
62
-
63
- # and
64
- expect(client.register(mock_expectation).code).to eq(201)
65
-
66
- # when
67
- uri = URI('http://localhost:1080/somePath')
68
- http = Net::HTTP.new(uri.host, uri.port)
69
- req = Net::HTTP::Post.new('/somePath?param=someQueryStringValue')
70
- req['Header'] = 'someHeaderValue'
71
- req['Cookie'] = 'cookie=someCookieValue'
72
- req.body = 'someBody'
73
- res = http.request(req)
74
-
75
- # then
76
- expect(res.code).to eq('201')
77
- expect(res.body).to eq('someBody')
78
-
79
- WebMock.disable_net_connect!
80
- end
81
-
82
- end
@@ -1,90 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative '../spec_helper'
3
-
4
- describe MockServer::Model::DSL do
5
-
6
- it 'generates http requests correctly' do
7
- mock_request = http_request(:POST, '/login')
8
- mock_request.query_string_parameters = [parameter('returnUrl', '/account')]
9
- mock_request.cookies = [cookie('sessionId', '2By8LOhBmaW5nZXJwcmludCIlMDAzMW')]
10
- mock_request.body = exact("{username:'foo', password:'bar'}")
11
-
12
- expect(to_camelized_hash(HTTP_REQUEST => mock_request)).to eq(FIXTURES.read('post_login_request.json'))
13
-
14
- # Block style
15
- mock_request = request(:POST, '/login') do |request|
16
- request.query_string_parameters = [parameter('returnUrl', '/account')]
17
- request.cookies = [cookie('sessionId', '2By8LOhBmaW5nZXJwcmludCIlMDAzMW')]
18
- request.body = exact("{username:'foo', password:'bar'}")
19
- end
20
-
21
- expect(to_camelized_hash(HTTP_REQUEST => mock_request)).to eq(FIXTURES.read('post_login_request.json'))
22
- end
23
-
24
- it 'generates http responses correctly' do
25
- mock_response = http_response
26
- mock_response.status_code = 401
27
- mock_response.headers = [header('Content-Type', 'application/json; charset=utf-8')]
28
- mock_response.headers << header('Cache-Control', 'public, max-age=86400')
29
- mock_response.body = body('incorrect username and password combination')
30
- mock_response.delay = delay_by(:SECONDS, 1)
31
-
32
- expect(to_camelized_hash(HTTP_RESPONSE => mock_response)).to eq(FIXTURES.read('incorrect_login_response.json'))
33
-
34
- # Block style
35
- mock_response = response do |response|
36
- response.status_code = 401
37
- response.headers = [header('Content-Type', 'application/json; charset=utf-8')]
38
- response.headers << header('Cache-Control', 'public, max-age=86400')
39
- response.body = body('incorrect username and password combination')
40
- response.delay = delay_by(:SECONDS, 1)
41
- end
42
-
43
- expect(to_camelized_hash(HTTP_RESPONSE => mock_response)).to eq(FIXTURES.read('incorrect_login_response.json'))
44
- end
45
-
46
- it 'generates http forwards correctly' do
47
- mock_forward = http_forward
48
- mock_forward.host = 'www.mock-server.com'
49
- mock_forward.port = 80
50
-
51
- expect(to_camelized_hash(HTTP_FORWARD => mock_forward)).to eq(FIXTURES.read('forward_mockserver.json'))
52
-
53
- # Block style
54
- mock_forward = forward do |forward|
55
- forward.host = 'www.mock-server.com'
56
- forward.port = 80
57
- end
58
-
59
- expect(to_camelized_hash(HTTP_FORWARD => mock_forward)).to eq(FIXTURES.read('forward_mockserver.json'))
60
- end
61
-
62
- it 'generates times correctly' do
63
- expect(to_camelized_hash(HTTP_TIMES => exactly(1))).to eq(FIXTURES.read('times_once.json'))
64
-
65
- # Block style
66
- mock_times = times do |times|
67
- times.remaining_times = 1
68
- end
69
- expect(to_camelized_hash(HTTP_TIMES => mock_times)).to eq(FIXTURES.read('times_once.json'))
70
- end
71
-
72
- it 'generates expectation correctly from file' do
73
- payload = FIXTURES.read('register_expectation.json')
74
- mock_expectation = expectation_from_json(payload)
75
-
76
- expect(to_camelized_hash(mock_expectation.to_hash)).to eq(payload)
77
- end
78
-
79
- it 'generates body correctly' do
80
- expect(to_camelized_hash(regex('*/login'))).to eq('type' => 'REGEX', 'value' => '*/login')
81
- expect(to_camelized_hash(xpath('/login[1]'))).to eq('type' => 'XPATH', 'value' => '/login[1]')
82
- expect(to_camelized_hash(parameterized(parameter('token', '4jy5hh')))).to eq('type' => 'PARAMETERS', 'parameters' => [{ 'name' => 'token', 'values' => ['4jy5hh'] }])
83
- end
84
-
85
- it 'generates times object correctly' do
86
- expect(to_camelized_hash(unlimited)).to eq('unlimited' => 'true', 'remainingTimes' => 0)
87
- expect(to_camelized_hash(at_least(2))).to eq('unlimited' => 'true', 'remainingTimes' => 2)
88
- end
89
-
90
- end
@@ -1,80 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative '../spec_helper'
3
-
4
- describe MockServer::MockServerClient do
5
-
6
- let(:client) { MockServer::MockServerClient.new('localhost', 8080) }
7
- let(:register_expectation_json) { FIXTURES.read('register_expectation.json').to_json }
8
- let(:search_request_json) { FIXTURES.read('search_request.json').to_json }
9
-
10
- before do
11
- # To suppress logging output to standard output, write to a temporary file
12
- client.logger = LoggingFactory::DEFAULT_FACTORY.log('test', output: 'tmp.log', truncate: true)
13
-
14
- # Stub requests
15
- stub_request(:put, /.+\/expectation/).with(body: register_expectation_json, headers: { 'Content-Type' => 'application/json' }).to_return(status: 201)
16
- stub_request(:put, /.+\/clear/).with(body: search_request_json, headers: { 'Content-Type' => 'application/json' }).to_return(status: 202)
17
- stub_request(:put, /.+\/reset/).with(headers: { 'Content-Type' => 'application/json' }).to_return(status: 202)
18
- stub_request(:put, /.+\/retrieve/).with(body: search_request_json, headers: { 'Content-Type' => 'application/json' }).to_return(
19
- body: '[]',
20
- status: 200
21
- )
22
- end
23
-
24
- it 'registers an expectation correctly' do
25
- mock_expectation = expectation do |expectation|
26
- expectation.request do |request|
27
- request.method = 'POST'
28
- request.path = '/login'
29
- request.query_string_parameters << parameter('returnUrl', '/account')
30
- request.cookies << cookie('sessionId', '2By8LOhBmaW5nZXJwcmludCIlMDAzMW')
31
- request.body = exact({ username: 'foo', password: 'bar' }.to_json)
32
- end
33
-
34
- expectation.response do |response|
35
- response.status_code = 401
36
- response.headers << header('Content-Type', 'application/json; charset=utf-8')
37
- response.headers << header('Cache-Control', 'public, max-age=86400')
38
- response.body = body({ message: 'incorrect username and password combination' }.to_json)
39
- response.delay = delay_by(:SECONDS, 1)
40
- end
41
-
42
- expectation.times = exactly(2)
43
- end
44
-
45
- response = client.register(mock_expectation)
46
- expect(response.code).to eq(201)
47
- end
48
-
49
- it 'raises an error when trying to set both forward and response' do
50
- mock_expectation = expectation do |expectation|
51
- expectation.request do |request|
52
- request.method = 'POST'
53
- request.path = '/login'
54
- end
55
-
56
- expectation.response do |response|
57
- response.status_code = 401
58
- end
59
-
60
- expectation.forward do |forward|
61
- forward.scheme = :HTTP
62
- end
63
- end
64
-
65
- expect { client.register(mock_expectation) }.to raise_error(RuntimeError, 'You can only set either of ["httpResponse", "httpForward"]. But not both')
66
- end
67
-
68
- it 'clears requests from the mock server' do
69
- expect(client.clear(request(:POST, '/login')).code).to eq(202)
70
- end
71
-
72
- it 'resets the mock server' do
73
- expect(client.reset.code).to eq(202)
74
- end
75
-
76
- it 'retrieves requests correctly' do
77
- expect(client.retrieve(request(:POST, '/login')).code).to eq(200)
78
- end
79
-
80
- end
@@ -1,38 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative '../spec_helper'
3
-
4
- describe MockServer::ProxyClient do
5
-
6
- let(:client) { MockServer::ProxyClient.new('localhost', 8080) }
7
- let(:retrieved_request) { FIXTURES.read('retrieved_request.json') }
8
- let(:retrieved_request_json) { retrieved_request.to_json }
9
- let(:search_request_json) { FIXTURES.read('search_request.json').to_json }
10
-
11
- before do
12
- # To suppress logging output to standard output, write to a temporary file
13
- client.logger = LoggingFactory::DEFAULT_FACTORY.log('test', output: 'tmp.log', truncate: true)
14
-
15
- # Stub requests
16
- stub_request(:put, /.+\/retrieve/).with(body: search_request_json).to_return(
17
- body: "[#{retrieved_request_json}, #{retrieved_request_json}]",
18
- status: 200
19
- )
20
- stub_request(:put, /.+\/dumpToLog$/).to_return(status: 202).once
21
- stub_request(:put, /.+\/dumpToLog\?type=java$/).to_return(status: 202).once
22
- end
23
-
24
- it 'verifies requests correctly' do
25
- response = client.verify(request(:POST, '/login'), exactly(2))
26
- response = response.map { |mock| to_camelized_hash(mock.to_hash) }
27
- expect(response).to eq([retrieved_request, retrieved_request])
28
- end
29
-
30
- it 'raises an error when verification fails' do
31
- expect { client.verify(request(:POST, '/login')) }.to raise_error(RuntimeError, 'Expected request to be present: [1] (exactly). But found: [2]')
32
- end
33
-
34
- it 'dumps to logs correctly do' do
35
- expect(client.dump_log.code).to eq(202)
36
- expect(client.dump_log({}, true).code).to eq(202)
37
- end
38
- end