http_stub 0.14.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub/configurer/request/http/basic.rb +21 -0
  3. data/lib/http_stub/configurer/request/http/factory.rb +43 -0
  4. data/lib/http_stub/configurer/request/http/multipart.rb +33 -0
  5. data/lib/http_stub/configurer/request/stub.rb +24 -8
  6. data/lib/http_stub/configurer/request/stub_activator.rb +12 -8
  7. data/lib/http_stub/configurer/request/{stub_activator_payload_builder.rb → stub_activator_builder.rb} +4 -4
  8. data/lib/http_stub/configurer/request/stub_builder.rb +34 -0
  9. data/lib/http_stub/configurer/request/stub_response.rb +40 -0
  10. data/lib/http_stub/configurer/request/stub_response_file.rb +20 -0
  11. data/lib/http_stub/configurer/server/command.rb +5 -1
  12. data/lib/http_stub/configurer/server/command_processor.rb +1 -1
  13. data/lib/http_stub/configurer/server/dsl.rb +4 -4
  14. data/lib/http_stub/configurer/server/facade.rb +25 -11
  15. data/lib/http_stub/extensions/core/hash.rb +26 -0
  16. data/lib/http_stub/rake/server_daemon_tasks.rb +1 -1
  17. data/lib/http_stub/rake/server_tasks.rb +1 -1
  18. data/lib/http_stub/rake/task_generators.rb +3 -3
  19. data/lib/http_stub/server/application.rb +117 -0
  20. data/lib/http_stub/server/daemon.rb +39 -0
  21. data/lib/http_stub/{models → server}/exact_value_matcher.rb +1 -1
  22. data/lib/http_stub/{models → server}/hash_with_string_value_matchers.rb +2 -2
  23. data/lib/http_stub/{models → server}/headers.rb +1 -1
  24. data/lib/http_stub/{models → server}/omitted_value_matcher.rb +1 -1
  25. data/lib/http_stub/{models → server}/regexp_value_matcher.rb +1 -1
  26. data/lib/http_stub/{models → server}/registry.rb +10 -3
  27. data/lib/http_stub/{models → server}/request_header_parser.rb +1 -1
  28. data/lib/http_stub/server/response.rb +13 -0
  29. data/lib/http_stub/server/response_pipeline.rb +18 -0
  30. data/lib/http_stub/{models → server}/string_value_matcher.rb +4 -4
  31. data/lib/http_stub/server/stub.rb +37 -0
  32. data/lib/http_stub/{models → server}/stub_activator.rb +10 -2
  33. data/lib/http_stub/{controllers → server}/stub_activator_controller.rb +5 -5
  34. data/lib/http_stub/{controllers → server}/stub_controller.rb +4 -4
  35. data/lib/http_stub/server/stub_factory.rb +30 -0
  36. data/lib/http_stub/{models → server}/stub_headers.rb +4 -4
  37. data/lib/http_stub/{models → server}/stub_parameters.rb +2 -2
  38. data/lib/http_stub/{models → server}/stub_registry.rb +4 -4
  39. data/lib/http_stub/server/stub_response/base.rb +62 -0
  40. data/lib/http_stub/server/stub_response/file.rb +48 -0
  41. data/lib/http_stub/server/stub_response/text.rb +17 -0
  42. data/lib/http_stub/server/stub_response.rb +14 -0
  43. data/lib/http_stub/{models → server}/stub_triggers.rb +6 -2
  44. data/lib/http_stub/{models → server}/stub_uri.rb +2 -2
  45. data/lib/http_stub/{views → server/views}/_stub.haml +0 -0
  46. data/lib/http_stub/{views → server/views}/application.sass +0 -0
  47. data/lib/http_stub/{views → server/views}/layout.haml +0 -0
  48. data/lib/http_stub/{views → server/views}/stub_activators.haml +0 -0
  49. data/lib/http_stub/{views → server/views}/stubs.haml +0 -0
  50. data/lib/http_stub/version.rb +1 -1
  51. data/lib/http_stub.rb +41 -24
  52. data/spec/lib/http_stub/configurer/deprecated_dsl_spec.rb +2 -2
  53. data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +15 -0
  54. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +148 -0
  55. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +74 -0
  56. data/spec/lib/http_stub/configurer/request/stub_activator_builder_spec.rb +119 -0
  57. data/spec/lib/http_stub/configurer/request/stub_activator_spec.rb +24 -22
  58. data/spec/lib/http_stub/configurer/request/stub_builder_spec.rb +154 -0
  59. data/spec/lib/http_stub/configurer/request/stub_response_spec.rb +136 -0
  60. data/spec/lib/http_stub/configurer/request/stub_spec.rb +238 -17
  61. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +7 -3
  62. data/spec/lib/http_stub/configurer/server/command_spec.rb +7 -6
  63. data/spec/lib/http_stub/configurer/server/dsl_spec.rb +58 -94
  64. data/spec/lib/http_stub/configurer/server/facade_spec.rb +56 -41
  65. data/spec/lib/http_stub/configurer_integration_spec.rb +180 -81
  66. data/spec/lib/http_stub/{hash_extensions_spec.rb → extensions/core/hash_spec.rb} +1 -1
  67. data/spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb +1 -1
  68. data/spec/lib/http_stub/{server_integration_spec.rb → server/application_integration_spec.rb} +1 -1
  69. data/spec/lib/http_stub/server/application_spec.rb +205 -0
  70. data/spec/lib/http_stub/server/daemon_integration_spec.rb +7 -0
  71. data/spec/lib/http_stub/{server_daemon_spec.rb → server/daemon_spec.rb} +4 -4
  72. data/spec/lib/http_stub/{models → server}/exact_value_matcher_spec.rb +2 -2
  73. data/spec/lib/http_stub/{models → server}/hash_with_string_value_matchers_spec.rb +5 -5
  74. data/spec/lib/http_stub/{models → server}/headers_spec.rb +2 -2
  75. data/spec/lib/http_stub/{models → server}/omitted_value_matcher_spec.rb +2 -2
  76. data/spec/lib/http_stub/{models → server}/regexp_value_matcher_spec.rb +2 -2
  77. data/spec/lib/http_stub/{models → server}/registry_spec.rb +52 -55
  78. data/spec/lib/http_stub/{models → server}/request_header_parser_spec.rb +4 -4
  79. data/spec/lib/http_stub/server/response_pipeline_spec.rb +29 -0
  80. data/spec/lib/http_stub/server/response_spec.rb +41 -0
  81. data/spec/lib/http_stub/{models → server}/string_value_matcher_spec.rb +11 -11
  82. data/spec/lib/http_stub/server/stub_activator_controller_spec.rb +85 -0
  83. data/spec/lib/http_stub/server/stub_activator_spec.rb +124 -0
  84. data/spec/lib/http_stub/server/stub_controller_spec.rb +74 -0
  85. data/spec/lib/http_stub/server/stub_factory_spec.rb +117 -0
  86. data/spec/lib/http_stub/{models → server}/stub_headers_spec.rb +9 -9
  87. data/spec/lib/http_stub/{models → server}/stub_parameters_spec.rb +6 -6
  88. data/spec/lib/http_stub/{models → server}/stub_registry_integration_spec.rb +3 -3
  89. data/spec/lib/http_stub/{models → server}/stub_registry_spec.rb +15 -35
  90. data/spec/lib/http_stub/server/stub_response/base_spec.rb +225 -0
  91. data/spec/lib/http_stub/server/stub_response/file_spec.rb +140 -0
  92. data/spec/lib/http_stub/server/stub_response/text_spec.rb +103 -0
  93. data/spec/lib/http_stub/server/stub_response_spec.rb +49 -0
  94. data/spec/lib/http_stub/{models → server}/stub_spec.rb +34 -18
  95. data/spec/lib/http_stub/{models → server}/stub_triggers_spec.rb +26 -16
  96. data/spec/lib/http_stub/{models → server}/stub_uri_spec.rb +5 -5
  97. data/spec/resources/sample.pdf +0 -0
  98. data/spec/resources/sample.txt +1 -0
  99. data/spec/spec_helper.rb +13 -4
  100. data/spec/support/stub_fixture.rb +106 -0
  101. metadata +148 -102
  102. data/lib/http_stub/configurer/request/stub_payload_builder.rb +0 -46
  103. data/lib/http_stub/hash_extensions.rb +0 -22
  104. data/lib/http_stub/models/request_pipeline.rb +0 -13
  105. data/lib/http_stub/models/response.rb +0 -43
  106. data/lib/http_stub/models/stub.rb +0 -35
  107. data/lib/http_stub/server.rb +0 -114
  108. data/lib/http_stub/server_daemon.rb +0 -36
  109. data/spec/lib/http_stub/configurer/request/stub_activator_payload_builder_spec.rb +0 -103
  110. data/spec/lib/http_stub/configurer/request/stub_payload_builder_spec.rb +0 -304
  111. data/spec/lib/http_stub/controllers/stub_activator_controller_spec.rb +0 -94
  112. data/spec/lib/http_stub/controllers/stub_controller_spec.rb +0 -83
  113. data/spec/lib/http_stub/models/request_pipeline_spec.rb +0 -17
  114. data/spec/lib/http_stub/models/response_spec.rb +0 -206
  115. data/spec/lib/http_stub/models/stub_activator_spec.rb +0 -76
  116. data/spec/lib/http_stub/server_daemon_integration_spec.rb +0 -7
  117. data/spec/lib/http_stub/server_spec.rb +0 -234
  118. data/spec/support/http_stub/configurer/request/stub_payload_builder_shared_context.rb +0 -27
@@ -1,304 +0,0 @@
1
- describe HttpStub::Configurer::Request::StubPayloadBuilder do
2
-
3
- let(:response_defaults) { {} }
4
-
5
- let(:builder) { HttpStub::Configurer::Request::StubPayloadBuilder.new(response_defaults) }
6
-
7
- shared_context "triggers one stub" do
8
-
9
- let(:trigger_payload) { { "trigger_key" => "trigger value" } }
10
- let(:trigger_builder) do
11
- instance_double(HttpStub::Configurer::Request::StubPayloadBuilder, build: trigger_payload)
12
- end
13
-
14
- before(:example) { builder.trigger(trigger_builder) }
15
-
16
- end
17
-
18
- shared_context "triggers many stubs" do
19
-
20
- let(:trigger_payloads) { (1..3).map { |i| { "trigger_#{i}_key" => "trigger #{i} value" } } }
21
- let(:trigger_builders) do
22
- trigger_payloads.map do |payload|
23
- instance_double(HttpStub::Configurer::Request::StubPayloadBuilder, build: payload)
24
- end
25
- end
26
-
27
- before(:example) { builder.trigger(trigger_builders) }
28
-
29
- end
30
-
31
- describe "#respond_with" do
32
-
33
- it "does not modify any provided response defaults" do
34
- original_response_defaults = response_defaults.clone
35
-
36
- builder.respond_with(status: 201)
37
-
38
- expect(response_defaults).to eql(original_response_defaults)
39
- end
40
-
41
- end
42
-
43
- describe "#build" do
44
-
45
- context "when provided a request match and response data" do
46
-
47
- include_context "stub payload builder arguments"
48
-
49
- subject { builder.build }
50
-
51
- before(:example) do
52
- allow(HttpStub::Configurer::Request::ControllableValue).to receive(:format)
53
-
54
- builder.match_requests(uri, request_options)
55
- builder.respond_with(response_options)
56
- end
57
-
58
- context "when request header is provided" do
59
-
60
- it "formats the headers into control values" do
61
- expect(HttpStub::Configurer::Request::ControllableValue).to receive(:format).with(request_headers)
62
-
63
- subject
64
- end
65
-
66
- end
67
-
68
- context "when no request header is provided" do
69
-
70
- let(:request_headers) { nil }
71
-
72
- it "formats an empty header hash" do
73
- expect(HttpStub::Configurer::Request::ControllableValue).to receive(:format).with({})
74
-
75
- subject
76
- end
77
-
78
- end
79
-
80
- context "when a request parameter is provided" do
81
-
82
- it "formats the request parameters into control values" do
83
- expect(HttpStub::Configurer::Request::ControllableValue).to receive(:format).with(request_parameters)
84
-
85
- subject
86
- end
87
-
88
- end
89
-
90
- context "when no request parameter is provided" do
91
-
92
- let(:request_parameters) { nil }
93
-
94
- it "formats an empty parameter hash" do
95
- expect(HttpStub::Configurer::Request::ControllableValue).to receive(:format).with({})
96
-
97
- subject
98
- end
99
-
100
- end
101
-
102
- context "when many triggers are added" do
103
-
104
- include_context "triggers many stubs"
105
-
106
- it "builds the payload for each trigger" do
107
- trigger_builders.each { |trigger_builder| expect(trigger_builder).to receive(:build) }
108
-
109
- subject
110
- end
111
-
112
- end
113
-
114
- context "builds a request payload" do
115
-
116
- it "has an entry containing the control value representation of the uri" do
117
- allow(HttpStub::Configurer::Request::ControllableValue).to(
118
- receive(:format).with(uri).and_return("uri as a string")
119
- )
120
-
121
- expect(subject).to include(uri: "uri as a string")
122
- end
123
-
124
- it "has an entry for the method option" do
125
- expect(subject).to include(method: stub_method)
126
- end
127
-
128
- it "has an entry containing the string representation of the request headers" do
129
- allow(HttpStub::Configurer::Request::ControllableValue).to(
130
- receive(:format).with(request_headers).and_return("request headers as string")
131
- )
132
-
133
- expect(subject).to include(headers: "request headers as string")
134
- end
135
-
136
- it "has an entry containing the string representation of the request parameters" do
137
- allow(HttpStub::Configurer::Request::ControllableValue).to(
138
- receive(:format).with(request_parameters).and_return("request parameters as string")
139
- )
140
-
141
- expect(subject).to include(parameters: "request parameters as string")
142
- end
143
-
144
- context "when a status response argument is provided" do
145
-
146
- it "has a response entry for the argument" do
147
- expect(subject[:response]).to include(status: response_status)
148
- end
149
-
150
- end
151
-
152
- context "when no status response argument is provided" do
153
-
154
- let(:response_status) { nil }
155
-
156
- it "has a response entry with an empty status code" do
157
- expect(subject[:response]).to include(status: "")
158
- end
159
-
160
- end
161
-
162
- context "when response headers are provided" do
163
-
164
- let(:response_headers) { { response_header_name: "value" } }
165
-
166
- it "has a headers response entry containing the the provided headers" do
167
- expect(subject[:response]).to include(headers: response_headers)
168
- end
169
-
170
- end
171
-
172
- context "when response headers are omitted" do
173
-
174
- let (:response_headers) { nil }
175
-
176
- it "has a headers response entry containing an empty hash" do
177
- expect(subject[:response]).to include(headers: {})
178
- end
179
-
180
- end
181
-
182
- it "has an entry for the response body argument" do
183
- expect(subject[:response]).to include(body: response_body)
184
- end
185
-
186
- context "when a delay option is provided" do
187
-
188
- it "has a response entry for the argument" do
189
- expect(subject[:response]).to include(delay_in_seconds: response_delay_in_seconds)
190
- end
191
-
192
- end
193
-
194
- context "when a delay option is omitted" do
195
-
196
- let(:response_delay_in_seconds) { nil }
197
-
198
- it "has a response entry with an empty delay" do
199
- expect(subject[:response]).to include(delay_in_seconds: "")
200
- end
201
-
202
- end
203
-
204
- context "when a trigger is added" do
205
-
206
- include_context "triggers one stub"
207
-
208
- it "has a triggers entry containing the stub trigger payload" do
209
- expect(subject).to include(triggers: [ trigger_payload ])
210
- end
211
-
212
- end
213
-
214
- context "when many triggers are added" do
215
-
216
- include_context "triggers many stubs"
217
-
218
- it "has a triggers entry containing the stub trigger payloads" do
219
- expect(subject).to include(triggers: trigger_payloads)
220
- end
221
-
222
- end
223
-
224
- context "when no triggers are added" do
225
-
226
- it "has a triggers entry containing an empty hash" do
227
- expect(subject).to include(triggers: [])
228
- end
229
-
230
- end
231
-
232
- context "when a root level response attribute is defaulted" do
233
-
234
- let(:response_defaults) { { status: 204 } }
235
-
236
- context "and is not overridden" do
237
-
238
- let(:response_options) { {} }
239
-
240
- it "assumes the defaulted value" do
241
- expect(subject[:response]).to include(status: 204)
242
- end
243
-
244
- end
245
-
246
- context "and is overridden" do
247
-
248
- let(:response_status) { 302 }
249
-
250
- it "assumes the override value" do
251
- expect(subject[:response]).to include(status: 302)
252
- end
253
-
254
- end
255
-
256
- end
257
-
258
- context "when a nested response attribute is defaulted" do
259
-
260
- let(:response_defaults) { { headers: { response_header_name: "default value" } } }
261
-
262
- context "and the attribute has no other values defined" do
263
-
264
- let(:response_headers) { {} }
265
-
266
- it "assumes the defaults attributes" do
267
- expect(subject[:response]).to include(response_defaults)
268
- end
269
-
270
- end
271
-
272
- context "and the attribute has additional values defined" do
273
-
274
- let(:response_headers) { { additional_header_name: "additional value" } }
275
-
276
- it "includes the defaults values" do
277
- expect(subject[:response][:headers]).to include(response_defaults[:headers])
278
- end
279
-
280
- it "includes the additional values" do
281
- expect(subject[:response][:headers]).to include(response_headers)
282
- end
283
-
284
- end
285
-
286
- context "and the attributes default values have been overridden" do
287
-
288
- let(:response_headers) { { response_header_name: "override value"} }
289
-
290
- it "assumes the defaults attributes" do
291
- expect(subject[:response]).to include(headers: response_headers)
292
- end
293
-
294
- end
295
-
296
- end
297
-
298
- end
299
-
300
- end
301
-
302
- end
303
-
304
- end
@@ -1,94 +0,0 @@
1
- describe HttpStub::Controllers::StubActivatorController do
2
-
3
- let(:request_body) { "Some request body" }
4
- let(:request) { double("HttpRequest", body: double("RequestBody", read: request_body)) }
5
- let(:stub_activator_options) { double("StubActivatorOptions") }
6
- let(:the_stub) { double(HttpStub::Models::Stub) }
7
- let(:stub_activator) { double(HttpStub::Models::StubActivator, the_stub: the_stub) }
8
- let(:stub_activator_registry) { double("HttpStub::Models::StubActivatorRegistry").as_null_object }
9
- let(:stub_registry) { double("HttpStub::Models::StubRegistry").as_null_object }
10
- let(:controller) { HttpStub::Controllers::StubActivatorController.new(stub_activator_registry, stub_registry) }
11
-
12
- before(:example) { allow(JSON).to receive(:parse).and_return(stub_activator_options) }
13
-
14
- describe "#register" do
15
-
16
- before(:example) do
17
- allow(HttpStub::Models::StubActivator).to receive(:new).and_return(stub_activator)
18
- end
19
-
20
- it "parses an options hash from the JSON request body" do
21
- expect(JSON).to receive(:parse).with(request_body).and_return(stub_activator_options)
22
-
23
- controller.register(request)
24
- end
25
-
26
- it "creates a stub activator from the parsed options" do
27
- expect(HttpStub::Models::StubActivator).to receive(:new).with(stub_activator_options).and_return(stub_activator)
28
-
29
- controller.register(request)
30
- end
31
-
32
- it "adds the created activator to the activator registry" do
33
- expect(stub_activator_registry).to receive(:add).with(stub_activator, request)
34
-
35
- controller.register(request)
36
- end
37
-
38
- it "returns a success response" do
39
- expect(controller.register(request)).to eql(HttpStub::Models::Response::SUCCESS)
40
- end
41
-
42
- end
43
-
44
- describe "#activate" do
45
-
46
- describe "when a stub activator has been registered that is activated by the request" do
47
-
48
- before(:example) do
49
- allow(stub_activator_registry).to receive(:find_for).with(request).and_return(stub_activator)
50
- end
51
-
52
- it "adds the activators stub to the stub registry" do
53
- expect(stub_registry).to receive(:add).with(the_stub, request)
54
-
55
- controller.activate(request)
56
- end
57
-
58
- it "returns a success response" do
59
- expect(controller.activate(request)).to eql(HttpStub::Models::Response::SUCCESS)
60
- end
61
-
62
- end
63
-
64
- describe "when no stub activator is activated by the request" do
65
-
66
- before(:example) do
67
- allow(stub_activator_registry).to receive(:find_for).with(request).and_return(nil)
68
- end
69
-
70
- it "does not add a stub to the registry" do
71
- expect(stub_registry).not_to receive(:add)
72
-
73
- controller.activate(request)
74
- end
75
-
76
- it "returns an empty response" do
77
- expect(controller.activate(request)).to eql(HttpStub::Models::Response::EMPTY)
78
- end
79
-
80
- end
81
-
82
- end
83
-
84
- describe "#clear" do
85
-
86
- it "clears the activator registry" do
87
- expect(stub_activator_registry).to receive(:clear).with(request)
88
-
89
- controller.clear(request)
90
- end
91
-
92
- end
93
-
94
- end
@@ -1,83 +0,0 @@
1
- describe HttpStub::Controllers::StubController do
2
-
3
- let(:request_body) { "Some request body" }
4
- let(:stub_options) { double("StubOptions") }
5
- let(:request) { double("HttpRequest", body: double("RequestBody", read: request_body)) }
6
- let(:response) { double(HttpStub::Models::Response) }
7
- let(:the_stub) { double(HttpStub::Models::Stub, response: response) }
8
- let(:registry) { double(HttpStub::Models::Registry).as_null_object }
9
- let(:controller) { HttpStub::Controllers::StubController.new(registry) }
10
-
11
- before(:example) { allow(JSON).to receive(:parse).and_return(stub_options) }
12
-
13
- describe "#register" do
14
-
15
- before(:example) do
16
- allow(HttpStub::Models::Stub).to receive(:new).and_return(the_stub)
17
- end
18
-
19
- it "parses an options hash from the JSON request body" do
20
- expect(JSON).to receive(:parse).with(request_body).and_return(stub_options)
21
-
22
- controller.register(request)
23
- end
24
-
25
- it "creates a stub from the parsed options" do
26
- expect(HttpStub::Models::Stub).to receive(:new).with(stub_options).and_return(the_stub)
27
-
28
- controller.register(request)
29
- end
30
-
31
- it "adds the stub to the stub registry" do
32
- expect(registry).to receive(:add).with(the_stub, request)
33
-
34
- controller.register(request)
35
- end
36
-
37
- it "returns a success response" do
38
- expect(controller.register(request)).to eql(HttpStub::Models::Response::SUCCESS)
39
- end
40
-
41
- end
42
-
43
- describe "#replay" do
44
-
45
- describe "when a stub has been registered that should be replayed for the request" do
46
-
47
- before(:example) do
48
- allow(registry).to receive(:find_for).with(request).and_return(the_stub)
49
- end
50
-
51
- it "returns the stubs response" do
52
- expect(the_stub).to receive(:response).and_return(response)
53
-
54
- expect(controller.replay(request)).to eql(response)
55
- end
56
-
57
- end
58
-
59
- describe "when no stub should be replayed for the request" do
60
-
61
- before(:example) do
62
- allow(registry).to receive(:find_for).with(request).and_return(nil)
63
- end
64
-
65
- it "returns an empty response" do
66
- expect(controller.replay(request)).to eql(HttpStub::Models::Response::EMPTY)
67
- end
68
-
69
- end
70
-
71
- end
72
-
73
- describe "#clear" do
74
-
75
- it "clears the stub registry" do
76
- expect(registry).to receive(:clear).with(request)
77
-
78
- controller.clear(request)
79
- end
80
-
81
- end
82
-
83
- end
@@ -1,17 +0,0 @@
1
- describe HttpStub::Models::RequestPipeline do
2
-
3
- let(:request_pipeline) { HttpStub::Models::RequestPipeline }
4
-
5
- describe ".before_halt" do
6
-
7
- let(:response) { double(HttpStub::Models::Response, delay_in_seconds: 5) }
8
-
9
- it "sleeps for specified duration" do
10
- expect(request_pipeline).to receive(:sleep).with(5)
11
-
12
- request_pipeline.before_halt(response)
13
- end
14
-
15
- end
16
-
17
- end
@@ -1,206 +0,0 @@
1
- describe HttpStub::Models::Response do
2
-
3
- let(:status) { 202 }
4
- let(:headers) { nil }
5
- let(:body) { "A response body" }
6
- let(:delay_in_seconds) { 18 }
7
-
8
- let(:response) do
9
- HttpStub::Models::Response.new(
10
- "status" => status, "headers" => headers, "body" => body, "delay_in_seconds" => delay_in_seconds
11
- )
12
- end
13
-
14
- describe "::SUCCESS" do
15
-
16
- let(:response) { HttpStub::Models::Response::SUCCESS }
17
-
18
- it "has a status of 200" do
19
- expect(response.status).to eql(200)
20
- end
21
-
22
- it "has a body containing OK to visually indicate success to those interacting via a browser" do
23
- expect(response.body).to match(/OK/)
24
- end
25
-
26
- end
27
-
28
- describe "::ERROR" do
29
-
30
- let(:response) { HttpStub::Models::Response::ERROR }
31
-
32
- it "has a status of 404" do
33
- expect(response.status).to eql(404)
34
- end
35
-
36
- it "has a body containing ERROR to visually indicate the error to those interacting via a browser" do
37
- expect(response.body).to match(/ERROR/)
38
- end
39
-
40
- end
41
-
42
- describe "#status" do
43
-
44
- context "when a value is provided in the arguments" do
45
-
46
- context "that is an integer" do
47
-
48
- it "returns the value provided" do
49
- expect(response.status).to eql(status)
50
- end
51
-
52
- end
53
-
54
- context "that is an empty string" do
55
-
56
- let(:status) { "" }
57
-
58
- it "returns 200" do
59
- expect(response.status).to eql(200)
60
- end
61
-
62
- end
63
-
64
- end
65
-
66
- context "when the status is not provided in the arguments" do
67
-
68
- let(:response) { HttpStub::Models::Response.new("body" => body, "delay_in_seconds" => delay_in_seconds) }
69
-
70
- it "returns 200" do
71
- expect(response.status).to eql(200)
72
- end
73
-
74
- end
75
-
76
- end
77
-
78
- describe "#body" do
79
-
80
- it "returns the value provided in the arguments" do
81
- expect(response.body).to eql("A response body")
82
- end
83
-
84
- end
85
-
86
- describe "#delay_in_seconds" do
87
-
88
- context "when a value is provided in the arguments" do
89
-
90
- context "that is an integer" do
91
-
92
- it "returns the value" do
93
- expect(response.delay_in_seconds).to eql(delay_in_seconds)
94
- end
95
-
96
- end
97
-
98
- context "that is an empty string" do
99
-
100
- let(:delay_in_seconds) { "" }
101
-
102
- it "returns 0" do
103
- expect(response.delay_in_seconds).to eql(0)
104
- end
105
-
106
- end
107
-
108
- end
109
-
110
- context "when a value is not provided in the arguments" do
111
-
112
- let(:response) { HttpStub::Models::Response.new("status" => status, "body" => body) }
113
-
114
- it "returns 0" do
115
- expect(response.delay_in_seconds).to eql(0)
116
- end
117
-
118
- end
119
-
120
- end
121
-
122
- describe "#headers" do
123
-
124
- let(:response_header_hash) { response.headers.to_hash }
125
-
126
- it "is Headers" do
127
- expect(response.headers).to be_a(HttpStub::Models::Headers)
128
- end
129
-
130
- context "when headers are provided" do
131
-
132
- context "that include a content type" do
133
-
134
- let(:headers) do
135
- { "content-type" => "some/content/type", "some_header" => "some value", "another_header" => "another value" }
136
- end
137
-
138
- it "returns headers including the provided headers" do
139
- expect(response_header_hash).to eql(headers)
140
- end
141
-
142
- end
143
-
144
- context "that do not include a content type" do
145
-
146
- let(:headers) do
147
- {
148
- "some_header" => "some value",
149
- "another_header" => "another value",
150
- "yet_another_header" => "yet another value"
151
- }
152
- end
153
-
154
- it "returns headers including the provided headers" do
155
- expect(response_header_hash).to include(headers)
156
- end
157
-
158
- it "returns headers including json as the default response content type" do
159
- expect(response_header_hash).to include("content-type" => "application/json")
160
- end
161
-
162
- end
163
-
164
- end
165
-
166
- context "when no headers are provided" do
167
-
168
- let(:headers) { nil }
169
-
170
- it "returns headers containing json as the default response content type" do
171
- expect(response_header_hash).to eql("content-type" => "application/json")
172
- end
173
-
174
- end
175
-
176
- end
177
-
178
- describe "#empty?" do
179
-
180
- context "when the response is EMPTY" do
181
-
182
- it "returns true" do
183
- expect(HttpStub::Models::Response::EMPTY).to be_empty
184
- end
185
-
186
- end
187
-
188
- context "when the response is not EMPTY but contains no values" do
189
-
190
- it "returns true" do
191
- expect(HttpStub::Models::Response.new).to be_empty
192
- end
193
-
194
- end
195
-
196
- context "when the response is not EMPTY" do
197
-
198
- it "returns false" do
199
- expect(HttpStub::Models::Response::SUCCESS).not_to be_empty
200
- end
201
-
202
- end
203
-
204
- end
205
-
206
- end