http_stub 0.24.3 → 0.25.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub.rb +8 -2
  3. data/lib/http_stub/server/application/application.rb +16 -4
  4. data/lib/http_stub/server/request/request.rb +6 -1
  5. data/lib/http_stub/server/response.rb +5 -3
  6. data/lib/http_stub/server/scenario/controller.rb +2 -2
  7. data/lib/http_stub/server/scenario/parser.rb +1 -3
  8. data/lib/http_stub/server/stub/controller.rb +8 -6
  9. data/lib/http_stub/server/stub/empty.rb +9 -5
  10. data/lib/http_stub/server/stub/match/controller.rb +22 -0
  11. data/lib/http_stub/server/stub/match/{result.rb → match.rb} +9 -1
  12. data/lib/http_stub/server/stub/match/miss.rb +19 -0
  13. data/lib/http_stub/server/stub/match/rules.rb +33 -0
  14. data/lib/http_stub/server/stub/parser.rb +1 -1
  15. data/lib/http_stub/server/stub/payload.rb +20 -0
  16. data/lib/http_stub/server/stub/payload/base_uri_modifier.rb +17 -0
  17. data/lib/http_stub/server/stub/payload/response_body_modifier.rb +19 -0
  18. data/lib/http_stub/server/stub/response/base.rb +5 -1
  19. data/lib/http_stub/server/stub/response/file.rb +5 -0
  20. data/lib/http_stub/server/stub/response/text.rb +4 -0
  21. data/lib/http_stub/server/stub/stub.rb +8 -18
  22. data/lib/http_stub/server/stub/triggers.rb +1 -1
  23. data/lib/http_stub/server/views/_activate_scenario.haml +17 -4
  24. data/lib/http_stub/server/views/_stub.haml +2 -2
  25. data/lib/http_stub/server/views/{_match.haml → _stub_match.haml} +1 -1
  26. data/lib/http_stub/server/views/_stub_miss.haml +3 -0
  27. data/lib/http_stub/server/views/index.haml +4 -2
  28. data/lib/http_stub/server/views/stub_matches.haml +4 -0
  29. data/lib/http_stub/server/views/stub_misses.haml +4 -0
  30. data/lib/http_stub/version.rb +1 -1
  31. data/spec/acceptance/stub_match_last_spec.rb +170 -0
  32. data/spec/acceptance/stub_match_list_spec.rb +115 -0
  33. data/spec/acceptance/stub_miss_list_spec.rb +58 -0
  34. data/spec/lib/http_stub/server/application/application_spec.rb +57 -13
  35. data/spec/lib/http_stub/server/request/request_spec.rb +41 -1
  36. data/spec/lib/http_stub/server/response_spec.rb +18 -12
  37. data/spec/lib/http_stub/server/scenario/controller_spec.rb +4 -4
  38. data/spec/lib/http_stub/server/scenario/parser_spec.rb +30 -27
  39. data/spec/lib/http_stub/server/stub/controller_spec.rb +45 -26
  40. data/spec/lib/http_stub/server/stub/empty_spec.rb +14 -14
  41. data/spec/lib/http_stub/server/stub/match/controller_spec.rb +69 -0
  42. data/spec/lib/http_stub/server/stub/match/match_spec.rb +146 -0
  43. data/spec/lib/http_stub/server/stub/match/miss_spec.rb +15 -0
  44. data/spec/lib/http_stub/server/stub/match/rules_spec.rb +247 -0
  45. data/spec/lib/http_stub/server/stub/parser_spec.rb +12 -14
  46. data/spec/lib/http_stub/server/stub/payload/base_uri_modifier_spec.rb +23 -0
  47. data/spec/lib/http_stub/server/{payload_file_consolidator_spec.rb → stub/payload/response_body_modifier_spec.rb} +22 -14
  48. data/spec/lib/http_stub/server/stub/payload_spec.rb +33 -0
  49. data/spec/lib/http_stub/server/stub/response/base_spec.rb +22 -0
  50. data/spec/lib/http_stub/server/stub/response/file_spec.rb +29 -1
  51. data/spec/lib/http_stub/server/stub/response/text_spec.rb +18 -0
  52. data/spec/lib/http_stub/server/stub/stub_spec.rb +48 -145
  53. data/spec/lib/http_stub/server/stub/triggers_spec.rb +14 -0
  54. data/spec/spec_helper.rb +7 -3
  55. data/spec/support/{configurer_integration.rb → http_stub/configurer_integration.rb} +3 -2
  56. data/spec/support/http_stub/html_view_excluding_request_details.rb +11 -0
  57. data/spec/support/http_stub/html_view_including_request_details.rb +47 -0
  58. data/spec/support/http_stub/server/scenario/scenario_fixture.rb +1 -1
  59. data/spec/support/http_stub/server/stub/match/match_fixture.rb +21 -0
  60. data/spec/support/http_stub/server/stub/match/miss_fixture.rb +17 -0
  61. data/spec/support/{server_integration.rb → http_stub/server_integration.rb} +0 -0
  62. data/spec/support/http_stub/stub_fixture.rb +1 -0
  63. data/spec/support/http_stub/stub_registrator.rb +83 -0
  64. metadata +47 -19
  65. data/lib/http_stub/server/stub/payload_file_consolidator.rb +0 -18
  66. data/lib/http_stub/server/views/_miss.haml +0 -7
  67. data/lib/http_stub/server/views/match_results.haml +0 -7
  68. data/spec/acceptance/stub_match_spec.rb +0 -252
  69. data/spec/lib/http_stub/server/stub/match/result_spec.rb +0 -33
  70. data/spec/support/http_stub/server/stub/match/result_fixture.rb +0 -19
@@ -0,0 +1,146 @@
1
+ describe HttpStub::Server::Stub::Match::Match do
2
+
3
+ let(:request) { instance_double(HttpStub::Server::Request::Request) }
4
+ let(:response) { instance_double(HttpStub::Server::Stub::Response::Base) }
5
+ let(:stub) { instance_double(HttpStub::Server::Stub::Stub) }
6
+
7
+ let(:match) { HttpStub::Server::Stub::Match::Match.new(request, response, stub) }
8
+
9
+ describe "#request" do
10
+
11
+ it "exposes the provided value" do
12
+ expect(match.request).to eql(request)
13
+ end
14
+
15
+ end
16
+
17
+ describe "#response" do
18
+
19
+ it "exposes the provided value" do
20
+ expect(match.response).to eql(response)
21
+ end
22
+
23
+ end
24
+
25
+ describe "#stub" do
26
+
27
+ it "exposes the provided value" do
28
+ expect(match.stub).to eql(stub)
29
+ end
30
+
31
+ end
32
+
33
+ describe "#matches?" do
34
+
35
+ let(:request_uri) { "/some/endpoint/uri" }
36
+ let(:request_method) { "GET" }
37
+
38
+ let(:criteria_uri) { request_uri }
39
+ let(:criteria_method) { criteria_method }
40
+ let(:criteria) { { uri: criteria_uri, method: criteria_method } }
41
+ let(:logger) { instance_double(Logger) }
42
+
43
+ subject { match.matches?(criteria, logger) }
44
+
45
+ before(:each) do
46
+ allow(request).to receive(:uri).and_return(request_uri)
47
+ allow(request).to receive(:method).and_return(request_method)
48
+ end
49
+
50
+ context "when the uri matches" do
51
+
52
+ let(:criteria_uri) { request_uri }
53
+
54
+ context "and the criteria method is the same as the results request method" do
55
+
56
+ let(:criteria_method) { request_method }
57
+
58
+ it "returns true" do
59
+ expect(subject).to be(true)
60
+ end
61
+
62
+ end
63
+
64
+ context "and the criteria method has different casing than the results request method" do
65
+
66
+ let(:criteria_method) { request_method.downcase }
67
+
68
+ it "returns true" do
69
+ expect(subject).to be(true)
70
+ end
71
+
72
+ end
73
+
74
+ context "and the criteria method is different than the results request method" do
75
+
76
+ let(:criteria_method) { "POST" }
77
+
78
+ it "returns false" do
79
+ expect(subject).to be(false)
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ context "when the method matches" do
87
+
88
+ let(:criteria_method) { request_method }
89
+
90
+ context "and the criteria uri is the same as the results request uri" do
91
+
92
+ let(:criteria_uri) { request_uri }
93
+
94
+ it "returns true" do
95
+ expect(subject).to be(true)
96
+ end
97
+
98
+ end
99
+
100
+ context "and the criteria uri partially matches the results request uri" do
101
+
102
+ let(:criteria_uri) { "endpoint/uri" }
103
+
104
+ it "returns true" do
105
+ expect(subject).to be(true)
106
+ end
107
+
108
+ end
109
+
110
+ context "and the criteria uri is not within the results request uri" do
111
+
112
+ let(:criteria_uri) { "/another/endpoint/uri" }
113
+
114
+ it "returns false" do
115
+ expect(subject).to be(false)
116
+ end
117
+
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+
124
+ describe "#to_hash" do
125
+
126
+ subject { match.to_hash }
127
+
128
+ describe "supporting creating a JSON representation of the result" do
129
+
130
+ it "contains the matching request" do
131
+ expect(subject).to include(request: request)
132
+ end
133
+
134
+ it "contains the served response" do
135
+ expect(subject).to include(response: response)
136
+ end
137
+
138
+ it "contains the matched stub" do
139
+ expect(subject).to include(stub: stub)
140
+ end
141
+
142
+ end
143
+
144
+ end
145
+
146
+ end
@@ -0,0 +1,15 @@
1
+ describe HttpStub::Server::Stub::Match::Miss do
2
+
3
+ let(:request) { instance_double(HttpStub::Server::Request::Request) }
4
+
5
+ let(:miss) { HttpStub::Server::Stub::Match::Miss.new(request) }
6
+
7
+ describe "#request" do
8
+
9
+ it "exposes the provided value" do
10
+ expect(miss.request).to eql(request)
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,247 @@
1
+ describe HttpStub::Server::Stub::Match::Rules do
2
+
3
+ let(:header_payload) do
4
+ {
5
+ "match_rule_header1" => "match_rule_header_value1",
6
+ "match_rule_header2" => "match_rule_header_value2",
7
+ "match_rule_header3" => "match_rule_header_value3"
8
+ }
9
+ end
10
+ let(:parameter_payload) do
11
+ {
12
+ "match_rule_parameter1" => "match_rule_parameter_value1",
13
+ "match_rule_parameter2" => "match_rule_parameter_value2",
14
+ "match_rule_parameter3" => "match_rule_parameter_value3"
15
+ }
16
+ end
17
+ let(:method_payload) { "get" }
18
+ let(:match_rules_payload) do
19
+ {
20
+ "uri" => "/a_path",
21
+ "method" => method_payload,
22
+ "headers" => header_payload,
23
+ "parameters" => parameter_payload,
24
+ "body" => { "schema" => { "json" => "stub schema definition" } }
25
+ }
26
+ end
27
+ let(:uri_rule) { instance_double(HttpStub::Server::Stub::Match::Rule::Uri, matches?: true) }
28
+ let(:method_rule) { instance_double(HttpStub::Server::Stub::Match::Rule::Method, matches?: true) }
29
+ let(:headers_rule) { instance_double(HttpStub::Server::Stub::Match::Rule::Headers, matches?: true) }
30
+ let(:parameters_rule) { instance_double(HttpStub::Server::Stub::Match::Rule::Parameters, matches?: true) }
31
+ let(:body_rule) { double("HttpStub::Server::Stub::SomeRequestBody", matches?: true) }
32
+
33
+ let(:match_rules) { HttpStub::Server::Stub::Match::Rules.new(match_rules_payload) }
34
+
35
+ before(:example) do
36
+ allow(HttpStub::Server::Stub::Match::Rule::Uri).to receive(:new).and_return(uri_rule)
37
+ allow(HttpStub::Server::Stub::Match::Rule::Method).to receive(:new).and_return(method_rule)
38
+ allow(HttpStub::Server::Stub::Match::Rule::Headers).to receive(:new).and_return(headers_rule)
39
+ allow(HttpStub::Server::Stub::Match::Rule::Parameters).to receive(:new).and_return(parameters_rule)
40
+ allow(HttpStub::Server::Stub::Match::Rule::Body).to receive(:create).and_return(body_rule)
41
+ end
42
+
43
+ describe "::EMPTY" do
44
+
45
+ subject { HttpStub::Server::Stub::Match::Rules::EMPTY }
46
+
47
+ it "has an empty uri rule" do
48
+ expect(subject.uri.to_s).to eql("")
49
+ end
50
+
51
+ it "has an empty method rule" do
52
+ expect(subject.method.to_s).to eql("")
53
+ end
54
+
55
+ it "has an empty headers rule" do
56
+ expect(subject.headers.to_hash).to eql({})
57
+ end
58
+
59
+ it "has an empty parameters rule" do
60
+ expect(subject.parameters.to_hash).to eql({})
61
+ end
62
+
63
+ it "has an empty body rule" do
64
+ expect(subject.body.to_s).to eql("")
65
+ end
66
+
67
+ end
68
+
69
+ describe "#matches?" do
70
+
71
+ let(:request_method) { method_payload }
72
+ let(:request) { instance_double(HttpStub::Server::Request::Request, method: method_payload) }
73
+ let(:logger) { instance_double(Logger) }
74
+
75
+ subject { match_rules.matches?(request, logger) }
76
+
77
+ describe "when the request uri matches" do
78
+
79
+ before(:example) { allow(uri_rule).to receive(:matches?).with(request, logger).and_return(true) }
80
+
81
+ describe "and the request method matches" do
82
+
83
+ describe "and a headers rule is configured" do
84
+
85
+ describe "that matches" do
86
+
87
+ before(:example) { allow(headers_rule).to receive(:matches?).with(request, logger).and_return(true) }
88
+
89
+ describe "and a parameters rule is configured" do
90
+
91
+ describe "that matches" do
92
+
93
+ before(:example) do
94
+ allow(parameters_rule).to receive(:matches?).with(request, logger).and_return(true)
95
+ end
96
+
97
+ describe "and a body rule is configured" do
98
+
99
+ describe "that matches" do
100
+
101
+ before(:example) do
102
+ allow(body_rule).to receive(:matches?).with(request, logger).and_return(true)
103
+ end
104
+
105
+ it "returns true" do
106
+ expect(subject).to be(true)
107
+ end
108
+
109
+ end
110
+
111
+ end
112
+
113
+ end
114
+
115
+ end
116
+
117
+ end
118
+
119
+ end
120
+
121
+ end
122
+
123
+ end
124
+
125
+ describe "when the request uri does not match" do
126
+
127
+ before(:example) { allow(uri_rule).to receive(:matches?).with(request, logger).and_return(false) }
128
+
129
+ it "returns false" do
130
+ expect(subject).to be(false)
131
+ end
132
+
133
+ end
134
+
135
+ describe "when the request method does not match" do
136
+
137
+ before(:example) { allow(method_rule).to receive(:matches?).with(request, logger).and_return(false) }
138
+
139
+ it "returns false" do
140
+ expect(subject).to be(false)
141
+ end
142
+
143
+ end
144
+
145
+ describe "when the headers do not match" do
146
+
147
+ before(:example) { allow(headers_rule).to receive(:matches?).with(request, logger).and_return(false) }
148
+
149
+ it "returns false" do
150
+ expect(subject).to be(false)
151
+ end
152
+
153
+ end
154
+
155
+ describe "when the parameters do not match" do
156
+
157
+ before(:example) { allow(parameters_rule).to receive(:matches?).with(request, logger).and_return(false) }
158
+
159
+ it "returns false" do
160
+ expect(subject).to be(false)
161
+ end
162
+
163
+ end
164
+
165
+ describe "when the bodies do not match" do
166
+
167
+ before(:example) { allow(body_rule).to receive(:matches?).with(request, logger).and_return(false) }
168
+
169
+ it "returns false" do
170
+ expect(subject).to be(false)
171
+ end
172
+
173
+ end
174
+
175
+ end
176
+
177
+ describe "#uri" do
178
+
179
+ it "returns the uri rule for the uri provided in the request body" do
180
+ expect(match_rules.uri).to eql(uri_rule)
181
+ end
182
+
183
+ end
184
+
185
+ describe "#method" do
186
+
187
+ it "returns the method rule for the method provided in the request body" do
188
+ expect(match_rules.method).to eql(method_rule)
189
+ end
190
+
191
+ end
192
+
193
+ describe "#headers" do
194
+
195
+ it "returns the headers rule for the headers provided in the request body" do
196
+ expect(match_rules.headers).to eql(headers_rule)
197
+ end
198
+
199
+ end
200
+
201
+ describe "#parameters" do
202
+
203
+ it "returns the parameters rule for the parameters provided in the request body" do
204
+ expect(match_rules.parameters).to eql(parameters_rule)
205
+ end
206
+
207
+ end
208
+
209
+ describe "#body" do
210
+
211
+ it "returns the body rule for the body provided in the request body" do
212
+ expect(match_rules.body).to eql(body_rule)
213
+ end
214
+
215
+ end
216
+
217
+ describe "#to_hash" do
218
+
219
+ subject { match_rules.to_hash }
220
+
221
+ describe "supporting creating a JSON representation of the stub" do
222
+
223
+ it "contains the rules uri" do
224
+ expect(subject).to include(uri: match_rules.uri)
225
+ end
226
+
227
+ it "contains the rules method" do
228
+ expect(subject).to include(method: match_rules.method)
229
+ end
230
+
231
+ it "contains the rules headers" do
232
+ expect(subject).to include(headers: match_rules.headers)
233
+ end
234
+
235
+ it "contains the rules parameters" do
236
+ expect(subject).to include(parameters: match_rules.parameters)
237
+ end
238
+
239
+ it "contains the rules body" do
240
+ expect(subject).to include(body: match_rules.body)
241
+ end
242
+
243
+ end
244
+
245
+ end
246
+
247
+ end
@@ -17,19 +17,17 @@ describe HttpStub::Server::Stub::Parser do
17
17
  let(:payload) { HttpStub::StubFixture.new.server_payload }
18
18
  let(:parameters) { { "payload" => payload.to_json } }
19
19
 
20
- it "consolidates any files into the payload" do
21
- expect(HttpStub::Server::Stub::PayloadFileConsolidator).to receive(:consolidate!).with(payload, request)
20
+ it "modifies the payload" do
21
+ expect(HttpStub::Server::Stub::Payload).to receive(:modify!).with(payload, request)
22
22
 
23
23
  subject
24
24
  end
25
25
 
26
- it "returns the consolidated payload" do
27
- consolidated_payload = { consolidated_payload_key: "consolidated payload value" }
28
- allow(HttpStub::Server::Stub::PayloadFileConsolidator).to(
29
- receive(:consolidate!).and_return(consolidated_payload)
30
- )
26
+ it "returns the modified payload" do
27
+ modified_payload = { modified_payload_key: "modified payload value" }
28
+ allow(HttpStub::Server::Stub::Payload).to receive(:modify!).and_return(modified_payload)
31
29
 
32
- expect(subject).to eql(consolidated_payload)
30
+ expect(subject).to eql(modified_payload)
33
31
  end
34
32
 
35
33
  end
@@ -38,17 +36,17 @@ describe HttpStub::Server::Stub::Parser do
38
36
 
39
37
  let(:body_hash) { HttpStub::StubFixture.new.server_payload }
40
38
 
41
- it "consolidates any files into the body" do
42
- expect(HttpStub::Server::Stub::PayloadFileConsolidator).to receive(:consolidate!).with(body_hash, request)
39
+ it "modifies the body" do
40
+ expect(HttpStub::Server::Stub::Payload).to receive(:modify!).with(body_hash, request)
43
41
 
44
42
  subject
45
43
  end
46
44
 
47
- it "returns the consolidated body" do
48
- consolidated_body = { consolidated_body_key: "consolidated body value" }
49
- allow(HttpStub::Server::Stub::PayloadFileConsolidator).to receive(:consolidate!).and_return(consolidated_body)
45
+ it "returns the modified body" do
46
+ modified_body = { modified_body_key: "modified body value" }
47
+ allow(HttpStub::Server::Stub::Payload).to receive(:modify!).and_return(modified_body)
50
48
 
51
- expect(subject).to eql(consolidated_body)
49
+ expect(subject).to eql(modified_body)
52
50
  end
53
51
 
54
52
  end