http_stub 0.14.2 → 0.15.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 (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
@@ -0,0 +1,205 @@
1
+ describe HttpStub::Server::Application do
2
+ include Rack::Test::Methods
3
+
4
+ let(:response) { last_response }
5
+ let(:response_body) { response.body.to_s }
6
+
7
+ let(:stub_registry) { instance_double(HttpStub::Server::StubRegistry).as_null_object }
8
+ let(:stub_activator_registry) { instance_double(HttpStub::Server::Registry).as_null_object }
9
+
10
+ let(:stub_controller) { instance_double(HttpStub::Server::StubController).as_null_object }
11
+ let(:stub_activator_controller) { instance_double(HttpStub::Server::StubActivatorController).as_null_object }
12
+
13
+ let(:response_pipeline) { instance_double(HttpStub::Server::ResponsePipeline, process: nil) }
14
+
15
+ let(:app) { HttpStub::Server::Application.new! }
16
+
17
+ before(:example) do
18
+ allow(HttpStub::Server::StubRegistry).to receive(:new).and_return(stub_registry)
19
+ allow(HttpStub::Server::Registry).to receive(:new).with("stub_activator").and_return(stub_activator_registry)
20
+ allow(HttpStub::Server::StubController).to receive(:new).and_return(stub_controller)
21
+ allow(HttpStub::Server::StubActivatorController).to receive(:new).and_return(stub_activator_controller)
22
+ allow(HttpStub::Server::ResponsePipeline).to receive(:new).and_return(response_pipeline)
23
+ end
24
+
25
+ context "when a stub insertion request is received" do
26
+
27
+ let(:stub_controller_response) { instance_double(HttpStub::Server::StubResponse::Base) }
28
+
29
+ subject do
30
+ post "/stubs", { uri: "/a_path", method: "a method", response: { status: 200, body: "Foo" } }.to_json
31
+ end
32
+
33
+ before(:example) { allow(stub_controller).to receive(:register).and_return(stub_controller_response) }
34
+
35
+ it "registers the inserted stub via the controller" do
36
+ expect(stub_controller).to receive(:register).and_return(stub_controller_response)
37
+
38
+ subject
39
+ end
40
+
41
+ it "processes the stub controllers response via the response pipeline" do
42
+ expect(response_pipeline).to receive(:process).with(stub_controller_response)
43
+
44
+ subject
45
+ end
46
+
47
+ end
48
+
49
+ context "when a request to commit the stubs to memory is received" do
50
+
51
+ subject { post "/stubs/memory" }
52
+
53
+ it "remembers the stubs in the stub registry" do
54
+ expect(stub_registry).to receive(:remember)
55
+
56
+ subject
57
+ end
58
+
59
+ it "responds with a 200 status code" do
60
+ subject
61
+
62
+ expect(response.status).to eql(200)
63
+ end
64
+
65
+ end
66
+
67
+ context "when a request to recall the stubs in memory is received" do
68
+
69
+ subject { get "/stubs/memory" }
70
+
71
+ it "recalls the stubs remembered by the stub registry" do
72
+ expect(stub_registry).to receive(:recall)
73
+
74
+ subject
75
+ end
76
+
77
+ it "responds with a 200 status code" do
78
+ subject
79
+
80
+ expect(response.status).to eql(200)
81
+ end
82
+
83
+ end
84
+
85
+ context "when a request to clear the stubs has been received" do
86
+
87
+ subject { delete "/stubs" }
88
+
89
+ it "delegates clearing to the stub controller" do
90
+ expect(stub_controller).to receive(:clear)
91
+
92
+ subject
93
+ end
94
+
95
+ it "responds with a 200 status code" do
96
+ subject
97
+
98
+ expect(response.status).to eql(200)
99
+ end
100
+
101
+ end
102
+
103
+ context "when a stub activator insertion request is received" do
104
+
105
+ let(:stub_activator_response) { instance_double(HttpStub::Server::StubResponse::Base) }
106
+
107
+ before(:example) { allow(stub_activator_controller).to receive(:register).and_return(stub_activator_response) }
108
+
109
+ subject do
110
+ post "/stubs/activators", {
111
+ activation_uri: "/an_activation_path", uri: "/a_path", method: "a method",
112
+ response: { status: 200, body: "Foo" }
113
+ }.to_json
114
+ end
115
+
116
+ it "registers the insertion via the stub activator controller" do
117
+ expect(stub_activator_controller).to receive(:register).and_return(stub_activator_response)
118
+
119
+ subject
120
+ end
121
+
122
+ it "processes the stub activators response via the response pipeline" do
123
+ expect(response_pipeline).to receive(:process).with(stub_activator_response)
124
+
125
+ subject
126
+ end
127
+
128
+ end
129
+
130
+ context "when a request to clear the stub activators has been received" do
131
+
132
+ subject { delete "/stubs/activators" }
133
+
134
+ it "delegates clearing to the stub activator controller" do
135
+ expect(stub_activator_controller).to receive(:clear)
136
+
137
+ subject
138
+ end
139
+
140
+ it "responds with a 200 status code" do
141
+ subject
142
+
143
+ expect(response.status).to eql(200)
144
+ end
145
+
146
+ end
147
+
148
+ context "when another type of request is received" do
149
+
150
+ let(:stub_response) { instance_double(HttpStub::Server::StubResponse::Base) }
151
+
152
+ subject { get "/a_path" }
153
+
154
+ before(:example) { allow(stub_controller).to receive(:replay).and_return(stub_response) }
155
+
156
+ context "and the stub controller replays a response" do
157
+
158
+ before(:example) { allow(stub_response).to receive(:empty?).and_return(false) }
159
+
160
+ it "processes the response via the response pipeline" do
161
+ expect(response_pipeline).to receive(:process).with(stub_response)
162
+
163
+ subject
164
+ end
165
+
166
+ end
167
+
168
+ context "and the stub controller does not replay a response" do
169
+
170
+ let(:stub_activator_response) { double(HttpStub::Server::StubResponse::Base, serve_on: nil) }
171
+
172
+ before(:example) do
173
+ allow(stub_response).to receive(:empty?).and_return(true)
174
+ allow(stub_activator_controller).to receive(:activate).and_return(stub_activator_response)
175
+ end
176
+
177
+ context "but the stub activator controller activates a stub" do
178
+
179
+ before(:each) { allow(stub_activator_response).to receive(:empty?).and_return(false) }
180
+
181
+ it "processes the stub activator response via the response pipeline" do
182
+ expect(response_pipeline).to receive(:process).with(stub_activator_response)
183
+
184
+ subject
185
+ end
186
+
187
+ end
188
+
189
+ context "and the stub activator controller does not activate a stub" do
190
+
191
+ before(:each) { allow(stub_activator_response).to receive(:empty?).and_return(true) }
192
+
193
+ it "processes an error response via the response pipeline" do
194
+ expect(response_pipeline).to receive(:process).with(HttpStub::Server::Response::ERROR)
195
+
196
+ subject
197
+ end
198
+
199
+ end
200
+
201
+ end
202
+
203
+ end
204
+
205
+ end
@@ -0,0 +1,7 @@
1
+ describe HttpStub::Server::Daemon do
2
+
3
+ let(:server) { HttpStub::Server::Daemon.new(name: :example_server_daemon, port: 8002) }
4
+
5
+ it_should_behave_like "a managed http server"
6
+
7
+ end
@@ -1,8 +1,8 @@
1
- describe HttpStub::ServerDaemon do
1
+ describe HttpStub::Server::Daemon do
2
2
 
3
3
  let(:configurer) { nil }
4
4
 
5
- let(:server_daemon) { HttpStub::ServerDaemon.new(name: :sample_server_daemon, port: 8888, configurer: configurer) }
5
+ let(:server_daemon) { HttpStub::Server::Daemon.new(name: :sample_server_daemon, port: 8888, configurer: configurer) }
6
6
 
7
7
  before(:example) { allow(server_daemon.logger).to receive(:info) }
8
8
 
@@ -13,7 +13,7 @@ describe HttpStub::ServerDaemon do
13
13
  after(:example) { HttpServerManager.log_dir = @original_log_dir }
14
14
 
15
15
  it "establishes the HttpServerManager log_dir" do
16
- HttpStub::ServerDaemon.log_dir = "/some/log/dir"
16
+ HttpStub::Server::Daemon.log_dir = "/some/log/dir"
17
17
 
18
18
  expect(HttpServerManager.log_dir).to eql("/some/log/dir")
19
19
  end
@@ -27,7 +27,7 @@ describe HttpStub::ServerDaemon do
27
27
  after(:example) { HttpServerManager.pid_dir = @original_pid_dir }
28
28
 
29
29
  it "establishes the HttpServerManager pid_dir" do
30
- HttpStub::ServerDaemon.pid_dir = "/some/pid/dir"
30
+ HttpStub::Server::Daemon.pid_dir = "/some/pid/dir"
31
31
 
32
32
  expect(HttpServerManager.pid_dir).to eql("/some/pid/dir")
33
33
  end
@@ -1,4 +1,4 @@
1
- describe HttpStub::Models::ExactValueMatcher do
1
+ describe HttpStub::Server::ExactValueMatcher do
2
2
 
3
3
  describe ".match?" do
4
4
 
@@ -25,7 +25,7 @@ describe HttpStub::Models::ExactValueMatcher do
25
25
  end
26
26
 
27
27
  def perform_match
28
- HttpStub::Models::ExactValueMatcher.match?(stub_value, actual_value)
28
+ HttpStub::Server::ExactValueMatcher.match?(stub_value, actual_value)
29
29
  end
30
30
 
31
31
  end
@@ -1,4 +1,4 @@
1
- describe HttpStub::Models::HashWithStringValueMatchers do
1
+ describe HttpStub::Server::HashWithStringValueMatchers do
2
2
 
3
3
  let(:stubbed_hash) do
4
4
  (1..3).reduce({}) do |result, i|
@@ -8,13 +8,13 @@ describe HttpStub::Models::HashWithStringValueMatchers do
8
8
  end
9
9
 
10
10
  let(:value_matchers) do
11
- stubbed_hash.values.map { |value| double(HttpStub::Models::StringValueMatcher, to_s: value).as_null_object }
11
+ stubbed_hash.values.map { |value| double(HttpStub::Server::StringValueMatcher, to_s: value).as_null_object }
12
12
  end
13
13
 
14
- let(:value_matcher_hash) { HttpStub::Models::HashWithStringValueMatchers.new(stubbed_hash) }
14
+ let(:value_matcher_hash) { HttpStub::Server::HashWithStringValueMatchers.new(stubbed_hash) }
15
15
 
16
16
  before(:example) do
17
- value_matchers.each { |value| allow(HttpStub::Models::StringValueMatcher).to receive(:new).with(value.to_s).and_return(value) }
17
+ value_matchers.each { |value| allow(HttpStub::Server::StringValueMatcher).to receive(:new).with(value.to_s).and_return(value) }
18
18
  end
19
19
 
20
20
  it "is a hash" do
@@ -25,7 +25,7 @@ describe HttpStub::Models::HashWithStringValueMatchers do
25
25
 
26
26
  it "creates a value matcher representation of each value in the hash" do
27
27
  value_matchers.each do |value|
28
- expect(HttpStub::Models::StringValueMatcher).to receive(:new).with(value.to_s).and_return(value)
28
+ expect(HttpStub::Server::StringValueMatcher).to receive(:new).with(value.to_s).and_return(value)
29
29
  end
30
30
 
31
31
  expect(value_matcher_hash.values).to eql(value_matchers)
@@ -1,8 +1,8 @@
1
- describe HttpStub::Models::Headers do
1
+ describe HttpStub::Server::Headers do
2
2
 
3
3
  let(:header_hash) { {} }
4
4
 
5
- let(:headers) { HttpStub::Models::Headers.new(header_hash) }
5
+ let(:headers) { HttpStub::Server::Headers.new(header_hash) }
6
6
 
7
7
  it "is a Hash" do
8
8
  expect(headers).to be_a(Hash)
@@ -1,4 +1,4 @@
1
- describe HttpStub::Models::OmittedValueMatcher do
1
+ describe HttpStub::Server::OmittedValueMatcher do
2
2
 
3
3
  describe ".match?" do
4
4
 
@@ -50,7 +50,7 @@ describe HttpStub::Models::OmittedValueMatcher do
50
50
  end
51
51
 
52
52
  def perform_match
53
- HttpStub::Models::OmittedValueMatcher.match?(stub_value, actual_value)
53
+ HttpStub::Server::OmittedValueMatcher.match?(stub_value, actual_value)
54
54
  end
55
55
 
56
56
  end
@@ -1,4 +1,4 @@
1
- describe HttpStub::Models::RegexpValueMatcher do
1
+ describe HttpStub::Server::RegexpValueMatcher do
2
2
 
3
3
  describe ".match?" do
4
4
 
@@ -40,7 +40,7 @@ describe HttpStub::Models::RegexpValueMatcher do
40
40
  end
41
41
 
42
42
  def perform_match
43
- HttpStub::Models::RegexpValueMatcher.match?(stub_value, actual_value)
43
+ HttpStub::Server::RegexpValueMatcher.match?(stub_value, actual_value)
44
44
  end
45
45
 
46
46
  end
@@ -1,14 +1,22 @@
1
- describe HttpStub::Models::Registry do
1
+ describe HttpStub::Server::Registry do
2
2
 
3
3
  let(:logger) { double("Logger").as_null_object }
4
4
  let(:request) { double("HttpRequest", logger: logger, inspect: "Request inspect result") }
5
5
 
6
- let(:registry) { HttpStub::Models::Registry.new("a_model") }
6
+ let(:registry) { HttpStub::Server::Registry.new("a_model") }
7
+
8
+ shared_context "register multiple models" do
9
+
10
+ let(:models) { (1..3).map { |i| double("HttpStub::Server::Model#{i}", :satisfies? => false, :clear => nil) } }
11
+
12
+ before(:example) { models.each { |model| registry.add(model, request) } }
13
+
14
+ end
7
15
 
8
16
  describe "#add" do
9
17
 
10
18
  it "logs that the model has been registered" do
11
- model = double("HttpStub::Models::Model", to_s: "Model as String")
19
+ model = double("HttpStub::Server::Model", to_s: "Model as String")
12
20
  expect(logger).to receive(:info).with(/Model as String/)
13
21
 
14
22
  registry.add(model, request)
@@ -20,13 +28,7 @@ describe HttpStub::Models::Registry do
20
28
 
21
29
  describe "when multiple models have been registered" do
22
30
 
23
- let(:models) do
24
- (1..3).map { |i| double("HttpStub::Models::Model#{i}", :satisfies? => false) }
25
- end
26
-
27
- before(:example) do
28
- models.each { |model| registry.add(model, request) }
29
- end
31
+ include_context "register multiple models"
30
32
 
31
33
  describe "and one registered model satisfies the request" do
32
34
 
@@ -52,9 +54,7 @@ describe HttpStub::Models::Registry do
52
54
 
53
55
  describe "and multiple registered models satisfy the request" do
54
56
 
55
- before(:example) do
56
- [0, 2].each { |i| allow(models[i]).to receive(:satisfies?).and_return(true) }
57
- end
57
+ before(:example) { [0, 2].each { |i| allow(models[i]).to receive(:satisfies?).and_return(true) } }
58
58
 
59
59
  it "supports model overrides by returning the last model registered" do
60
60
  expect(registry.find_for(request)).to eql(models[2])
@@ -88,83 +88,80 @@ describe HttpStub::Models::Registry do
88
88
 
89
89
  end
90
90
 
91
- describe "#all" do
92
-
93
- describe "when multiple models have been registered" do
91
+ describe "#last" do
94
92
 
95
- let(:models) do
96
- (1..3).map { |i| double("HttpStub::Models::Model#{i}", :satisfies? => false) }
97
- end
93
+ context "when multiple models have been registered" do
98
94
 
99
- before(:example) do
100
- models.each { |model| registry.add(model, request) }
101
- end
95
+ include_context "register multiple models"
102
96
 
103
- it "returns the registered models in the order they were added" do
104
- expect(registry.all).to eql(models.reverse)
97
+ it "returns the last added model" do
98
+ expect(registry.last).to eql(models.last)
105
99
  end
106
100
 
107
101
  end
108
102
 
109
- describe "when no model has been registered" do
103
+ context "when a model has been registered" do
110
104
 
111
- it "returns an empty list" do
112
- expect(registry.all).to eql([])
105
+ let(:model) { double("HttpStub::Server::Model") }
106
+
107
+ before(:example) { registry.add(model, request) }
108
+
109
+ it "returns the model" do
110
+ expect(registry.last).to eql(model)
113
111
  end
114
112
 
115
113
  end
116
114
 
117
115
  end
118
116
 
119
- describe "#copy" do
120
-
121
- class HttpStub::Models::CopyableModel
117
+ describe "#all" do
122
118
 
123
- attr_reader :name
119
+ context "when multiple models have been registered" do
124
120
 
125
- def initialize(name)
126
- @name = name
127
- end
121
+ include_context "register multiple models"
128
122
 
129
- def eql?(other)
130
- @name = other.name
123
+ it "returns the registered models in the order they were added" do
124
+ expect(registry.all).to eql(models.reverse)
131
125
  end
132
126
 
133
127
  end
134
128
 
135
- subject { registry.copy }
129
+ context "when no model has been registered" do
136
130
 
137
- context "when multiple models have been registered" do
131
+ it "returns an empty list" do
132
+ expect(registry.all).to eql([])
133
+ end
138
134
 
139
- let(:models) { (1..3).map { |i| HttpStub::Models::CopyableModel.new("model_#{i}") } }
135
+ end
140
136
 
141
- before(:each) { models.each { |model| registry.add(model, request) } }
137
+ end
142
138
 
143
- it "returns a registry containing the models" do
144
- result = subject
139
+ describe "#clear" do
145
140
 
146
- expect(result.all).to eql(models)
147
- end
141
+ subject { registry.clear(request) }
142
+
143
+ it "logs that the models are being cleared" do
144
+ expect(logger).to receive(:info).with(/clearing a_model/i)
148
145
 
146
+ subject
149
147
  end
150
148
 
151
- it "returns a registry that changes independently of the copied registry" do
152
- model_to_add = HttpStub::Models::CopyableModel.new("model_to_add")
149
+ context "when models have been added" do
153
150
 
154
- result = subject
151
+ include_context "register multiple models"
155
152
 
156
- registry.add(model_to_add, request)
157
- expect(result.all).not_to include(model_to_add)
158
- end
153
+ it "clears each model" do
154
+ models.each { |model| expect(model).to receive(:clear) }
159
155
 
160
- end
156
+ subject
157
+ end
161
158
 
162
- describe "#clear" do
159
+ it "releases all knowledge of the models" do
160
+ subject
163
161
 
164
- it "logs that the models are being cleared" do
165
- expect(logger).to receive(:info).with(/clearing a_model/i)
162
+ expect(registry.all).to be_empty
163
+ end
166
164
 
167
- registry.clear(request)
168
165
  end
169
166
 
170
167
  end
@@ -1,4 +1,4 @@
1
- describe HttpStub::Models::RequestHeaderParser do
1
+ describe HttpStub::Server::RequestHeaderParser do
2
2
 
3
3
  let(:non_header_env_elements) do
4
4
  {
@@ -17,7 +17,7 @@ describe HttpStub::Models::RequestHeaderParser do
17
17
  let(:header_env_elements) { { "KEY_1" => "value1", "KEY_2" => "value2", "KEY_3" => "value3" } }
18
18
 
19
19
  it "returns a hash containing those entries" do
20
- expect(HttpStub::Models::RequestHeaderParser.parse(request)).to eql("KEY_1" => "value1",
20
+ expect(HttpStub::Server::RequestHeaderParser.parse(request)).to eql("KEY_1" => "value1",
21
21
  "KEY_2" => "value2",
22
22
  "KEY_3" => "value3")
23
23
  end
@@ -29,7 +29,7 @@ describe HttpStub::Models::RequestHeaderParser do
29
29
  let(:header_env_elements) { { "HTTP_KEY_1" => "value1", "HTTP_KEY_2" => "value2", "HTTP_KEY_3" => "value3" } }
30
30
 
31
31
  it "returns a hash containing those entries with the prefix removed" do
32
- expect(HttpStub::Models::RequestHeaderParser.parse(request)).to include("KEY_1" => "value1",
32
+ expect(HttpStub::Server::RequestHeaderParser.parse(request)).to include("KEY_1" => "value1",
33
33
  "KEY_2" => "value2",
34
34
  "KEY_3" => "value3")
35
35
  end
@@ -41,7 +41,7 @@ describe HttpStub::Models::RequestHeaderParser do
41
41
  let(:header_env_elements) { {} }
42
42
 
43
43
  it "returns an empty hash" do
44
- expect(HttpStub::Models::RequestHeaderParser.parse(request)).to eql({})
44
+ expect(HttpStub::Server::RequestHeaderParser.parse(request)).to eql({})
45
45
  end
46
46
 
47
47
  end
@@ -0,0 +1,29 @@
1
+ describe HttpStub::Server::ResponsePipeline do
2
+
3
+ let(:server) { instance_double(HttpStub::Server) }
4
+
5
+ let(:response_pipeline) { HttpStub::Server::ResponsePipeline.new(server) }
6
+
7
+ describe "#process" do
8
+
9
+ let(:response) { double(HttpStub::Server::StubResponse::Base, delay_in_seconds: 5, serve_on: nil) }
10
+
11
+ before(:example) { allow(response_pipeline).to receive(:sleep) }
12
+
13
+ subject { response_pipeline.process(response) }
14
+
15
+ it "sleeps for the duration declared in the response" do
16
+ expect(response_pipeline).to receive(:sleep).with(5)
17
+
18
+ subject
19
+ end
20
+
21
+ it "serves the response via the server" do
22
+ expect(response).to receive(:serve_on).with(server)
23
+
24
+ subject
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,41 @@
1
+ describe HttpStub::Server::Response do
2
+
3
+ describe "::SUCCESS" do
4
+
5
+ let(:response) { HttpStub::Server::Response::SUCCESS }
6
+
7
+ it "has a status of 200" do
8
+ expect(response.status).to eql(200)
9
+ end
10
+
11
+ it "has a body containing OK to visually indicate success to those interacting via a browser" do
12
+ expect(response.body).to match(/OK/)
13
+ end
14
+
15
+ end
16
+
17
+ describe "::ERROR" do
18
+
19
+ let(:response) { HttpStub::Server::Response::ERROR }
20
+
21
+ it "has a status of 404" do
22
+ expect(response.status).to eql(404)
23
+ end
24
+
25
+ it "has a body containing ERROR to visually indicate the error to those interacting via a browser" do
26
+ expect(response.body).to match(/ERROR/)
27
+ end
28
+
29
+ end
30
+
31
+ describe "::EMPTY" do
32
+
33
+ let(:response) { HttpStub::Server::Response::EMPTY }
34
+
35
+ it "is empty" do
36
+ expect(response.empty?).to be(true)
37
+ end
38
+
39
+ end
40
+
41
+ end