mockserver-client 1.0.8.pre → 6.0.0

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.
Files changed (46) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +2 -1
  3. data/README.md +79 -227
  4. data/lib/mockserver/client.rb +518 -0
  5. data/lib/mockserver/errors.rb +18 -0
  6. data/lib/mockserver/forward_chain_expectation.rb +117 -0
  7. data/lib/mockserver/models.rb +1507 -0
  8. data/lib/mockserver/version.rb +3 -3
  9. data/lib/mockserver/websocket_client.rb +353 -0
  10. data/lib/mockserver-client.rb +7 -16
  11. data/mockserver-client.gemspec +26 -27
  12. metadata +54 -206
  13. data/.gitignore +0 -21
  14. data/.rubocop.yml +0 -7
  15. data/Rakefile +0 -10
  16. data/bin/mockserver +0 -9
  17. data/lib/cli.rb +0 -146
  18. data/lib/mockserver/abstract_client.rb +0 -111
  19. data/lib/mockserver/mock_server_client.rb +0 -46
  20. data/lib/mockserver/model/array_of.rb +0 -85
  21. data/lib/mockserver/model/body.rb +0 -56
  22. data/lib/mockserver/model/cookie.rb +0 -36
  23. data/lib/mockserver/model/delay.rb +0 -34
  24. data/lib/mockserver/model/enum.rb +0 -47
  25. data/lib/mockserver/model/expectation.rb +0 -139
  26. data/lib/mockserver/model/forward.rb +0 -41
  27. data/lib/mockserver/model/header.rb +0 -43
  28. data/lib/mockserver/model/parameter.rb +0 -43
  29. data/lib/mockserver/model/request.rb +0 -81
  30. data/lib/mockserver/model/response.rb +0 -45
  31. data/lib/mockserver/model/times.rb +0 -61
  32. data/lib/mockserver/proxy_client.rb +0 -9
  33. data/lib/mockserver/utility_methods.rb +0 -59
  34. data/pom.xml +0 -118
  35. data/spec/fixtures/forward_mockserver.json +0 -7
  36. data/spec/fixtures/incorrect_login_response.json +0 -20
  37. data/spec/fixtures/post_login_request.json +0 -22
  38. data/spec/fixtures/register_expectation.json +0 -50
  39. data/spec/fixtures/retrieved_request.json +0 -22
  40. data/spec/fixtures/search_request.json +0 -6
  41. data/spec/fixtures/times_once.json +0 -6
  42. data/spec/integration/mock_client_integration_spec.rb +0 -82
  43. data/spec/mockserver/builder_spec.rb +0 -90
  44. data/spec/mockserver/mock_client_spec.rb +0 -80
  45. data/spec/mockserver/proxy_client_spec.rb +0 -38
  46. data/spec/spec_helper.rb +0 -61
metadata CHANGED
@@ -1,280 +1,128 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mockserver-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8.pre
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Nayyara Samuel
8
- - James D Bloom
9
- autorequire:
7
+ - James Bloom
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-10-05 00:00:00.000000000 Z
11
+ date: 2026-05-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: bundler
14
+ name: logger
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ~>
17
+ - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: '1'
21
- type: :development
19
+ version: '1.0'
20
+ type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - ~>
24
+ - - ">="
26
25
  - !ruby/object:Gem::Version
27
- version: '1'
26
+ version: '1.0'
28
27
  - !ruby/object:Gem::Dependency
29
- name: rake
28
+ name: websocket-client-simple
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
- - - ~>
31
+ - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: '10.3'
35
- type: :development
33
+ version: '0.8'
34
+ type: :runtime
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
- - - ~>
38
+ - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: '10.3'
40
+ version: '0.8'
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: rspec
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
- - - ~>
45
+ - - "~>"
47
46
  - !ruby/object:Gem::Version
48
- version: '3.0'
47
+ version: '3.12'
49
48
  type: :development
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
- - - ~>
52
+ - - "~>"
54
53
  - !ruby/object:Gem::Version
55
- version: '3.0'
54
+ version: '3.12'
56
55
  - !ruby/object:Gem::Dependency
57
- name: simplecov
56
+ name: rspec_junit_formatter
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
- - - ~>
59
+ - - "~>"
61
60
  - !ruby/object:Gem::Version
62
- version: '0.8'
61
+ version: '0.6'
63
62
  type: :development
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
66
65
  requirements:
67
- - - ~>
66
+ - - "~>"
68
67
  - !ruby/object:Gem::Version
69
- version: '0.8'
68
+ version: '0.6'
70
69
  - !ruby/object:Gem::Dependency
71
70
  name: webmock
72
71
  requirement: !ruby/object:Gem::Requirement
73
72
  requirements:
74
- - - ~>
75
- - !ruby/object:Gem::Version
76
- version: '1.18'
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ~>
82
- - !ruby/object:Gem::Version
83
- version: '1.18'
84
- - !ruby/object:Gem::Dependency
85
- name: rubocop
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ~>
73
+ - - "~>"
89
74
  - !ruby/object:Gem::Version
90
- version: '0.23'
75
+ version: '3.19'
91
76
  type: :development
92
77
  prerelease: false
93
78
  version_requirements: !ruby/object:Gem::Requirement
94
79
  requirements:
95
- - - ~>
96
- - !ruby/object:Gem::Version
97
- version: '0.23'
98
- - !ruby/object:Gem::Dependency
99
- name: hashie
100
- requirement: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ~>
103
- - !ruby/object:Gem::Version
104
- version: '3.0'
105
- type: :runtime
106
- prerelease: false
107
- version_requirements: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ~>
110
- - !ruby/object:Gem::Version
111
- version: '3.0'
112
- - !ruby/object:Gem::Dependency
113
- name: json
114
- requirement: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ~>
117
- - !ruby/object:Gem::Version
118
- version: '1.8'
119
- type: :runtime
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - ~>
124
- - !ruby/object:Gem::Version
125
- version: '1.8'
126
- - !ruby/object:Gem::Dependency
127
- name: activesupport
128
- requirement: !ruby/object:Gem::Requirement
129
- requirements:
130
- - - ~>
131
- - !ruby/object:Gem::Version
132
- version: '4.1'
133
- type: :runtime
134
- prerelease: false
135
- version_requirements: !ruby/object:Gem::Requirement
136
- requirements:
137
- - - ~>
138
- - !ruby/object:Gem::Version
139
- version: '4.1'
140
- - !ruby/object:Gem::Dependency
141
- name: rest-client
142
- requirement: !ruby/object:Gem::Requirement
143
- requirements:
144
- - - ~>
145
- - !ruby/object:Gem::Version
146
- version: '1.7'
147
- type: :runtime
148
- prerelease: false
149
- version_requirements: !ruby/object:Gem::Requirement
150
- requirements:
151
- - - ~>
152
- - !ruby/object:Gem::Version
153
- version: '1.7'
154
- - !ruby/object:Gem::Dependency
155
- name: logging_factory
156
- requirement: !ruby/object:Gem::Requirement
157
- requirements:
158
- - - ~>
159
- - !ruby/object:Gem::Version
160
- version: 0.0.2
161
- type: :runtime
162
- prerelease: false
163
- version_requirements: !ruby/object:Gem::Requirement
164
- requirements:
165
- - - ~>
166
- - !ruby/object:Gem::Version
167
- version: 0.0.2
168
- - !ruby/object:Gem::Dependency
169
- name: thor
170
- requirement: !ruby/object:Gem::Requirement
171
- requirements:
172
- - - ~>
173
- - !ruby/object:Gem::Version
174
- version: '0.19'
175
- type: :runtime
176
- prerelease: false
177
- version_requirements: !ruby/object:Gem::Requirement
178
- requirements:
179
- - - ~>
180
- - !ruby/object:Gem::Version
181
- version: '0.19'
182
- - !ruby/object:Gem::Dependency
183
- name: colorize
184
- requirement: !ruby/object:Gem::Requirement
185
- requirements:
186
- - - ~>
187
- - !ruby/object:Gem::Version
188
- version: '0.7'
189
- type: :runtime
190
- prerelease: false
191
- version_requirements: !ruby/object:Gem::Requirement
192
- requirements:
193
- - - ~>
80
+ - - "~>"
194
81
  - !ruby/object:Gem::Version
195
- version: '0.7'
196
- description: A Ruby Client for MockServer that enables easy mocking of any system
197
- you integrate with via HTTP or HTTPS (i.e. services, web sites, etc)
82
+ version: '3.19'
83
+ description: Official Ruby client for MockServer create expectations, verify requests,
84
+ and register dynamic callbacks via WebSocket. Includes a fluent builder DSL.
198
85
  email:
199
- - nayyara.samuel@opower.com
200
86
  - jamesdbloom@gmail.com
201
- executables:
202
- - mockserver
87
+ executables: []
203
88
  extensions: []
204
89
  extra_rdoc_files: []
205
90
  files:
206
- - .gitignore
207
- - .rubocop.yml
208
91
  - Gemfile
209
92
  - README.md
210
- - Rakefile
211
- - bin/mockserver
212
- - lib/cli.rb
213
93
  - lib/mockserver-client.rb
214
- - lib/mockserver/abstract_client.rb
215
- - lib/mockserver/mock_server_client.rb
216
- - lib/mockserver/model/array_of.rb
217
- - lib/mockserver/model/body.rb
218
- - lib/mockserver/model/cookie.rb
219
- - lib/mockserver/model/delay.rb
220
- - lib/mockserver/model/enum.rb
221
- - lib/mockserver/model/expectation.rb
222
- - lib/mockserver/model/forward.rb
223
- - lib/mockserver/model/header.rb
224
- - lib/mockserver/model/parameter.rb
225
- - lib/mockserver/model/request.rb
226
- - lib/mockserver/model/response.rb
227
- - lib/mockserver/model/times.rb
228
- - lib/mockserver/proxy_client.rb
229
- - lib/mockserver/utility_methods.rb
94
+ - lib/mockserver/client.rb
95
+ - lib/mockserver/errors.rb
96
+ - lib/mockserver/forward_chain_expectation.rb
97
+ - lib/mockserver/models.rb
230
98
  - lib/mockserver/version.rb
99
+ - lib/mockserver/websocket_client.rb
231
100
  - mockserver-client.gemspec
232
- - pom.xml
233
- - spec/fixtures/forward_mockserver.json
234
- - spec/fixtures/incorrect_login_response.json
235
- - spec/fixtures/post_login_request.json
236
- - spec/fixtures/register_expectation.json
237
- - spec/fixtures/retrieved_request.json
238
- - spec/fixtures/search_request.json
239
- - spec/fixtures/times_once.json
240
- - spec/integration/mock_client_integration_spec.rb
241
- - spec/mockserver/builder_spec.rb
242
- - spec/mockserver/mock_client_spec.rb
243
- - spec/mockserver/proxy_client_spec.rb
244
- - spec/spec_helper.rb
245
- homepage: http://www.mock-server.com
246
- licenses: []
247
- metadata: {}
248
- post_install_message:
101
+ homepage: https://www.mock-server.com
102
+ licenses:
103
+ - Apache-2.0
104
+ metadata:
105
+ source_code_uri: https://github.com/mock-server/mockserver-monorepo
106
+ changelog_uri: https://www.mock-server.com/mock_server/changelog.html
107
+ bug_tracker_uri: https://github.com/mock-server/mockserver-monorepo/issues
108
+ documentation_uri: https://www.mock-server.com/mock_server/getting_started.html
109
+ post_install_message:
249
110
  rdoc_options: []
250
111
  require_paths:
251
112
  - lib
252
113
  required_ruby_version: !ruby/object:Gem::Requirement
253
114
  requirements:
254
- - - '>='
115
+ - - ">="
255
116
  - !ruby/object:Gem::Version
256
- version: '1.9'
117
+ version: '3.0'
257
118
  required_rubygems_version: !ruby/object:Gem::Requirement
258
119
  requirements:
259
- - - ~>
120
+ - - ">="
260
121
  - !ruby/object:Gem::Version
261
- version: '2.0'
122
+ version: '0'
262
123
  requirements: []
263
- rubyforge_project:
264
- rubygems_version: 2.4.2
265
- signing_key:
124
+ rubygems_version: 3.4.19
125
+ signing_key:
266
126
  specification_version: 4
267
- summary: A Ruby client for MockServer
268
- test_files:
269
- - spec/fixtures/forward_mockserver.json
270
- - spec/fixtures/incorrect_login_response.json
271
- - spec/fixtures/post_login_request.json
272
- - spec/fixtures/register_expectation.json
273
- - spec/fixtures/retrieved_request.json
274
- - spec/fixtures/search_request.json
275
- - spec/fixtures/times_once.json
276
- - spec/integration/mock_client_integration_spec.rb
277
- - spec/mockserver/builder_spec.rb
278
- - spec/mockserver/mock_client_spec.rb
279
- - spec/mockserver/proxy_client_spec.rb
280
- - spec/spec_helper.rb
127
+ summary: Official Ruby client for MockServer
128
+ test_files: []
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- # Ruby #
2
- ########
3
- *.gem
4
- *.rbc
5
- *.bundle
6
- *.so
7
- *.o
8
- *.a
9
- *.log
10
- .config
11
- .yardoc
12
- .rakeTasks
13
- Gemfile.lock
14
- InstalledFiles
15
- coverage
16
- *doc
17
- *tmp
18
- lib/bundler/man
19
- pkg
20
- spec/reports
21
- vendor/bundle
data/.rubocop.yml DELETED
@@ -1,7 +0,0 @@
1
- Style/LineLength:
2
- Max: 180
3
- Style/ClassAndModuleChildren:
4
- EnforcedStyle: compact
5
- Style/FileName:
6
- Exclude:
7
- - '**/mockserver-client.rb'
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- # encoding: UTF-8
2
- require 'bundler/gem_tasks'
3
- require 'rubocop/rake_task'
4
- require 'rspec/core/rake_task'
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
- RuboCop::RakeTask.new(:rubocop)
8
-
9
- desc 'Main task for this project to ensure the project passes build'
10
- task default: [:rubocop, :spec, :build]
data/bin/mockserver DELETED
@@ -1,9 +0,0 @@
1
- # encoding: UTF-8
2
- #!/usr/bin/env ruby
3
-
4
- #
5
- # A thor-based runner for commands in this project
6
- # @author: Nayyara Samuel (mailto: nayyara.samuel@opower.com)
7
- #
8
- require_relative '../lib/cli'
9
- MockServerCLI.start
data/lib/cli.rb DELETED
@@ -1,146 +0,0 @@
1
- # encoding: UTF-8
2
- require 'thor'
3
- require 'colorize'
4
- require_relative './mockserver-client'
5
-
6
- # CLI for this gem
7
- # @author Nayyara Samuel(nayyara.samuel@opower.com)
8
- #
9
- module CLIHelpers
10
- include MockServer
11
-
12
- LOGGER = LoggingFactory::DEFAULT_FACTORY.log('MockServerClient')
13
-
14
- # Prints out the parameters passed to it
15
- # @param options [Hash] a hash of parameters
16
- def print_parameters(options)
17
- puts "\nRunning with parameters:".bold
18
- options.each { |k, v| puts "\t#{k}: #{v}".yellow }
19
- puts ''
20
- end
21
-
22
- # Create a mockserver client
23
- # @param options [Struct] with host and port set
24
- # @return [MockServerClient] the mockserver client with the host and port
25
- def mockserver_client(options)
26
- client = MockServerClient.new(options.host, options.port)
27
- client.logger = LOGGER
28
- client
29
- end
30
-
31
- # Create a proxy client
32
- # @param options [Struct] with host and port set
33
- # @return [ProxyClient] the proxy client with the host and port
34
- def proxy_client(options)
35
- client = ProxyClient.new(options.host, options.port)
36
- client.logger = LOGGER
37
- client
38
- end
39
-
40
- # Convert a hash to a struct
41
- # @param hash [Hash] a hash
42
- # @return [Struct] a struct constructed from the hash
43
- def to_struct(hash)
44
- hash = symbolize_keys(hash)
45
- Struct.new(*hash.keys).new(*hash.values)
46
- end
47
-
48
- # Process a block using options extracted into a struct
49
- # @param mockserver [Boolean] true to use mockserver, false to use proxy
50
- # @yieldparam [AbstractClient] a mockserver or a proxy client
51
- # @yieldparam [Struct] a struct created from options hash
52
- def execute_command(mockserver = false, data_required = false, error_msg = '--data option must be provided', &_)
53
- print_parameters(options)
54
- struct_options = to_struct({ data: nil }.merge(options))
55
- if data_required && !options['data']
56
- error(error_msg)
57
- else
58
- client = mockserver ? mockserver_client(struct_options) : proxy_client(struct_options)
59
- yield client, struct_options if block_given?
60
- end
61
- end
62
-
63
- # Prints an error message
64
- # @param message [String] an error message
65
- def error(message)
66
- puts message.red
67
- end
68
-
69
- # Read a file
70
- # @param file [String] a file to read
71
- def read_file(file)
72
- YAML.load_file(file)
73
- end
74
- end
75
-
76
- # CLI for mock server and proxy clients
77
- class MockServerCLI < Thor
78
- include CLIHelpers
79
- include MockServer::UtilityMethods
80
- include MockServer::Model::DSL
81
-
82
- class_option :host, type: :string, aliases: '-h', required: true, default: 'localhost', desc: 'The host for the MockServer client.'
83
- class_option :port, type: :numeric, aliases: '-p', required: true, default: 8080, desc: 'The port for the MockServer client.'
84
- class_option :data, type: :string, aliases: '-d', desc: 'A JSON or YAML file containing the request payload.'
85
-
86
- desc 'retrieve', 'Retrieve the list of requests that have been made to the mock/proxy server.'
87
-
88
- def retrieve
89
- execute_command do |client, _|
90
- result = options.data ? client.retrieve(read_file(options.data)) : client.retrieve
91
- puts "RESULT:\n".bold + "#{result.to_json}".green
92
- end
93
- end
94
-
95
- desc 'register', 'Register an expectation with the mock server.'
96
-
97
- def register
98
- execute_command(true, true) do |client, options|
99
- payload = read_file(options.data)
100
- mock_expectation = expectation do |expectation|
101
- expectation.populate_from_payload(payload)
102
- end
103
- client.register(mock_expectation)
104
- end
105
- end
106
-
107
- desc 'dump_log', 'Dumps the matching request to the mock server logs.'
108
- option :java, type: :boolean, aliases: '-j', default: false, desc: 'A switch to turn Java format for logs on/off.'
109
-
110
- def dump_log
111
- execute_command do |client, options|
112
- options.data ? client.dump_log(read_file(options.data), options.java) : client.dump_log(nil, options.java)
113
- end
114
- end
115
-
116
- desc 'clear', 'Clears all stored mock request/responses from server.'
117
-
118
- def clear
119
- error_message = 'ERROR: No request provided. HINT: Use `clear` to selectively clear requests. Use `reset` to clear all.'
120
- execute_command(false, true, error_message) do |client, _|
121
- payload = read_file(options.data)
122
- client.clear(payload)
123
- end
124
- end
125
-
126
- desc 'reset', 'Resets the server clearing all data.'
127
-
128
- def reset
129
- execute_command do |client, _|
130
- client.reset
131
- end
132
- end
133
-
134
- desc 'verify', 'Verify that a request has been made the specified number of times to the server.'
135
-
136
- def verify
137
- execute_command(false, true) do |client, _|
138
- payload = read_file(options.data)
139
- mock_request = payload[HTTP_REQUEST]
140
- mock_times = payload[HTTP_TIMES]
141
-
142
- error 'No request found for verifying against' unless mock_request
143
- mock_times ? client.verify(mock_request, mock_times) : client.verify(mock_request)
144
- end
145
- end
146
- end
@@ -1,111 +0,0 @@
1
- # encoding: UTF-8
2
- require 'rest-client'
3
- require 'logging_factory'
4
- require_relative './model/times'
5
- require_relative './model/request'
6
- require_relative './model/expectation'
7
- require_relative './utility_methods'
8
-
9
- # An abstract client for making requests supported by mock and proxy client.
10
- # @author Nayyara Samuel(mailto: nayyara.samuel@opower.com)
11
- #
12
- module MockServer
13
- RESET_ENDPOINT = '/reset'
14
- CLEAR_ENDPOINT = '/clear'
15
- RETRIEVE_ENDPOINT = '/retrieve'
16
- DUMP_LOG_ENDPOINT = '/dumpToLog'
17
-
18
- # An abstract client for making requests supported by mock and proxy client.
19
- class AbstractClient
20
- include Model::DSL
21
- include Model
22
- include UtilityMethods
23
-
24
- attr_accessor :logger
25
-
26
- def initialize(host, port)
27
- fail 'Cannot instantiate AbstractClient class. You must subclass it.' if self.class == AbstractClient
28
- fail 'Host/port must not be nil' unless host && port
29
- @base = RestClient::Resource.new("http://#{host}:#{port}", headers: { 'Content-Type' => 'application/json' })
30
- @logger = ::LoggingFactory::DEFAULT_FACTORY.log(self.class)
31
- end
32
-
33
- # Clear all expectations with the given request
34
- # @param request [Request] the request to use to clear an expectation
35
- # @return [Object] the response from the clear action
36
- def clear(request)
37
- request = camelized_hash(HTTP_REQUEST => Request.new(symbolize_keys(request)))
38
-
39
- logger.debug("Clearing expectation with request: #{request}")
40
- logger.debug("URL: #{CLEAR_ENDPOINT}. Payload: #{request.to_hash}")
41
-
42
- response = @base[CLEAR_ENDPOINT].put(request.to_json, content_type: :json)
43
- logger.debug("Got clear response: #{response.code}")
44
- parse_string_to_json(response)
45
- end
46
-
47
- # Reset the mock server clearing all expectations previously registered
48
- # @return [Object] the response from the reset action
49
- def reset
50
- request = {}
51
-
52
- logger.debug('Resetting mockserver')
53
- logger.debug("URL: #{RESET_ENDPOINT}. Payload: #{request.to_hash}")
54
-
55
- response = @base[RESET_ENDPOINT].put(request.to_json)
56
- logger.debug("Got reset response: #{response.code}")
57
- parse_string_to_json(response)
58
- end
59
-
60
- # Retrieve the list of requests that have been processed by the server
61
- # @param request [Request] to filter requests
62
- # @return [Object] the list of responses processed by the server
63
- def retrieve(request = nil)
64
- request = request ? camelized_hash(HTTP_REQUEST => Request.new(symbolize_keys(request))) : {}
65
-
66
- logger.debug('Retrieving request list from mockserver')
67
- logger.debug("URL: #{RETRIEVE_ENDPOINT}. Payload: #{request.to_hash}")
68
-
69
- response = @base[RETRIEVE_ENDPOINT].put(request.to_json)
70
- logger.debug("Got retrieve response: #{response.code}")
71
- requests = Requests.new([])
72
- parse_string_to_json(response.body).map { |result| requests << request_from_json(result) } unless response.empty?
73
- requests.code = response.code
74
- requests
75
- end
76
-
77
- # Request to dump logs to file
78
- # @param java [Boolean] true to dump as Java code; false to dump as JSON
79
- # @return [Object] the list of responses processed by the server
80
- def dump_log(request = nil, java = false)
81
- type_params = java ? '?type=java' : ''
82
- url = "#{DUMP_LOG_ENDPOINT}#{type_params}"
83
- request = request ? Request.new(symbolize_keys(request)) : {}
84
-
85
- logger.debug('Sending dump log request to mockserver')
86
- logger.debug("URL: #{url}. Payload: #{request.to_hash}")
87
-
88
- response = @base[url].put(request.to_json)
89
- logger.debug("Got dump to log response: #{response.code}")
90
- parse_string_to_json(response)
91
- end
92
-
93
- # Verify that the given request is called the number of times expected
94
- # @param request [Request] to filter requests
95
- # @param times [Times] expected number of times
96
- # @return [Object] the list of responses processed by the server that match the request
97
- def verify(request, times = exactly(1))
98
- logger.debug('Sending query for verify to mockserver')
99
- results = retrieve(request)
100
-
101
- # Reusing the times model here so interpreting values here
102
- times = Times.new(symbolize_keys(times))
103
- num_times = times.remaining_times
104
- is_exact = !times.unlimited
105
-
106
- fulfilled = is_exact ? (num_times == results.size) : (num_times <= results.size)
107
- fail "Expected request to be present: [#{num_times}] (#{is_exact ? 'exactly' : 'at least'}). But found: [#{results.size}]" unless fulfilled
108
- results
109
- end
110
- end
111
- end
@@ -1,46 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative './model/expectation'
3
- require_relative './abstract_client'
4
- require_relative './utility_methods'
5
-
6
- #
7
- # The client used to interact with the mock server.
8
- # @author:: Nayyara Samuel (mailto: nayyara.samuel@opower.com)
9
- #
10
- module MockServer
11
- EXPECTATION_ENDPOINT = '/expectation'
12
-
13
- # The client used to interact with the mock server.
14
- class MockServerClient < AbstractClient
15
- include Model
16
- include UtilityMethods
17
-
18
- # Registers an expectation with the mockserver
19
- # @param expectation [Expectation] the expectation to create the request from
20
- # @return [Object] the response from the register action
21
- def register(expectation)
22
- fail 'Expectation passed in is not valid type' unless expectation.is_a?(Expectation)
23
- request = create_expectation_request(expectation)
24
-
25
- logger.debug('Registering new expectation')
26
- logger.debug("URL: #{EXPECTATION_ENDPOINT} Payload: #{request.to_hash}")
27
-
28
- response = @base[EXPECTATION_ENDPOINT].put(request.to_json, content_type: :json)
29
- logger.debug("Got register response: #{response.code}")
30
- parse_string_to_json(response)
31
- end
32
-
33
- private
34
-
35
- # Create an expecation request to send to the expectation endpoint of
36
- # @param expectation [Expectation] the expectation to create the request from
37
- # @return [Hash] a hash representing the request to use in registering an expectation with the mock server
38
- # rubocop:disable Lint/LiteralInInterpolation
39
- def create_expectation_request(expectation)
40
- expectation_request = camelized_hash(expectation)
41
- logger.debug("Expectation JSON: #{expectation_request.to_json}")
42
- fail "You can only set either of #{[HTTP_RESPONSE, HTTP_FORWARD]}. But not both" if expectation_request[HTTP_RESPONSE] && expectation_request[HTTP_FORWARD]
43
- expectation_request
44
- end
45
- end
46
- end