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.
- checksums.yaml +4 -4
- data/lib/http_stub.rb +8 -2
- data/lib/http_stub/server/application/application.rb +16 -4
- data/lib/http_stub/server/request/request.rb +6 -1
- data/lib/http_stub/server/response.rb +5 -3
- data/lib/http_stub/server/scenario/controller.rb +2 -2
- data/lib/http_stub/server/scenario/parser.rb +1 -3
- data/lib/http_stub/server/stub/controller.rb +8 -6
- data/lib/http_stub/server/stub/empty.rb +9 -5
- data/lib/http_stub/server/stub/match/controller.rb +22 -0
- data/lib/http_stub/server/stub/match/{result.rb → match.rb} +9 -1
- data/lib/http_stub/server/stub/match/miss.rb +19 -0
- data/lib/http_stub/server/stub/match/rules.rb +33 -0
- data/lib/http_stub/server/stub/parser.rb +1 -1
- data/lib/http_stub/server/stub/payload.rb +20 -0
- data/lib/http_stub/server/stub/payload/base_uri_modifier.rb +17 -0
- data/lib/http_stub/server/stub/payload/response_body_modifier.rb +19 -0
- data/lib/http_stub/server/stub/response/base.rb +5 -1
- data/lib/http_stub/server/stub/response/file.rb +5 -0
- data/lib/http_stub/server/stub/response/text.rb +4 -0
- data/lib/http_stub/server/stub/stub.rb +8 -18
- data/lib/http_stub/server/stub/triggers.rb +1 -1
- data/lib/http_stub/server/views/_activate_scenario.haml +17 -4
- data/lib/http_stub/server/views/_stub.haml +2 -2
- data/lib/http_stub/server/views/{_match.haml → _stub_match.haml} +1 -1
- data/lib/http_stub/server/views/_stub_miss.haml +3 -0
- data/lib/http_stub/server/views/index.haml +4 -2
- data/lib/http_stub/server/views/stub_matches.haml +4 -0
- data/lib/http_stub/server/views/stub_misses.haml +4 -0
- data/lib/http_stub/version.rb +1 -1
- data/spec/acceptance/stub_match_last_spec.rb +170 -0
- data/spec/acceptance/stub_match_list_spec.rb +115 -0
- data/spec/acceptance/stub_miss_list_spec.rb +58 -0
- data/spec/lib/http_stub/server/application/application_spec.rb +57 -13
- data/spec/lib/http_stub/server/request/request_spec.rb +41 -1
- data/spec/lib/http_stub/server/response_spec.rb +18 -12
- data/spec/lib/http_stub/server/scenario/controller_spec.rb +4 -4
- data/spec/lib/http_stub/server/scenario/parser_spec.rb +30 -27
- data/spec/lib/http_stub/server/stub/controller_spec.rb +45 -26
- data/spec/lib/http_stub/server/stub/empty_spec.rb +14 -14
- data/spec/lib/http_stub/server/stub/match/controller_spec.rb +69 -0
- data/spec/lib/http_stub/server/stub/match/match_spec.rb +146 -0
- data/spec/lib/http_stub/server/stub/match/miss_spec.rb +15 -0
- data/spec/lib/http_stub/server/stub/match/rules_spec.rb +247 -0
- data/spec/lib/http_stub/server/stub/parser_spec.rb +12 -14
- data/spec/lib/http_stub/server/stub/payload/base_uri_modifier_spec.rb +23 -0
- data/spec/lib/http_stub/server/{payload_file_consolidator_spec.rb → stub/payload/response_body_modifier_spec.rb} +22 -14
- data/spec/lib/http_stub/server/stub/payload_spec.rb +33 -0
- data/spec/lib/http_stub/server/stub/response/base_spec.rb +22 -0
- data/spec/lib/http_stub/server/stub/response/file_spec.rb +29 -1
- data/spec/lib/http_stub/server/stub/response/text_spec.rb +18 -0
- data/spec/lib/http_stub/server/stub/stub_spec.rb +48 -145
- data/spec/lib/http_stub/server/stub/triggers_spec.rb +14 -0
- data/spec/spec_helper.rb +7 -3
- data/spec/support/{configurer_integration.rb → http_stub/configurer_integration.rb} +3 -2
- data/spec/support/http_stub/html_view_excluding_request_details.rb +11 -0
- data/spec/support/http_stub/html_view_including_request_details.rb +47 -0
- data/spec/support/http_stub/server/scenario/scenario_fixture.rb +1 -1
- data/spec/support/http_stub/server/stub/match/match_fixture.rb +21 -0
- data/spec/support/http_stub/server/stub/match/miss_fixture.rb +17 -0
- data/spec/support/{server_integration.rb → http_stub/server_integration.rb} +0 -0
- data/spec/support/http_stub/stub_fixture.rb +1 -0
- data/spec/support/http_stub/stub_registrator.rb +83 -0
- metadata +47 -19
- data/lib/http_stub/server/stub/payload_file_consolidator.rb +0 -18
- data/lib/http_stub/server/views/_miss.haml +0 -7
- data/lib/http_stub/server/views/match_results.haml +0 -7
- data/spec/acceptance/stub_match_spec.rb +0 -252
- data/spec/lib/http_stub/server/stub/match/result_spec.rb +0 -33
- data/spec/support/http_stub/server/stub/match/result_fixture.rb +0 -19
@@ -1,12 +1,14 @@
|
|
1
1
|
describe HttpStub::Server::Request::Request do
|
2
2
|
|
3
|
+
let(:rack_base_url) { "http://base_url:8888" }
|
3
4
|
let(:rack_path_info) { "/rack/path/info" }
|
4
5
|
let(:rack_request_method) { "some method" }
|
5
6
|
let(:rack_env) { { "some_env_name" => "some env value" } }
|
6
7
|
let(:rack_parameters) { { "some_parameter_name" => "some parameter value" } }
|
7
8
|
let(:rack_body) { "some request body" }
|
8
9
|
let(:rack_request) do
|
9
|
-
instance_double(Rack::Request,
|
10
|
+
instance_double(Rack::Request, base_url: rack_base_url,
|
11
|
+
path_info: rack_path_info,
|
10
12
|
request_method: rack_request_method,
|
11
13
|
env: rack_env,
|
12
14
|
params: rack_parameters,
|
@@ -15,6 +17,14 @@ describe HttpStub::Server::Request::Request do
|
|
15
17
|
|
16
18
|
let(:server_request) { described_class.new(rack_request) }
|
17
19
|
|
20
|
+
describe "#base_uri" do
|
21
|
+
|
22
|
+
it "is the rack base url" do
|
23
|
+
expect(server_request.base_uri).to eql(rack_base_url)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
18
28
|
describe "#uri" do
|
19
29
|
|
20
30
|
it "is the rack request path information" do
|
@@ -81,4 +91,34 @@ describe HttpStub::Server::Request::Request do
|
|
81
91
|
|
82
92
|
end
|
83
93
|
|
94
|
+
describe "#to_hash" do
|
95
|
+
|
96
|
+
subject { server_request.to_hash }
|
97
|
+
|
98
|
+
describe "supporting creating a JSON representation of the result" do
|
99
|
+
|
100
|
+
it "contains the requests uri" do
|
101
|
+
expect(subject).to include(uri: server_request.uri)
|
102
|
+
end
|
103
|
+
|
104
|
+
it "contains the requests method" do
|
105
|
+
expect(subject).to include(method: server_request.method)
|
106
|
+
end
|
107
|
+
|
108
|
+
it "contains the requests headers" do
|
109
|
+
expect(subject).to include(headers: server_request.headers)
|
110
|
+
end
|
111
|
+
|
112
|
+
it "contains the requests parameters" do
|
113
|
+
expect(subject).to include(parameters: server_request.parameters)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "contains the requests body" do
|
117
|
+
expect(subject).to include(body: server_request.body)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
84
124
|
end
|
@@ -1,42 +1,48 @@
|
|
1
1
|
describe HttpStub::Server::Response do
|
2
2
|
|
3
|
-
shared_examples_for "
|
3
|
+
shared_examples_for "an ok response" do
|
4
4
|
|
5
5
|
it "has a status of 200" do
|
6
6
|
expect(subject.status).to eql(200)
|
7
7
|
end
|
8
8
|
|
9
9
|
it "has a body containing OK to visually indicate success to those interacting via a browser" do
|
10
|
-
expect(subject.body).to
|
10
|
+
expect(subject.body).to include("OK")
|
11
11
|
end
|
12
12
|
|
13
13
|
end
|
14
14
|
|
15
|
-
describe "::
|
15
|
+
describe "::ok" do
|
16
16
|
|
17
|
-
subject { described_class.
|
17
|
+
subject { described_class.ok }
|
18
18
|
|
19
|
-
it_behaves_like "
|
19
|
+
it_behaves_like "an ok response"
|
20
20
|
|
21
|
-
context "when
|
21
|
+
context "when options are provided" do
|
22
22
|
|
23
23
|
let(:headers) { { "response_header_key" => "response header value" } }
|
24
|
+
let(:body) { "response body" }
|
25
|
+
let(:opts) { { "headers" => headers, "body" => body } }
|
24
26
|
|
25
|
-
subject { HttpStub::Server::Response::
|
27
|
+
subject { HttpStub::Server::Response::ok(opts) }
|
26
28
|
|
27
|
-
it "
|
29
|
+
it "establishes any headers provided" do
|
28
30
|
expect(subject.headers).to eql(headers)
|
29
31
|
end
|
30
32
|
|
33
|
+
it "establishes any body provided" do
|
34
|
+
expect(subject.body).to eql(body)
|
35
|
+
end
|
36
|
+
|
31
37
|
end
|
32
38
|
|
33
39
|
end
|
34
40
|
|
35
|
-
describe "::
|
41
|
+
describe "::OK" do
|
36
42
|
|
37
|
-
subject { HttpStub::Server::Response::
|
43
|
+
subject { HttpStub::Server::Response::OK }
|
38
44
|
|
39
|
-
it_behaves_like "
|
45
|
+
it_behaves_like "an ok response"
|
40
46
|
|
41
47
|
end
|
42
48
|
|
@@ -49,7 +55,7 @@ describe HttpStub::Server::Response do
|
|
49
55
|
end
|
50
56
|
|
51
57
|
it "has a body containing NOT FOUND to visually indicate the response to those interacting via a browser" do
|
52
|
-
expect(subject.body).to
|
58
|
+
expect(subject.body).to include("NOT FOUND")
|
53
59
|
end
|
54
60
|
|
55
61
|
end
|
@@ -40,8 +40,8 @@ describe HttpStub::Server::Scenario::Controller do
|
|
40
40
|
subject
|
41
41
|
end
|
42
42
|
|
43
|
-
it "returns
|
44
|
-
expect(subject).to eql(HttpStub::Server::Response::
|
43
|
+
it "returns an ok response" do
|
44
|
+
expect(subject).to eql(HttpStub::Server::Response::OK)
|
45
45
|
end
|
46
46
|
|
47
47
|
end
|
@@ -68,8 +68,8 @@ describe HttpStub::Server::Scenario::Controller do
|
|
68
68
|
subject
|
69
69
|
end
|
70
70
|
|
71
|
-
it "returns
|
72
|
-
expect(subject).to eql(HttpStub::Server::Response::
|
71
|
+
it "returns an ok response" do
|
72
|
+
expect(subject).to eql(HttpStub::Server::Response::OK)
|
73
73
|
end
|
74
74
|
|
75
75
|
end
|
@@ -4,56 +4,59 @@ describe HttpStub::Server::Scenario::Parser do
|
|
4
4
|
|
5
5
|
describe "::parse" do
|
6
6
|
|
7
|
-
let(:
|
8
|
-
let(:
|
9
|
-
let(:
|
10
|
-
|
11
|
-
|
7
|
+
let(:payload) { HttpStub::ScenarioFixture.new.server_payload }
|
8
|
+
let(:payload_parameter) { payload.to_json }
|
9
|
+
let(:parameters) { { "payload" => payload_parameter } }
|
10
|
+
let(:request) { instance_double(HttpStub::Server::Request::Request, parameters: parameters) }
|
11
|
+
|
12
|
+
let(:parsed_payload) { payload.clone }
|
12
13
|
|
13
14
|
subject { parser.parse(request) }
|
14
15
|
|
16
|
+
before(:example) { allow(JSON).to receive(:parse).and_return(parsed_payload) }
|
17
|
+
|
18
|
+
it "parses the JSON payload in the request" do
|
19
|
+
expect(JSON).to receive(:parse).with(payload_parameter)
|
20
|
+
|
21
|
+
subject
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns the modified payload" do
|
25
|
+
expect(subject).to eql(parsed_payload)
|
26
|
+
end
|
27
|
+
|
15
28
|
context "when the request contains many stubs" do
|
16
29
|
|
17
|
-
let(:payload)
|
18
|
-
let(:stub_payloads) { payload["stubs"] }
|
19
|
-
let(:parameters) { { "payload" => payload.to_json } }
|
30
|
+
let(:payload) { HttpStub::ScenarioFixture.new.with_stubs!(3).server_payload }
|
20
31
|
|
21
|
-
|
22
|
-
stub_payloads.each do |stub_payload|
|
23
|
-
expect(HttpStub::Server::Stub::PayloadFileConsolidator).to receive(:consolidate!).with(stub_payload, request)
|
24
|
-
end
|
32
|
+
let(:stub_payloads) { payload["stubs"] }
|
25
33
|
|
26
|
-
|
34
|
+
before(:example) do
|
35
|
+
stub_payloads.each { |stub_payload| allow(HttpStub::Server::Stub::Payload).to receive(:modify!) }
|
27
36
|
end
|
28
37
|
|
29
|
-
it "
|
30
|
-
stub_payloads.
|
31
|
-
|
38
|
+
it "modifies each stub payload" do
|
39
|
+
stub_payloads.each do |stub_payload|
|
40
|
+
expect(HttpStub::Server::Stub::Payload).to receive(:modify!).with(stub_payload, request)
|
32
41
|
end
|
33
42
|
|
34
|
-
|
43
|
+
subject
|
35
44
|
end
|
36
45
|
|
37
46
|
end
|
38
47
|
|
39
48
|
context "when the request contains one stub" do
|
40
49
|
|
41
|
-
let(:payload)
|
50
|
+
let(:payload) { HttpStub::ScenarioFixture.new.with_stubs!(1).server_payload }
|
51
|
+
|
42
52
|
let(:stub_payload) { payload["stubs"].first }
|
43
|
-
let(:parameters) { { "payload" => payload.to_json } }
|
44
53
|
|
45
|
-
it "
|
46
|
-
expect(HttpStub::Server::Stub::
|
54
|
+
it "modifies the stub payload" do
|
55
|
+
expect(HttpStub::Server::Stub::Payload).to receive(:modify!).with(stub_payload, request)
|
47
56
|
|
48
57
|
subject
|
49
58
|
end
|
50
59
|
|
51
|
-
it "consolidates any file in the stub payload" do
|
52
|
-
allow(HttpStub::Server::Stub::PayloadFileConsolidator).to receive(:consolidate!).with(stub_payload, anything)
|
53
|
-
|
54
|
-
expect(subject).to eql(payload)
|
55
|
-
end
|
56
|
-
|
57
60
|
end
|
58
61
|
|
59
62
|
end
|
@@ -3,14 +3,14 @@ describe HttpStub::Server::Stub::Controller do
|
|
3
3
|
let(:request) { instance_double(HttpStub::Server::Request::Request) }
|
4
4
|
let(:logger) { instance_double(Logger) }
|
5
5
|
let(:payload) { HttpStub::StubFixture.new.server_payload }
|
6
|
-
let(:response) { instance_double(HttpStub::Server::Stub::Response::Base) }
|
7
6
|
let(:stub_uri) { "/some/stub/uri" }
|
8
|
-
let(:the_stub) { instance_double(HttpStub::Server::Stub::Stub,
|
7
|
+
let(:the_stub) { instance_double(HttpStub::Server::Stub::Stub, uri: stub_uri) }
|
9
8
|
|
10
|
-
let(:stub_registry)
|
11
|
-
let(:
|
9
|
+
let(:stub_registry) { instance_double(HttpStub::Server::Stub::Registry).as_null_object }
|
10
|
+
let(:match_registry) { instance_double(HttpStub::Server::Registry).as_null_object }
|
11
|
+
let(:miss_registry) { instance_double(HttpStub::Server::Registry).as_null_object }
|
12
12
|
|
13
|
-
let(:controller) { HttpStub::Server::Stub::Controller.new(stub_registry,
|
13
|
+
let(:controller) { HttpStub::Server::Stub::Controller.new(stub_registry, match_registry, miss_registry) }
|
14
14
|
|
15
15
|
before(:example) do
|
16
16
|
allow(HttpStub::Server::Stub::Parser).to receive(:parse).and_return(payload)
|
@@ -39,15 +39,15 @@ describe HttpStub::Server::Stub::Controller do
|
|
39
39
|
subject
|
40
40
|
end
|
41
41
|
|
42
|
-
it "creates
|
43
|
-
expect(HttpStub::Server::Response).to receive(:
|
42
|
+
it "creates an ok response with a location header containing the stubs uri" do
|
43
|
+
expect(HttpStub::Server::Response).to receive(:ok).with("headers" => { "location" => stub_uri })
|
44
44
|
|
45
45
|
subject
|
46
46
|
end
|
47
47
|
|
48
|
-
it "returns the
|
48
|
+
it "returns the ok response" do
|
49
49
|
response = double("HttpStub::Server::Response")
|
50
|
-
allow(HttpStub::Server::Response).to receive(:
|
50
|
+
allow(HttpStub::Server::Response).to receive(:ok).and_return(response)
|
51
51
|
|
52
52
|
expect(subject).to eql(response)
|
53
53
|
end
|
@@ -63,29 +63,36 @@ describe HttpStub::Server::Stub::Controller do
|
|
63
63
|
before(:example) do
|
64
64
|
allow(stub_registry).to receive(:match).with(request, logger).and_return(matched_stub)
|
65
65
|
allow(the_stub).to receive(:response_for).and_return(calculated_stub_response)
|
66
|
-
allow(match_result_registry).to receive(:add)
|
67
66
|
end
|
68
67
|
|
69
68
|
describe "when a stub has been registered that matches the request" do
|
70
69
|
|
71
70
|
let(:matched_stub) { the_stub }
|
72
71
|
|
72
|
+
before(:example) { allow(match_registry).to receive(:add) }
|
73
|
+
|
73
74
|
it "calculates the stubs response based on the request" do
|
74
75
|
expect(the_stub).to receive(:response_for).with(request)
|
75
76
|
|
76
77
|
subject
|
77
78
|
end
|
78
79
|
|
79
|
-
it "
|
80
|
-
expect(HttpStub::Server::Stub::Match::
|
80
|
+
it "creates a match for the request, calculated response and stub" do
|
81
|
+
expect(HttpStub::Server::Stub::Match::Match).to receive(:new).with(request, calculated_stub_response, the_stub)
|
81
82
|
|
82
83
|
subject
|
83
84
|
end
|
84
85
|
|
85
|
-
it "adds the match
|
86
|
-
|
87
|
-
|
88
|
-
)
|
86
|
+
it "adds the match to the match registry" do
|
87
|
+
match = instance_double(HttpStub::Server::Stub::Match::Match)
|
88
|
+
allow(HttpStub::Server::Stub::Match::Match).to receive(:new).and_return(match)
|
89
|
+
expect(match_registry).to receive(:add).with(match, logger)
|
90
|
+
|
91
|
+
subject
|
92
|
+
end
|
93
|
+
|
94
|
+
it "does not add to the miss registry" do
|
95
|
+
expect(miss_registry).to_not receive(:add)
|
89
96
|
|
90
97
|
subject
|
91
98
|
end
|
@@ -100,22 +107,28 @@ describe HttpStub::Server::Stub::Controller do
|
|
100
107
|
|
101
108
|
let(:matched_stub) { nil }
|
102
109
|
|
110
|
+
before(:example) { allow(miss_registry).to receive(:add) }
|
111
|
+
|
103
112
|
it "returns a not found response" do
|
104
113
|
expect(subject).to eql(HttpStub::Server::Response::NOT_FOUND)
|
105
114
|
end
|
106
115
|
|
107
|
-
it "creates a
|
108
|
-
expect(HttpStub::Server::Stub::Match::
|
109
|
-
|
110
|
-
|
116
|
+
it "creates a miss for the request" do
|
117
|
+
expect(HttpStub::Server::Stub::Match::Miss).to receive(:new).with(request)
|
118
|
+
|
119
|
+
subject
|
120
|
+
end
|
121
|
+
|
122
|
+
it "adds the miss to the miss registry" do
|
123
|
+
miss = instance_double(HttpStub::Server::Stub::Match::Miss)
|
124
|
+
allow(HttpStub::Server::Stub::Match::Miss).to receive(:new).and_return(miss)
|
125
|
+
expect(miss_registry).to receive(:add).with(miss, logger)
|
111
126
|
|
112
127
|
subject
|
113
128
|
end
|
114
129
|
|
115
|
-
it "
|
116
|
-
expect(
|
117
|
-
receive(:add).with(an_instance_of(HttpStub::Server::Stub::Match::Result), logger)
|
118
|
-
)
|
130
|
+
it "does not add to the match registry" do
|
131
|
+
expect(match_registry).to_not receive(:add)
|
119
132
|
|
120
133
|
subject
|
121
134
|
end
|
@@ -134,8 +147,14 @@ describe HttpStub::Server::Stub::Controller do
|
|
134
147
|
subject
|
135
148
|
end
|
136
149
|
|
137
|
-
it "clears the match
|
138
|
-
expect(
|
150
|
+
it "clears the match registry" do
|
151
|
+
expect(match_registry).to receive(:clear).with(logger)
|
152
|
+
|
153
|
+
subject
|
154
|
+
end
|
155
|
+
|
156
|
+
it "clears the miss registry" do
|
157
|
+
expect(miss_registry).to receive(:clear).with(logger)
|
139
158
|
|
140
159
|
subject
|
141
160
|
end
|
@@ -2,26 +2,18 @@ describe HttpStub::Server::Stub::Empty do
|
|
2
2
|
|
3
3
|
let(:empty_stub) { HttpStub::Server::Stub::Empty::INSTANCE }
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe "##{empty_string_attribute}" do
|
8
|
-
|
9
|
-
it "is an empty string" do
|
10
|
-
expect(empty_stub.send(empty_string_attribute.to_sym)).to eql("")
|
11
|
-
end
|
5
|
+
describe "#uri" do
|
12
6
|
|
7
|
+
it "is an empty string" do
|
8
|
+
expect(empty_stub.uri).to eql("")
|
13
9
|
end
|
14
10
|
|
15
11
|
end
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
describe "##{empty_hash_attribute}" do
|
20
|
-
|
21
|
-
it "is an empty hash" do
|
22
|
-
expect(empty_stub.send(empty_hash_attribute.to_sym)).to eql({})
|
23
|
-
end
|
13
|
+
describe "#match_rules" do
|
24
14
|
|
15
|
+
it "is empty" do
|
16
|
+
expect(empty_stub.match_rules).to eql(HttpStub::Server::Stub::Match::Rules::EMPTY)
|
25
17
|
end
|
26
18
|
|
27
19
|
end
|
@@ -63,6 +55,14 @@ describe HttpStub::Server::Stub::Empty do
|
|
63
55
|
|
64
56
|
end
|
65
57
|
|
58
|
+
describe "#to_hash" do
|
59
|
+
|
60
|
+
it "returns an empty hash" do
|
61
|
+
expect(empty_stub.to_hash).to eql({})
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
66
|
describe "#to_s" do
|
67
67
|
|
68
68
|
it "returns an empty string" do
|
@@ -0,0 +1,69 @@
|
|
1
|
+
describe HttpStub::Server::Stub::Match::Controller do
|
2
|
+
|
3
|
+
let(:registry) { instance_double(HttpStub::Server::Registry) }
|
4
|
+
|
5
|
+
let(:controller) { described_class.new(registry) }
|
6
|
+
|
7
|
+
describe "#find_last" do
|
8
|
+
|
9
|
+
let(:uri) { "/some/endpoint/uri" }
|
10
|
+
let(:method) { "PATCH" }
|
11
|
+
let(:parameters) { { uri: uri, method: method } }
|
12
|
+
let(:request) { instance_double(HttpStub::Server::Request::Request, parameters: parameters) }
|
13
|
+
let(:logger) { instance_double(Logger) }
|
14
|
+
|
15
|
+
subject { controller.find_last(request, logger) }
|
16
|
+
|
17
|
+
it "finds the match in the registry with the uri requested" do
|
18
|
+
expect(registry).to receive(:find).with(hash_including(uri: uri), anything)
|
19
|
+
|
20
|
+
subject
|
21
|
+
end
|
22
|
+
|
23
|
+
it "finds the match in the registry with the HTTP method requested" do
|
24
|
+
expect(registry).to receive(:find).with(hash_including(method: method), anything)
|
25
|
+
|
26
|
+
subject
|
27
|
+
end
|
28
|
+
|
29
|
+
it "finds the match using the provided logger for diagnostics" do
|
30
|
+
expect(registry).to receive(:find).with(anything, logger)
|
31
|
+
|
32
|
+
subject
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when a match is found" do
|
36
|
+
|
37
|
+
let(:match_json) { "some match JSON" }
|
38
|
+
let(:match) { instance_double(HttpStub::Server::Stub::Match::Match, to_json: match_json) }
|
39
|
+
|
40
|
+
before(:example) { allow(registry).to receive(:find).and_return(match) }
|
41
|
+
|
42
|
+
it "creates an ok response containing the JSON representation of the match" do
|
43
|
+
expect(HttpStub::Server::Response).to receive(:ok).with("body" => match_json)
|
44
|
+
|
45
|
+
subject
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns the response" do
|
49
|
+
response = instance_double(HttpStub::Server::Stub::Response::Text)
|
50
|
+
allow(HttpStub::Server::Response).to receive(:ok).and_return(response)
|
51
|
+
|
52
|
+
expect(subject).to eql(response)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when a match is not found" do
|
58
|
+
|
59
|
+
before(:example) { allow(registry).to receive(:find).and_return(nil) }
|
60
|
+
|
61
|
+
it "returns a not found response" do
|
62
|
+
expect(subject).to eql(HttpStub::Server::Response::NOT_FOUND)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|