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.
- checksums.yaml +4 -4
- data/lib/http_stub/configurer/request/http/basic.rb +21 -0
- data/lib/http_stub/configurer/request/http/factory.rb +43 -0
- data/lib/http_stub/configurer/request/http/multipart.rb +33 -0
- data/lib/http_stub/configurer/request/stub.rb +24 -8
- data/lib/http_stub/configurer/request/stub_activator.rb +12 -8
- data/lib/http_stub/configurer/request/{stub_activator_payload_builder.rb → stub_activator_builder.rb} +4 -4
- data/lib/http_stub/configurer/request/stub_builder.rb +34 -0
- data/lib/http_stub/configurer/request/stub_response.rb +40 -0
- data/lib/http_stub/configurer/request/stub_response_file.rb +20 -0
- data/lib/http_stub/configurer/server/command.rb +5 -1
- data/lib/http_stub/configurer/server/command_processor.rb +1 -1
- data/lib/http_stub/configurer/server/dsl.rb +4 -4
- data/lib/http_stub/configurer/server/facade.rb +25 -11
- data/lib/http_stub/extensions/core/hash.rb +26 -0
- data/lib/http_stub/rake/server_daemon_tasks.rb +1 -1
- data/lib/http_stub/rake/server_tasks.rb +1 -1
- data/lib/http_stub/rake/task_generators.rb +3 -3
- data/lib/http_stub/server/application.rb +117 -0
- data/lib/http_stub/server/daemon.rb +39 -0
- data/lib/http_stub/{models → server}/exact_value_matcher.rb +1 -1
- data/lib/http_stub/{models → server}/hash_with_string_value_matchers.rb +2 -2
- data/lib/http_stub/{models → server}/headers.rb +1 -1
- data/lib/http_stub/{models → server}/omitted_value_matcher.rb +1 -1
- data/lib/http_stub/{models → server}/regexp_value_matcher.rb +1 -1
- data/lib/http_stub/{models → server}/registry.rb +10 -3
- data/lib/http_stub/{models → server}/request_header_parser.rb +1 -1
- data/lib/http_stub/server/response.rb +13 -0
- data/lib/http_stub/server/response_pipeline.rb +18 -0
- data/lib/http_stub/{models → server}/string_value_matcher.rb +4 -4
- data/lib/http_stub/server/stub.rb +37 -0
- data/lib/http_stub/{models → server}/stub_activator.rb +10 -2
- data/lib/http_stub/{controllers → server}/stub_activator_controller.rb +5 -5
- data/lib/http_stub/{controllers → server}/stub_controller.rb +4 -4
- data/lib/http_stub/server/stub_factory.rb +30 -0
- data/lib/http_stub/{models → server}/stub_headers.rb +4 -4
- data/lib/http_stub/{models → server}/stub_parameters.rb +2 -2
- data/lib/http_stub/{models → server}/stub_registry.rb +4 -4
- data/lib/http_stub/server/stub_response/base.rb +62 -0
- data/lib/http_stub/server/stub_response/file.rb +48 -0
- data/lib/http_stub/server/stub_response/text.rb +17 -0
- data/lib/http_stub/server/stub_response.rb +14 -0
- data/lib/http_stub/{models → server}/stub_triggers.rb +6 -2
- data/lib/http_stub/{models → server}/stub_uri.rb +2 -2
- data/lib/http_stub/{views → server/views}/_stub.haml +0 -0
- data/lib/http_stub/{views → server/views}/application.sass +0 -0
- data/lib/http_stub/{views → server/views}/layout.haml +0 -0
- data/lib/http_stub/{views → server/views}/stub_activators.haml +0 -0
- data/lib/http_stub/{views → server/views}/stubs.haml +0 -0
- data/lib/http_stub/version.rb +1 -1
- data/lib/http_stub.rb +41 -24
- data/spec/lib/http_stub/configurer/deprecated_dsl_spec.rb +2 -2
- data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +15 -0
- data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +148 -0
- data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +74 -0
- data/spec/lib/http_stub/configurer/request/stub_activator_builder_spec.rb +119 -0
- data/spec/lib/http_stub/configurer/request/stub_activator_spec.rb +24 -22
- data/spec/lib/http_stub/configurer/request/stub_builder_spec.rb +154 -0
- data/spec/lib/http_stub/configurer/request/stub_response_spec.rb +136 -0
- data/spec/lib/http_stub/configurer/request/stub_spec.rb +238 -17
- data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +7 -3
- data/spec/lib/http_stub/configurer/server/command_spec.rb +7 -6
- data/spec/lib/http_stub/configurer/server/dsl_spec.rb +58 -94
- data/spec/lib/http_stub/configurer/server/facade_spec.rb +56 -41
- data/spec/lib/http_stub/configurer_integration_spec.rb +180 -81
- data/spec/lib/http_stub/{hash_extensions_spec.rb → extensions/core/hash_spec.rb} +1 -1
- data/spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb +1 -1
- data/spec/lib/http_stub/{server_integration_spec.rb → server/application_integration_spec.rb} +1 -1
- data/spec/lib/http_stub/server/application_spec.rb +205 -0
- data/spec/lib/http_stub/server/daemon_integration_spec.rb +7 -0
- data/spec/lib/http_stub/{server_daemon_spec.rb → server/daemon_spec.rb} +4 -4
- data/spec/lib/http_stub/{models → server}/exact_value_matcher_spec.rb +2 -2
- data/spec/lib/http_stub/{models → server}/hash_with_string_value_matchers_spec.rb +5 -5
- data/spec/lib/http_stub/{models → server}/headers_spec.rb +2 -2
- data/spec/lib/http_stub/{models → server}/omitted_value_matcher_spec.rb +2 -2
- data/spec/lib/http_stub/{models → server}/regexp_value_matcher_spec.rb +2 -2
- data/spec/lib/http_stub/{models → server}/registry_spec.rb +52 -55
- data/spec/lib/http_stub/{models → server}/request_header_parser_spec.rb +4 -4
- data/spec/lib/http_stub/server/response_pipeline_spec.rb +29 -0
- data/spec/lib/http_stub/server/response_spec.rb +41 -0
- data/spec/lib/http_stub/{models → server}/string_value_matcher_spec.rb +11 -11
- data/spec/lib/http_stub/server/stub_activator_controller_spec.rb +85 -0
- data/spec/lib/http_stub/server/stub_activator_spec.rb +124 -0
- data/spec/lib/http_stub/server/stub_controller_spec.rb +74 -0
- data/spec/lib/http_stub/server/stub_factory_spec.rb +117 -0
- data/spec/lib/http_stub/{models → server}/stub_headers_spec.rb +9 -9
- data/spec/lib/http_stub/{models → server}/stub_parameters_spec.rb +6 -6
- data/spec/lib/http_stub/{models → server}/stub_registry_integration_spec.rb +3 -3
- data/spec/lib/http_stub/{models → server}/stub_registry_spec.rb +15 -35
- data/spec/lib/http_stub/server/stub_response/base_spec.rb +225 -0
- data/spec/lib/http_stub/server/stub_response/file_spec.rb +140 -0
- data/spec/lib/http_stub/server/stub_response/text_spec.rb +103 -0
- data/spec/lib/http_stub/server/stub_response_spec.rb +49 -0
- data/spec/lib/http_stub/{models → server}/stub_spec.rb +34 -18
- data/spec/lib/http_stub/{models → server}/stub_triggers_spec.rb +26 -16
- data/spec/lib/http_stub/{models → server}/stub_uri_spec.rb +5 -5
- data/spec/resources/sample.pdf +0 -0
- data/spec/resources/sample.txt +1 -0
- data/spec/spec_helper.rb +13 -4
- data/spec/support/stub_fixture.rb +106 -0
- metadata +148 -102
- data/lib/http_stub/configurer/request/stub_payload_builder.rb +0 -46
- data/lib/http_stub/hash_extensions.rb +0 -22
- data/lib/http_stub/models/request_pipeline.rb +0 -13
- data/lib/http_stub/models/response.rb +0 -43
- data/lib/http_stub/models/stub.rb +0 -35
- data/lib/http_stub/server.rb +0 -114
- data/lib/http_stub/server_daemon.rb +0 -36
- data/spec/lib/http_stub/configurer/request/stub_activator_payload_builder_spec.rb +0 -103
- data/spec/lib/http_stub/configurer/request/stub_payload_builder_spec.rb +0 -304
- data/spec/lib/http_stub/controllers/stub_activator_controller_spec.rb +0 -94
- data/spec/lib/http_stub/controllers/stub_controller_spec.rb +0 -83
- data/spec/lib/http_stub/models/request_pipeline_spec.rb +0 -17
- data/spec/lib/http_stub/models/response_spec.rb +0 -206
- data/spec/lib/http_stub/models/stub_activator_spec.rb +0 -76
- data/spec/lib/http_stub/server_daemon_integration_spec.rb +0 -7
- data/spec/lib/http_stub/server_spec.rb +0 -234
- data/spec/support/http_stub/configurer/request/stub_payload_builder_shared_context.rb +0 -27
@@ -0,0 +1,148 @@
|
|
1
|
+
describe HttpStub::Configurer::Request::Http::Factory do
|
2
|
+
|
3
|
+
describe "::stub" do
|
4
|
+
|
5
|
+
let(:model) { instance_double(HttpStub::Configurer::Request::Stub) }
|
6
|
+
let(:multipart_request) { instance_double(HttpStub::Configurer::Request::Http::Multipart) }
|
7
|
+
|
8
|
+
subject { HttpStub::Configurer::Request::Http::Factory.stub(model) }
|
9
|
+
|
10
|
+
before(:example) do
|
11
|
+
allow(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).and_return(multipart_request)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "creates a multipart request for the stubs endpoint with the provided model" do
|
15
|
+
expect(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).with("/stubs", model)
|
16
|
+
|
17
|
+
subject
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the created request" do
|
21
|
+
expect(subject).to eql(multipart_request)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "::stub_activator" do
|
27
|
+
|
28
|
+
let(:model) { instance_double(HttpStub::Configurer::Request::StubActivator) }
|
29
|
+
let(:multipart_request) { instance_double(HttpStub::Configurer::Request::Http::Multipart) }
|
30
|
+
|
31
|
+
subject { HttpStub::Configurer::Request::Http::Factory.stub_activator(model) }
|
32
|
+
|
33
|
+
before(:example) do
|
34
|
+
allow(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).and_return(multipart_request)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "creates a multipart request for the stub activators endpoint with the provided model" do
|
38
|
+
expect(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).with("/stubs/activators", model)
|
39
|
+
|
40
|
+
subject
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns the created request" do
|
44
|
+
expect(subject).to eql(multipart_request)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "::get" do
|
50
|
+
|
51
|
+
let(:path) { "some/get/path" }
|
52
|
+
let(:get_request) { instance_double(Net::HTTP::Get) }
|
53
|
+
let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
|
54
|
+
|
55
|
+
subject { HttpStub::Configurer::Request::Http::Factory.get(path) }
|
56
|
+
|
57
|
+
before(:example) do
|
58
|
+
allow(Net::HTTP::Get).to receive(:new).and_return(get_request)
|
59
|
+
allow(HttpStub::Configurer::Request::Http::Basic).to receive(:new).and_return(basic_request)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "creates a GET request with the provided path" do
|
63
|
+
expect(Net::HTTP::Get).to receive(:new).with(path)
|
64
|
+
|
65
|
+
subject
|
66
|
+
end
|
67
|
+
|
68
|
+
it "creates a basic request wrapping the GET request" do
|
69
|
+
expect(HttpStub::Configurer::Request::Http::Basic).to receive(:new).with(get_request)
|
70
|
+
|
71
|
+
subject
|
72
|
+
end
|
73
|
+
|
74
|
+
it "returns the created basic request" do
|
75
|
+
expect(subject).to eql(basic_request)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "::post" do
|
81
|
+
|
82
|
+
let(:path) { "some/post/path" }
|
83
|
+
let(:post_request) { instance_double(Net::HTTP::Post).as_null_object }
|
84
|
+
let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
|
85
|
+
|
86
|
+
subject { HttpStub::Configurer::Request::Http::Factory.post(path) }
|
87
|
+
|
88
|
+
before(:example) do
|
89
|
+
allow(Net::HTTP::Post).to receive(:new).and_return(post_request)
|
90
|
+
allow(HttpStub::Configurer::Request::Http::Basic).to receive(:new).and_return(basic_request)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "creates a POST request with the provided path" do
|
94
|
+
expect(Net::HTTP::Post).to receive(:new).with(path)
|
95
|
+
|
96
|
+
subject
|
97
|
+
end
|
98
|
+
|
99
|
+
it "establishes an empty body in the POST request" do
|
100
|
+
expect(post_request).to receive(:body=).with("")
|
101
|
+
|
102
|
+
subject
|
103
|
+
end
|
104
|
+
|
105
|
+
it "creates a basic request wrapping the POST request" do
|
106
|
+
expect(HttpStub::Configurer::Request::Http::Basic).to receive(:new).with(post_request)
|
107
|
+
|
108
|
+
subject
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns the created basic request" do
|
112
|
+
expect(subject).to eql(basic_request)
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "::delete" do
|
118
|
+
|
119
|
+
let(:path) { "some/get/path" }
|
120
|
+
let(:delete_request) { instance_double(Net::HTTP::Delete) }
|
121
|
+
let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
|
122
|
+
|
123
|
+
subject { HttpStub::Configurer::Request::Http::Factory.delete(path) }
|
124
|
+
|
125
|
+
before(:example) do
|
126
|
+
allow(Net::HTTP::Delete).to receive(:new).and_return(delete_request)
|
127
|
+
allow(HttpStub::Configurer::Request::Http::Basic).to receive(:new).and_return(basic_request)
|
128
|
+
end
|
129
|
+
|
130
|
+
it "creates a DELETE request with the provided path" do
|
131
|
+
expect(Net::HTTP::Delete).to receive(:new).with(path)
|
132
|
+
|
133
|
+
subject
|
134
|
+
end
|
135
|
+
|
136
|
+
it "creates a basic request wrapping the DELETE request" do
|
137
|
+
expect(HttpStub::Configurer::Request::Http::Basic).to receive(:new).with(delete_request)
|
138
|
+
|
139
|
+
subject
|
140
|
+
end
|
141
|
+
|
142
|
+
it "returns the created basic request" do
|
143
|
+
expect(subject).to eql(basic_request)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
describe HttpStub::Configurer::Request::Http::Multipart do
|
2
|
+
|
3
|
+
let(:path) { "/a/request/path" }
|
4
|
+
let(:payload) { { key: "value" } }
|
5
|
+
let(:response_files) { [] }
|
6
|
+
let(:model) { instance_double(HttpStub::Configurer::Request::Stub, payload: payload, response_files: response_files) }
|
7
|
+
let(:multipart_request) { HttpStub::Configurer::Request::Http::Multipart.new(path, model) }
|
8
|
+
|
9
|
+
describe "#to_http_request" do
|
10
|
+
|
11
|
+
subject { multipart_request.to_http_request }
|
12
|
+
|
13
|
+
it "creates a HTTP multipart request" do
|
14
|
+
expect(Net::HTTP::Post::Multipart).to receive(:new)
|
15
|
+
|
16
|
+
subject
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns the created HTTP multipart request" do
|
20
|
+
http_multipart_request = instance_double(Net::HTTP::Post::Multipart)
|
21
|
+
allow(Net::HTTP::Post::Multipart).to receive(:new).and_return(http_multipart_request)
|
22
|
+
|
23
|
+
expect(subject).to eql(http_multipart_request)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "creates a HTTP request with the provided path" do
|
27
|
+
expect(Net::HTTP::Post::Multipart).to receive(:new).with(path, anything)
|
28
|
+
|
29
|
+
subject
|
30
|
+
end
|
31
|
+
|
32
|
+
it "creates a HTTP request with a payload parameter containing the JSON representation of the payload" do
|
33
|
+
expect(Net::HTTP::Post::Multipart).to receive(:new).with(anything, hash_including(payload: payload.to_json))
|
34
|
+
|
35
|
+
subject
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when the payload contains response files" do
|
39
|
+
|
40
|
+
let(:response_files) do
|
41
|
+
(1..3).map do |i|
|
42
|
+
instance_double(HttpStub::Configurer::Request::StubResponseFile,
|
43
|
+
id: "id#{i}", path: "file/path/#{i}", type: "file-type-#{i}", name: "file_name_#{i}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "creates a HTTP request with an upload parameter for each file keyed on the file ID" do
|
48
|
+
expected_upload_parameters = response_files.reduce({}) do |result, response_file|
|
49
|
+
upload_file = instance_double(UploadIO)
|
50
|
+
expect(UploadIO).to(
|
51
|
+
receive(:new).with(response_file.path, response_file.type, response_file.name).and_return(upload_file)
|
52
|
+
)
|
53
|
+
result.tap { |hash| hash["response_file_#{response_file.id}"] = upload_file }
|
54
|
+
end
|
55
|
+
expect(Net::HTTP::Post::Multipart).to receive(:new).with(anything, hash_including(expected_upload_parameters))
|
56
|
+
|
57
|
+
subject
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when the payload contains no response files" do
|
63
|
+
|
64
|
+
it "creates a HTTP request with no upload parameters" do
|
65
|
+
expect(Net::HTTP::Post::Multipart).to receive(:new).with(anything, payload: payload.to_json)
|
66
|
+
|
67
|
+
subject
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
describe HttpStub::Configurer::Request::StubActivatorBuilder do
|
2
|
+
|
3
|
+
let(:stub_fixture) { HttpStub::StubFixture.new }
|
4
|
+
|
5
|
+
let(:response_defaults) { {} }
|
6
|
+
let(:stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
7
|
+
let(:stub_builder) { instance_double(HttpStub::Configurer::Request::StubBuilder, build: stub) }
|
8
|
+
|
9
|
+
let(:builder) { HttpStub::Configurer::Request::StubActivatorBuilder.new(response_defaults) }
|
10
|
+
|
11
|
+
before(:example) { allow(HttpStub::Configurer::Request::StubBuilder).to receive(:new).and_return(stub_builder) }
|
12
|
+
|
13
|
+
describe "constructor" do
|
14
|
+
|
15
|
+
subject { builder }
|
16
|
+
|
17
|
+
it "creates a stub builder with the provided response defaults" do
|
18
|
+
expect(HttpStub::Configurer::Request::StubBuilder).to receive(:new).with(response_defaults)
|
19
|
+
|
20
|
+
subject
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "#match_requests" do
|
26
|
+
|
27
|
+
let(:request_payload) { stub_fixture.request.configurer_payload }
|
28
|
+
|
29
|
+
it "delegates to a stub builder" do
|
30
|
+
expect(stub_builder).to receive(:match_requests).with(stub_fixture.request.uri, request_payload)
|
31
|
+
|
32
|
+
builder.match_requests(stub_fixture.request.uri, request_payload)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#respond_with" do
|
38
|
+
|
39
|
+
let(:response_payload) { stub_fixture.response.configurer_payload }
|
40
|
+
|
41
|
+
it "delegates to a stub builder" do
|
42
|
+
expect(stub_builder).to receive(:respond_with).with(response_payload)
|
43
|
+
|
44
|
+
builder.respond_with(response_payload)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#trigger" do
|
50
|
+
|
51
|
+
context "when one triggered stub is provided" do
|
52
|
+
|
53
|
+
let(:trigger_builder) { instance_double(HttpStub::Configurer::Request::StubBuilder) }
|
54
|
+
|
55
|
+
it "delegates to a stub builder" do
|
56
|
+
expect(stub_builder).to receive(:trigger).with(trigger_builder)
|
57
|
+
|
58
|
+
builder.trigger(trigger_builder)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when many triggered stubs are provided" do
|
64
|
+
|
65
|
+
let(:trigger_builders) { (1..3).map { instance_double(HttpStub::Configurer::Request::StubBuilder) } }
|
66
|
+
|
67
|
+
it "delegates to a stub builder" do
|
68
|
+
expect(stub_builder).to receive(:trigger).with(trigger_builders)
|
69
|
+
|
70
|
+
builder.trigger(trigger_builders)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#build" do
|
78
|
+
|
79
|
+
let(:stub_activator) { instance_double(HttpStub::Configurer::Request::StubActivator) }
|
80
|
+
|
81
|
+
subject { builder.build }
|
82
|
+
|
83
|
+
before(:example) { allow(HttpStub::Configurer::Request::StubActivator).to receive(:new).and_return(stub_activator) }
|
84
|
+
|
85
|
+
context "when a path on which the activator is activated is established" do
|
86
|
+
|
87
|
+
let(:activation_uri) { "http://some/activation/uri" }
|
88
|
+
|
89
|
+
before(:example) { builder.on(activation_uri) }
|
90
|
+
|
91
|
+
it "creates a stub activator that includes the activation uri" do
|
92
|
+
expect(HttpStub::Configurer::Request::StubActivator).to(
|
93
|
+
receive(:new).with(hash_including(activation_uri: activation_uri))
|
94
|
+
)
|
95
|
+
|
96
|
+
subject
|
97
|
+
end
|
98
|
+
|
99
|
+
it "builds the stub" do
|
100
|
+
expect(stub_builder).to receive(:build)
|
101
|
+
|
102
|
+
subject
|
103
|
+
end
|
104
|
+
|
105
|
+
it "creates a stub activator that includes the built stub" do
|
106
|
+
expect(HttpStub::Configurer::Request::StubActivator).to receive(:new).with(hash_including(stub: stub))
|
107
|
+
|
108
|
+
subject
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns the created stub activator" do
|
112
|
+
expect(subject).to eql(stub_activator)
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -1,41 +1,43 @@
|
|
1
1
|
describe HttpStub::Configurer::Request::StubActivator do
|
2
2
|
|
3
|
-
|
3
|
+
let(:activation_uri) { "some/activation/uri" }
|
4
|
+
let(:stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
4
5
|
|
5
|
-
|
6
|
+
let(:stub_activator) { HttpStub::Configurer::Request::StubActivator.new(activation_uri: activation_uri, stub: stub) }
|
6
7
|
|
7
|
-
|
8
|
+
describe "#payload" do
|
8
9
|
|
9
|
-
|
10
|
+
let(:stub_payload) { { stub_payload_key: "stub payload value " } }
|
10
11
|
|
11
|
-
|
12
|
-
expect(request.method).to eql("POST")
|
13
|
-
end
|
12
|
+
subject { stub_activator.payload }
|
14
13
|
|
15
|
-
|
16
|
-
expect(request.path).to eql("/stubs/activators")
|
17
|
-
end
|
14
|
+
before(:example) { allow(stub).to receive(:payload).and_return(stub_payload) }
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
it "sets the body to the JSON representation of the provided payload" do
|
24
|
-
expect(request.body).to eql(payload.to_json)
|
25
|
-
end
|
16
|
+
it "returns a hash containing the activation uri" do
|
17
|
+
expect(subject).to include(activation_uri: activation_uri)
|
18
|
+
end
|
26
19
|
|
20
|
+
it "returns a hash containing the stub payload" do
|
21
|
+
expect(subject).to include(stub_payload)
|
27
22
|
end
|
28
23
|
|
29
24
|
end
|
30
25
|
|
31
|
-
describe "#
|
26
|
+
describe "#response_files" do
|
27
|
+
|
28
|
+
it "delegates to the stub" do
|
29
|
+
stub_response_files = (1..3).each { instance_double(HttpStub::Configurer::Request::StubResponseFile) }
|
30
|
+
allow(stub).to receive(:response_files).and_return(stub_response_files)
|
32
31
|
|
33
|
-
|
32
|
+
expect(stub_activator.response_files).to eql(stub_response_files)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
34
36
|
|
35
|
-
|
37
|
+
describe "#to_s" do
|
36
38
|
|
37
|
-
it "
|
38
|
-
expect(
|
39
|
+
it "returns the activation uri" do
|
40
|
+
expect(stub_activator.to_s).to eql(activation_uri)
|
39
41
|
end
|
40
42
|
|
41
43
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
describe HttpStub::Configurer::Request::StubBuilder do
|
2
|
+
|
3
|
+
let(:response_defaults) { {} }
|
4
|
+
|
5
|
+
let(:builder) { HttpStub::Configurer::Request::StubBuilder.new(response_defaults) }
|
6
|
+
|
7
|
+
shared_context "triggers one stub" do
|
8
|
+
|
9
|
+
let(:trigger_stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
10
|
+
let(:trigger_builder) do
|
11
|
+
instance_double(HttpStub::Configurer::Request::StubBuilder, build: trigger_stub)
|
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_stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
|
21
|
+
let(:trigger_builders) do
|
22
|
+
trigger_stubs.map { |stub| instance_double(HttpStub::Configurer::Request::StubBuilder, build: stub) }
|
23
|
+
end
|
24
|
+
|
25
|
+
before(:example) { builder.trigger(trigger_builders) }
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#respond_with" do
|
30
|
+
|
31
|
+
it "does not modify any provided response defaults" do
|
32
|
+
original_response_defaults = response_defaults.clone
|
33
|
+
|
34
|
+
builder.respond_with(status: 201)
|
35
|
+
|
36
|
+
expect(response_defaults).to eql(original_response_defaults)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "#build" do
|
42
|
+
|
43
|
+
let(:fixture) { HttpStub::StubFixture.new }
|
44
|
+
let(:stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
45
|
+
|
46
|
+
subject do
|
47
|
+
builder.match_requests(fixture.request.uri, fixture.request.symbolized)
|
48
|
+
builder.respond_with(fixture.response.symbolized)
|
49
|
+
|
50
|
+
builder.build
|
51
|
+
end
|
52
|
+
|
53
|
+
before(:example) { allow(HttpStub::Configurer::Request::Stub).to receive(:new).and_return(stub) }
|
54
|
+
|
55
|
+
context "when provided a request match and response data" do
|
56
|
+
|
57
|
+
it "creates a stub payload with request options that include the uri and the provided request options" do
|
58
|
+
expect_stub_to_be_created_with(request: { uri: fixture.request.uri }.merge(fixture.request.symbolized))
|
59
|
+
|
60
|
+
subject
|
61
|
+
end
|
62
|
+
|
63
|
+
it "creates a stub payload with response arguments" do
|
64
|
+
expect_stub_to_be_created_with(response: fixture.response.symbolized)
|
65
|
+
|
66
|
+
subject
|
67
|
+
end
|
68
|
+
|
69
|
+
context "when response default options are established" do
|
70
|
+
|
71
|
+
let(:response_defaults) { { some_options: "default value" } }
|
72
|
+
|
73
|
+
it "creates a stub payload with response arguments that includes the defaults" do
|
74
|
+
expect_stub_to_be_created_with(response: fixture.response.symbolized.merge(response_defaults))
|
75
|
+
|
76
|
+
subject
|
77
|
+
end
|
78
|
+
|
79
|
+
context "and response options provided match the defaults" do
|
80
|
+
|
81
|
+
let(:response_defaults) do
|
82
|
+
{
|
83
|
+
status: 203,
|
84
|
+
headers: { "header-name-1" => "value 1", "header-name-2" => "value 2" },
|
85
|
+
body: "some body",
|
86
|
+
delay_in_seconds: 8
|
87
|
+
}
|
88
|
+
end
|
89
|
+
let(:response_overrides) do
|
90
|
+
{
|
91
|
+
status: 302,
|
92
|
+
headers: { "header-name-2" => "updated value 2", "header-name-3" => "value 3" },
|
93
|
+
body: "another body"
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
before(:example) { fixture.response = response_overrides }
|
98
|
+
|
99
|
+
it "overriddes the defaults with the provided options" do
|
100
|
+
expect_stub_to_be_created_with(
|
101
|
+
response: {
|
102
|
+
status: 302,
|
103
|
+
headers: { "header-name-1" => "value 1",
|
104
|
+
"header-name-2" => "updated value 2",
|
105
|
+
"header-name-3" => "value 3" },
|
106
|
+
body: "another body",
|
107
|
+
delay_in_seconds: 8
|
108
|
+
}
|
109
|
+
)
|
110
|
+
|
111
|
+
subject
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
context "when a trigger is added" do
|
119
|
+
|
120
|
+
include_context "triggers one stub"
|
121
|
+
|
122
|
+
it "creates a stub payload with the provided trigger builder" do
|
123
|
+
expect_stub_to_be_created_with(triggers: [ trigger_builder ])
|
124
|
+
|
125
|
+
subject
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
context "when many triggers are added" do
|
131
|
+
|
132
|
+
include_context "triggers many stubs"
|
133
|
+
|
134
|
+
it "creates a stub payload with the provided trigger builders" do
|
135
|
+
expect_stub_to_be_created_with(triggers: trigger_builders)
|
136
|
+
|
137
|
+
subject
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
it "returns the created stub" do
|
143
|
+
expect(subject).to eql(stub)
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
def expect_stub_to_be_created_with(args)
|
149
|
+
expect(HttpStub::Configurer::Request::Stub).to receive(:new).with(hash_including(args))
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
describe HttpStub::Configurer::Request::StubResponse do
|
2
|
+
|
3
|
+
let(:stub_fixture) { HttpStub::StubFixture.new }
|
4
|
+
let(:fixture) { stub_fixture.response }
|
5
|
+
|
6
|
+
let(:stub_response) { HttpStub::Configurer::Request::StubResponse.new(stub_fixture.id, fixture.symbolized) }
|
7
|
+
|
8
|
+
describe "#payload" do
|
9
|
+
|
10
|
+
subject { stub_response.payload }
|
11
|
+
|
12
|
+
context "when a status response argument is provided" do
|
13
|
+
|
14
|
+
it "has a response entry for the argument" do
|
15
|
+
expect(subject).to include(status: fixture.status)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
context "when no status response argument is provided" do
|
21
|
+
|
22
|
+
before(:example) { fixture.status = nil }
|
23
|
+
|
24
|
+
it "has a response entry with an empty status code" do
|
25
|
+
expect(subject).to include(status: "")
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when response headers are provided" do
|
31
|
+
|
32
|
+
it "has a headers response entry containing the the provided headers" do
|
33
|
+
expect(subject).to include(headers: fixture.headers)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when response headers are omitted" do
|
39
|
+
|
40
|
+
before(:example) { fixture.headers = nil }
|
41
|
+
|
42
|
+
it "has a headers response entry containing an empty hash" do
|
43
|
+
expect(subject).to include(headers: {})
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
it "has an entry for the response body argument" do
|
49
|
+
expect(subject).to include(body: fixture.body)
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when a delay option is provided" do
|
53
|
+
|
54
|
+
it "has a response entry for the argument" do
|
55
|
+
expect(subject).to include(delay_in_seconds: fixture.delay_in_seconds)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when a delay option is omitted" do
|
61
|
+
|
62
|
+
before(:example) { fixture.delay_in_seconds = nil }
|
63
|
+
|
64
|
+
it "has a response entry with an empty delay" do
|
65
|
+
expect(subject).to include(delay_in_seconds: "")
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "#file" do
|
73
|
+
|
74
|
+
subject { stub_response.file }
|
75
|
+
|
76
|
+
context "when the body contains a file hash" do
|
77
|
+
|
78
|
+
let(:content_type) { "some-content-type" }
|
79
|
+
let(:file_path) { "some/file/path" }
|
80
|
+
let(:file_name) { "some_file.name" }
|
81
|
+
|
82
|
+
before(:example) do
|
83
|
+
fixture.headers = { "content-type" => content_type }
|
84
|
+
fixture.body = { file: { path: file_path, name: file_name } }
|
85
|
+
end
|
86
|
+
|
87
|
+
it "creates a response file containing the stub id" do
|
88
|
+
expect_response_file_to_be_created_with(id: stub_fixture.id)
|
89
|
+
|
90
|
+
subject
|
91
|
+
end
|
92
|
+
|
93
|
+
it "creates a response file containing the provided file path" do
|
94
|
+
expect_response_file_to_be_created_with(path: file_path)
|
95
|
+
|
96
|
+
subject
|
97
|
+
end
|
98
|
+
|
99
|
+
it "creates a response file containing the provided file name" do
|
100
|
+
expect_response_file_to_be_created_with(name: file_name)
|
101
|
+
|
102
|
+
subject
|
103
|
+
end
|
104
|
+
|
105
|
+
it "creates a response file whose type is the content-type response header" do
|
106
|
+
expect_response_file_to_be_created_with(type: content_type)
|
107
|
+
|
108
|
+
subject
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns the created response file" do
|
112
|
+
response_file = instance_double(HttpStub::Configurer::Request::StubResponseFile)
|
113
|
+
allow(HttpStub::Configurer::Request::StubResponseFile).to receive(:new).and_return(response_file)
|
114
|
+
|
115
|
+
expect(subject).to eql(response_file)
|
116
|
+
end
|
117
|
+
|
118
|
+
def expect_response_file_to_be_created_with(hash)
|
119
|
+
expect(HttpStub::Configurer::Request::StubResponseFile).to receive(:new).with(hash_including(hash))
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
context "when the body contains text" do
|
125
|
+
|
126
|
+
before(:example) { fixture.body = "some text" }
|
127
|
+
|
128
|
+
it "returns nil" do
|
129
|
+
expect(subject).to be(nil)
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|