http_stub 0.21.0 → 0.22.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 (43) hide show
  1. checksums.yaml +5 -13
  2. data/lib/http_stub.rb +2 -1
  3. data/lib/http_stub/configurer/dsl/scenario_builder.rb +4 -4
  4. data/lib/http_stub/configurer/request/http/factory.rb +2 -2
  5. data/lib/http_stub/configurer/server/facade.rb +19 -9
  6. data/lib/http_stub/server/application.rb +22 -12
  7. data/lib/http_stub/server/{views → public}/favicon.ico +0 -0
  8. data/lib/http_stub/server/public/jquery-2.2.1.min.js +4 -0
  9. data/lib/http_stub/server/scenario/activator.rb +3 -3
  10. data/lib/http_stub/server/scenario/controller.rb +3 -3
  11. data/lib/http_stub/server/scenario/links.rb +22 -0
  12. data/lib/http_stub/server/scenario/scenario.rb +14 -11
  13. data/lib/http_stub/server/scenario/trigger.rb +18 -0
  14. data/lib/http_stub/server/stub/controller.rb +1 -1
  15. data/lib/http_stub/server/stub/registry.rb +2 -2
  16. data/lib/http_stub/server/views/_activate_scenario.haml +10 -0
  17. data/lib/http_stub/server/views/application.sass +4 -0
  18. data/lib/http_stub/server/views/index.haml +6 -0
  19. data/lib/http_stub/server/views/layout.haml +3 -2
  20. data/lib/http_stub/server/views/matches.haml +1 -0
  21. data/lib/http_stub/server/views/{_scenario.haml → scenario.haml} +4 -3
  22. data/lib/http_stub/server/views/scenarios.haml +10 -3
  23. data/lib/http_stub/server/views/stubs.haml +1 -0
  24. data/lib/http_stub/version.rb +1 -1
  25. data/spec/acceptance/endpoint_template_spec.rb +2 -2
  26. data/spec/acceptance/scenario_spec.rb +3 -3
  27. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +24 -4
  28. data/spec/lib/http_stub/configurer/request/scenario_spec.rb +2 -2
  29. data/spec/lib/http_stub/configurer/server/facade_spec.rb +18 -8
  30. data/spec/lib/http_stub/server/application_integration_spec.rb +270 -111
  31. data/spec/lib/http_stub/server/application_spec.rb +81 -15
  32. data/spec/lib/http_stub/server/scenario/activator_spec.rb +8 -3
  33. data/spec/lib/http_stub/server/scenario/controller_spec.rb +9 -7
  34. data/spec/lib/http_stub/server/scenario/links_spec.rb +41 -0
  35. data/spec/lib/http_stub/server/scenario/scenario_spec.rb +72 -30
  36. data/spec/lib/http_stub/server/scenario/trigger_spec.rb +36 -0
  37. data/spec/lib/http_stub/server/stub/controller_spec.rb +2 -2
  38. data/spec/lib/http_stub/server/stub/registry_spec.rb +23 -9
  39. data/spec/spec_helper.rb +1 -1
  40. data/spec/support/http_stub/scenario_fixture.rb +3 -3
  41. metadata +334 -342
  42. data/lib/http_stub/server/request_pipeline.rb +0 -27
  43. data/spec/lib/http_stub/server/request_pipeline_spec.rb +0 -80
@@ -1,3 +1,4 @@
1
+ %h1 Stubs
1
2
  - stubs.each do |the_stub|
2
3
  = partial :stub, locals: { the_stub: the_stub }
3
4
  %br
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.21.0".freeze
2
+ VERSION = "0.22.0".freeze
3
3
  end
@@ -26,7 +26,7 @@ describe "Endpoint Template acceptance" do
26
26
 
27
27
  context "that customises the request matching rules" do
28
28
 
29
- let(:scenario_name) { "custom_request" }
29
+ let(:scenario_name) { "Custom request" }
30
30
 
31
31
  let(:response) { issue_request("custom_scenario_uri") }
32
32
 
@@ -39,7 +39,7 @@ describe "Endpoint Template acceptance" do
39
39
 
40
40
  context "that customises the response" do
41
41
 
42
- let(:scenario_name) { "custom_response" }
42
+ let(:scenario_name) { "Custom response" }
43
43
 
44
44
  let(:response) { issue_request("template_uri") }
45
45
 
@@ -11,7 +11,7 @@ describe "Scenario acceptance" do
11
11
 
12
12
  context "containing stubs" do
13
13
 
14
- before(:example) { configurer.activate!("scenario_1") }
14
+ before(:example) { configurer.activate!("Scenario 1") }
15
15
 
16
16
  (1..3).each do |stub_number|
17
17
 
@@ -32,7 +32,7 @@ describe "Scenario acceptance" do
32
32
 
33
33
  context "containing triggered scenarios" do
34
34
 
35
- before(:example) { configurer.activate!("scenario_activating_another_scenario") }
35
+ before(:example) { configurer.activate!("Scenario that activates another scenario") }
36
36
 
37
37
  (1..3).each do |stub_number|
38
38
 
@@ -71,7 +71,7 @@ describe "Scenario acceptance" do
71
71
 
72
72
  let(:configurer) { HttpStub::Examples::ConfigurerWithFileResponses.new }
73
73
 
74
- before(:example) { configurer.activate!("scenario_with_file") }
74
+ before(:example) { configurer.activate!("Scenario with file") }
75
75
 
76
76
  context "and the stub request is made" do
77
77
 
@@ -25,7 +25,7 @@ describe HttpStub::Configurer::Request::Http::Factory do
25
25
 
26
26
  describe "::get" do
27
27
 
28
- let(:path) { "some/get/path" }
28
+ let(:path) { "/some/get/path" }
29
29
  let(:get_request) { instance_double(Net::HTTP::Get) }
30
30
  let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
31
31
 
@@ -91,10 +91,30 @@ describe HttpStub::Configurer::Request::Http::Factory do
91
91
  subject
92
92
  end
93
93
 
94
- it "establishes an empty body in the POST request" do
95
- expect(post_request).to receive(:body=).with("")
94
+ context "when parameters are provided" do
95
+
96
+ let(:parameters) { (1..3).each_with_object({}) { |i, result| result["key#{i}"] = "value#{i}" } }
97
+
98
+ subject { HttpStub::Configurer::Request::Http::Factory.post(path, parameters) }
99
+
100
+ it "establishes the provided parameters as the form data in the POST request" do
101
+ expect(post_request).to receive(:set_form_data).with(parameters)
102
+
103
+ subject
104
+ end
105
+
106
+ end
107
+
108
+ context "when no parameters are provided" do
109
+
110
+ subject { HttpStub::Configurer::Request::Http::Factory.post(path) }
111
+
112
+ it "establishes empty form data in the POST request" do
113
+ expect(post_request).to receive(:set_form_data).with({})
114
+
115
+ subject
116
+ end
96
117
 
97
- subject
98
118
  end
99
119
 
100
120
  it "creates a basic request wrapping the POST request" do
@@ -1,8 +1,8 @@
1
1
  describe HttpStub::Configurer::Request::Scenario do
2
2
 
3
- let(:name) { "some/scenario/name" }
3
+ let(:name) { "Some scenario name" }
4
4
  let(:stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
5
- let(:triggered_scenario_names) { (1..3).map { |i| "triggered/scenario/name/#{i}" } }
5
+ let(:triggered_scenario_names) { (1..3).map { |i| "Triggered scenario name #{i}" } }
6
6
 
7
7
  let(:scenario) do
8
8
  HttpStub::Configurer::Request::Scenario.new(
@@ -89,18 +89,28 @@ describe HttpStub::Configurer::Server::Facade do
89
89
 
90
90
  describe "#activate" do
91
91
 
92
- let(:uri) { "/some/activation/uri" }
93
- let(:request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
92
+ let(:scenario_name) { "some/scenario/name" }
93
+ let(:request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
94
94
 
95
- subject { facade.activate(uri) }
95
+ subject { facade.activate(scenario_name) }
96
96
 
97
97
  before(:example) do
98
- allow(HttpStub::Configurer::Request::Http::Factory).to receive(:get).and_return(request)
98
+ allow(HttpStub::Configurer::Request::Http::Factory).to receive(:post).and_return(request)
99
99
  allow(request_processor).to receive(:submit)
100
100
  end
101
101
 
102
- it "creates an GET request for the uri" do
103
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:get).with(uri).and_return(request)
102
+ it "creates an POST request to activate a scenario" do
103
+ expect(HttpStub::Configurer::Request::Http::Factory).to(
104
+ receive(:post).with("/http_stub/scenarios/activate", anything).and_return(request)
105
+ )
106
+
107
+ subject
108
+ end
109
+
110
+ it "creates a POST request with the scenario name as a parameter" do
111
+ expect(HttpStub::Configurer::Request::Http::Factory).to(
112
+ receive(:post).with(anything, hash_including(:name => scenario_name)).and_return(request)
113
+ )
104
114
 
105
115
  subject
106
116
  end
@@ -111,8 +121,8 @@ describe HttpStub::Configurer::Server::Facade do
111
121
  subject
112
122
  end
113
123
 
114
- it "describes the activation request via the provided uri" do
115
- expect(request_processor).to receive(:submit).with(hash_including(description: "activating '#{uri}'"))
124
+ it "describes the activation request using the provided scenario name" do
125
+ expect(request_processor).to receive(:submit).with(hash_including(description: "activating '#{scenario_name}'"))
116
126
 
117
127
  subject
118
128
  end
@@ -3,7 +3,33 @@ describe HttpStub::Server::Application, "when the server is running" do
3
3
 
4
4
  let(:response_document) { Nokogiri::HTML(response.body) }
5
5
 
6
- describe "POST /stubs" do
6
+ describe "GET /http_stub" do
7
+
8
+ let(:response) { HTTParty.get("#{server_uri}/http_stub") }
9
+
10
+ it "returns a 200 response code" do
11
+ expect(response.code).to eql(200)
12
+ end
13
+
14
+ it "returns a response whose body links to the stubs list" do
15
+ expect(link_for("stubs")).to eql("/http_stub/stubs")
16
+ end
17
+
18
+ it "returns a response whose body links to the scenarios list" do
19
+ expect(link_for("scenarios")).to eql("/http_stub/scenarios")
20
+ end
21
+
22
+ it "returns a response whose body links to the matches list" do
23
+ expect(link_for("stub_matches")).to eql("/http_stub/stubs/matches")
24
+ end
25
+
26
+ def link_for(id)
27
+ response_document.at_css("a##{id}")["href"]
28
+ end
29
+
30
+ end
31
+
32
+ describe "POST /http_stub/stubs" do
7
33
 
8
34
  context "when provided with the minimum data required" do
9
35
 
@@ -40,178 +66,311 @@ describe HttpStub::Server::Application, "when the server is running" do
40
66
  configurer.initialize!
41
67
  end
42
68
 
43
- shared_context "the response contains HTML describing the configurers stubs" do
69
+ describe "GET /http_stub/stubs" do
44
70
 
45
- it "returns a 200 response code" do
46
- expect(response.code).to eql(200)
47
- end
71
+ describe "when multiple stubs are configured" do
48
72
 
49
- it "returns a response whose body contains the uri of each stub" do
50
- (1..3).each do |stub_number|
51
- expect(response.body).to match(/#{escape_html("/path_#{stub_number}")}/)
73
+ before(:context) do
74
+ (1..3).each do |i|
75
+ HTTParty.post("#{server_uri}/http_stub/scenarios/activate", :body => { :name => "Scenario #{i}" })
76
+ end
52
77
  end
53
- end
54
78
 
55
- it "returns a response whose body contains the uri of each stub trigger" do
56
- (1..3).each do |stub_number|
57
- (1..3).each do |trigger_number|
58
- expect(response.body).to match(/#{escape_html("/path_#{stub_number}_trigger_#{trigger_number}")}/)
79
+ let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs") }
80
+
81
+ it "returns a 200 response code" do
82
+ expect(response.code).to eql(200)
83
+ end
84
+
85
+ it "returns a response whose body contains the uri of each stub" do
86
+ (1..3).each do |stub_number|
87
+ expect(response.body).to match(/#{escape_html("/path_#{stub_number}")}/)
59
88
  end
60
89
  end
61
- end
62
90
 
63
- it "returns a response whose body contains the request headers of each stub" do
64
- (1..3).each do |stub_number|
65
- expect(response.body).to match(/request_header_#{stub_number}:request_header_value_#{stub_number}/)
91
+ it "returns a response whose body contains the uri of each stub trigger" do
92
+ (1..3).each do |stub_number|
93
+ (1..3).each do |trigger_number|
94
+ expect(response.body).to match(/#{escape_html("/path_#{stub_number}_trigger_#{trigger_number}")}/)
95
+ end
96
+ end
66
97
  end
67
- end
68
98
 
69
- it "returns a response whose body contains the request headers of each stub trigger" do
70
- (1..3).each do |stub_number|
71
- (1..3).each do |trigger_number|
72
- expected_header_key = "request_header_#{stub_number}_trigger_#{trigger_number}"
73
- expected_header_value = "request_header_value_#{stub_number}_trigger_#{trigger_number}"
74
- expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
99
+ it "returns a response whose body contains the request headers of each stub" do
100
+ (1..3).each do |stub_number|
101
+ expect(response.body).to match(/request_header_#{stub_number}:request_header_value_#{stub_number}/)
75
102
  end
76
103
  end
77
- end
78
104
 
79
- it "returns a response whose body contains the parameters of each stub" do
80
- (1..3).each do |stub_number|
81
- expect(response.body).to match(/parameter_#{stub_number}=parameter_value_#{stub_number}/)
105
+ it "returns a response whose body contains the request headers of each stub trigger" do
106
+ (1..3).each do |stub_number|
107
+ (1..3).each do |trigger_number|
108
+ expected_header_key = "request_header_#{stub_number}_trigger_#{trigger_number}"
109
+ expected_header_value = "request_header_value_#{stub_number}_trigger_#{trigger_number}"
110
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
111
+ end
112
+ end
82
113
  end
83
- end
84
114
 
85
- it "returns a response whose body contains the parameters of each stub trigger" do
86
- (1..3).each do |stub_number|
87
- (1..3).each do |trigger_number|
88
- expected_parameter_key = "parameter_#{stub_number}_trigger_#{trigger_number}"
89
- expected_parameter_value = "parameter_value_#{stub_number}_trigger_#{trigger_number}"
90
- expect(response.body).to match(/#{expected_parameter_key}=#{expected_parameter_value}/)
115
+ it "returns a response whose body contains the parameters of each stub" do
116
+ (1..3).each do |stub_number|
117
+ expect(response.body).to match(/parameter_#{stub_number}=parameter_value_#{stub_number}/)
91
118
  end
92
119
  end
93
- end
94
120
 
95
- it "returns a response whose body contains the bodies of each stub" do
96
- (1..3).each do |stub_number|
97
- expect(response.body).to(
98
- match(/#{escape_html("\"property_#{stub_number}\":{\"type\":\"property_#{stub_number}_type\"")}/)
99
- )
121
+ it "returns a response whose body contains the parameters of each stub trigger" do
122
+ (1..3).each do |stub_number|
123
+ (1..3).each do |trigger_number|
124
+ expected_parameter_key = "parameter_#{stub_number}_trigger_#{trigger_number}"
125
+ expected_parameter_value = "parameter_value_#{stub_number}_trigger_#{trigger_number}"
126
+ expect(response.body).to match(/#{expected_parameter_key}=#{expected_parameter_value}/)
127
+ end
128
+ end
100
129
  end
101
- end
102
130
 
103
- it "returns a response whose body contains the bodies of each stub trigger" do
104
- (1..3).each do |stub_number|
105
- (1..3).each do |trigger_number|
106
- expected_property_name = "property_#{stub_number}_trigger_#{trigger_number}"
107
- expected_property_type = "property_#{stub_number}_trigger_#{trigger_number}_type"
131
+ it "returns a response whose body contains the bodies of each stub" do
132
+ (1..3).each do |stub_number|
108
133
  expect(response.body).to(
109
- match(/#{escape_html("\"#{expected_property_name}\":{\"type\":\"#{expected_property_type}\"")}/)
134
+ match(/#{escape_html("\"property_#{stub_number}\":{\"type\":\"property_#{stub_number}_type\"")}/)
110
135
  )
111
136
  end
112
137
  end
113
- end
114
-
115
- it "returns a response whose body contains the response status of each stub" do
116
- (1..3).each { |stub_number| expect(response.body).to match(/20#{stub_number}/) }
117
- end
118
138
 
119
- it "returns a response whose body contains the response status of each stub trigger" do
120
- (1..3).each do |stub_number|
121
- (1..3).each do |trigger_number|
122
- expect(response.body).to match(/30#{stub_number * trigger_number}/)
139
+ it "returns a response whose body contains the bodies of each stub trigger" do
140
+ (1..3).each do |stub_number|
141
+ (1..3).each do |trigger_number|
142
+ expected_property_name = "property_#{stub_number}_trigger_#{trigger_number}"
143
+ expected_property_type = "property_#{stub_number}_trigger_#{trigger_number}_type"
144
+ expect(response.body).to(
145
+ match(/#{escape_html("\"#{expected_property_name}\":{\"type\":\"#{expected_property_type}\"")}/)
146
+ )
147
+ end
123
148
  end
124
149
  end
125
- end
126
150
 
127
- it "returns a response whose body contains the response headers of each stub" do
128
- (1..3).each do |stub_number|
129
- expected_header_key = "response_header_#{stub_number}"
130
- expected_header_value = "response_header_value_#{stub_number}"
131
- expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
151
+ it "returns a response whose body contains the response status of each stub" do
152
+ (1..3).each { |stub_number| expect(response.body).to match(/20#{stub_number}/) }
132
153
  end
133
- end
134
154
 
135
- it "returns a response whose body contains the response headers of each stub trigger" do
136
- (1..3).each do |stub_number|
137
- (1..3).each do |trigger_number|
138
- expected_header_key = "response_header_#{stub_number}_trigger_#{trigger_number}"
139
- expected_header_value = "response_header_value_#{stub_number}_trigger_#{trigger_number}"
155
+ it "returns a response whose body contains the response status of each stub trigger" do
156
+ (1..3).each do |stub_number|
157
+ (1..3).each do |trigger_number|
158
+ expect(response.body).to match(/30#{stub_number * trigger_number}/)
159
+ end
160
+ end
161
+ end
162
+
163
+ it "returns a response whose body contains the response headers of each stub" do
164
+ (1..3).each do |stub_number|
165
+ expected_header_key = "response_header_#{stub_number}"
166
+ expected_header_value = "response_header_value_#{stub_number}"
140
167
  expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
141
168
  end
142
169
  end
143
- end
144
170
 
145
- it "returns a response whose body contains the response body of stub returning JSON" do
146
- expect(response.body).to match(/#{escape_html({ "key" => "JSON body" }.to_json)}/)
147
- end
171
+ it "returns a response whose body contains the response headers of each stub trigger" do
172
+ (1..3).each do |stub_number|
173
+ (1..3).each do |trigger_number|
174
+ expected_header_key = "response_header_#{stub_number}_trigger_#{trigger_number}"
175
+ expected_header_value = "response_header_value_#{stub_number}_trigger_#{trigger_number}"
176
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
177
+ end
178
+ end
179
+ end
148
180
 
149
- it "returns a response whose body contains the response body of stub returning HTML" do
150
- expect(response.body).to match(/#{escape_html("<html><body>HTML body</body></html>")}/)
151
- end
181
+ it "returns a response whose body contains the response body of stub returning JSON" do
182
+ expect(response.body).to match(/#{escape_html({ "key" => "JSON body" }.to_json)}/)
183
+ end
152
184
 
153
- it "returns a response whose body contains the response body of a stub returning a file" do
154
- file_link = response_document.css("a.file").first
155
- expect(file_link["href"]).to match(/^file:\/\/[^']+\.pdf$/)
156
- end
185
+ it "returns a response whose body contains the response body of stub returning HTML" do
186
+ expect(response.body).to match(/#{escape_html("<html><body>HTML body</body></html>")}/)
187
+ end
157
188
 
158
- it "returns a response whose body contains the response body of each stub trigger" do
159
- (1..3).each do |stub_number|
160
- (1..3).each do |trigger_number|
161
- expect(response.body).to match(/Body of scenario stub #{stub_number}_trigger_#{trigger_number}/)
189
+ it "returns a response whose body contains the response body of a stub returning a file" do
190
+ file_link = response_document.css("a.file").first
191
+ expect(file_link["href"]).to match(/^file:\/\/[^']+\.pdf$/)
192
+ end
193
+
194
+ it "returns a response whose body contains the response body of each stub trigger" do
195
+ (1..3).each do |stub_number|
196
+ (1..3).each do |trigger_number|
197
+ expect(response.body).to match(/Body of scenario stub #{stub_number}_trigger_#{trigger_number}/)
198
+ end
162
199
  end
163
200
  end
164
- end
165
201
 
166
- it "returns a response whose body contains the response delay of each stub" do
167
- (1..3).each { |stub_number| expect(response.body).to include("#{8 * stub_number}") }
168
- end
202
+ it "returns a response whose body contains the response delay of each stub" do
203
+ (1..3).each { |stub_number| expect(response.body).to include("#{8 * stub_number}") }
204
+ end
169
205
 
170
- it "returns a response whose body contains the response delay of each stub trigger" do
171
- (1..3).each do |stub_number|
172
- (1..3).each do |trigger_number|
173
- expect(response.body).to include("#{3 * stub_number * trigger_number}")
206
+ it "returns a response whose body contains the response delay of each stub trigger" do
207
+ (1..3).each do |stub_number|
208
+ (1..3).each do |trigger_number|
209
+ expect(response.body).to include("#{3 * stub_number * trigger_number}")
210
+ end
174
211
  end
175
212
  end
213
+
176
214
  end
177
215
 
178
216
  end
179
217
 
180
- describe "GET /stubs" do
181
-
182
- describe "when multiple stubs are configured" do
218
+ describe "GET /http_stub/scenarios" do
183
219
 
184
- before(:context) { (1..3).each { |i| HTTParty.get("#{server_uri}/scenario_#{i}") } }
220
+ let(:response) { HTTParty.get("#{server_uri}/http_stub/scenarios") }
185
221
 
186
- let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs") }
222
+ it "returns a response whose body contains the name of each scenario in alphabetical order" do
223
+ expected_scenario_names = [ "Nested scenario", "Scenario" ].map do |scenario_name_prefix|
224
+ (1..3).map { |i| "#{scenario_name_prefix} #{i}" }
225
+ end.flatten
187
226
 
188
- include_context "the response contains HTML describing the configurers stubs"
227
+ scenario_names = response_document.css(".scenario_name").map { |element| element.text }
189
228
 
229
+ expect(scenario_names).to eql(expected_scenario_names)
190
230
  end
191
231
 
192
- end
232
+ it "returns a response whose body contains links to activate each scenario" do
233
+ expected_activation_links = [ "/http_stub/scenarios/activate" ] * 6
193
234
 
194
- describe "GET /http_stub/scenarios" do
235
+ activation_links = response_document.css("a.activate_scenario").map { |link| link["href"] }
195
236
 
196
- let(:response) { HTTParty.get("#{server_uri}/http_stub/scenarios") }
237
+ expect(activation_links).to eql(expected_activation_links)
238
+ end
197
239
 
198
- it "returns a response whose body contains links to each scenario in alphabetical order" do
199
- expected_scenario_links = %w{ nested_scenario scenario }.map do |scenario_name_prefix|
200
- (1..3).map { |i| "/#{scenario_name_prefix}_#{i}" }
240
+ it "returns a response whose body contains links to the details of each scenario" do
241
+ expected_detail_links = %w{ Nested+scenario Scenario }.map do |scenario_name_prefix|
242
+ (1..3).map { |i| "/http_stub/scenarios?name=#{scenario_name_prefix}+#{i}" }
201
243
  end.flatten
202
244
 
203
- scenario_links = response_document.css("a.scenario").map { |link| link["href"] }
245
+ detail_links = response_document.css("a.view_scenario").map { |link| link["href"] }
204
246
 
205
- expect(scenario_links).to eql(expected_scenario_links)
247
+ expect(detail_links).to eql(expected_detail_links)
206
248
  end
207
249
 
208
- it "returns a response whose body contains links to the scenarios triggered by each scenario" do
209
- response_document.css("a.triggered_scenario").each_with_index do |link, i|
210
- expect(link["href"]).to eql("/nested_scenario_#{i + 1}")
250
+ end
251
+
252
+ describe "GET /http/scenario?name" do
253
+
254
+ (1..3).each do |stub_number|
255
+
256
+ scenario_name = "Scenario #{stub_number}"
257
+
258
+ context "when the scenario with the name '#{scenario_name}' is requested" do
259
+
260
+ let(:response) do
261
+ HTTParty.get("#{server_uri}/http_stub/scenarios?#{URI.encode_www_form(:name => scenario_name)}")
262
+ end
263
+
264
+ it "should have a detail page for the scenario" do
265
+ expect(response.code).to eql(200)
266
+ end
267
+
268
+ it "returns a response whose body contains the uri of the scenario" do
269
+ expect(response.body).to match(/#{escape_html("/path_#{stub_number}")}/)
270
+ end
271
+
272
+ it "returns a response whose body contains the uri of each stub trigger" do
273
+ (1..3).each do |trigger_number|
274
+ expect(response.body).to match(/#{escape_html("/path_#{stub_number}_trigger_#{trigger_number}")}/)
275
+ end
276
+ end
277
+
278
+ it "returns a response whose body contains the request headers of each stub" do
279
+ expect(response.body).to match(/request_header_#{stub_number}:request_header_value_#{stub_number}/)
280
+ end
281
+
282
+ it "returns a response whose body contains the request headers of each stub trigger" do
283
+ (1..3).each do |trigger_number|
284
+ expected_header_key = "request_header_#{stub_number}_trigger_#{trigger_number}"
285
+ expected_header_value = "request_header_value_#{stub_number}_trigger_#{trigger_number}"
286
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
287
+ end
288
+ end
289
+
290
+ it "returns a response whose body contains the parameters of each stub" do
291
+ expect(response.body).to match(/parameter_#{stub_number}=parameter_value_#{stub_number}/)
292
+ end
293
+
294
+ it "returns a response whose body contains the parameters of each stub trigger" do
295
+ (1..3).each do |trigger_number|
296
+ expected_parameter_key = "parameter_#{stub_number}_trigger_#{trigger_number}"
297
+ expected_parameter_value = "parameter_value_#{stub_number}_trigger_#{trigger_number}"
298
+ expect(response.body).to match(/#{expected_parameter_key}=#{expected_parameter_value}/)
299
+ end
300
+ end
301
+
302
+ it "returns a response whose body contains the bodies of each stub" do
303
+ expect(response.body).to(
304
+ match(/#{escape_html("\"property_#{stub_number}\":{\"type\":\"property_#{stub_number}_type\"")}/)
305
+ )
306
+ end
307
+
308
+ it "returns a response whose body contains the bodies of each stub trigger" do
309
+ (1..3).each do |trigger_number|
310
+ expected_property_name = "property_#{stub_number}_trigger_#{trigger_number}"
311
+ expected_property_type = "property_#{stub_number}_trigger_#{trigger_number}_type"
312
+ expect(response.body).to(
313
+ match(/#{escape_html("\"#{expected_property_name}\":{\"type\":\"#{expected_property_type}\"")}/)
314
+ )
315
+ end
316
+ end
317
+
318
+ it "returns a response whose body contains the response status of each stub" do
319
+ expect(response.body).to match(/20#{stub_number}/)
320
+ end
321
+
322
+ it "returns a response whose body contains the response status of each stub trigger" do
323
+ (1..3).each do |trigger_number|
324
+ expect(response.body).to match(/30#{stub_number * trigger_number}/)
325
+ end
326
+ end
327
+
328
+ it "returns a response whose body contains the response headers of each stub" do
329
+ expected_header_key = "response_header_#{stub_number}"
330
+ expected_header_value = "response_header_value_#{stub_number}"
331
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
332
+ end
333
+
334
+ it "returns a response whose body contains the response headers of each stub trigger" do
335
+ (1..3).each do |trigger_number|
336
+ expected_header_key = "response_header_#{stub_number}_trigger_#{trigger_number}"
337
+ expected_header_value = "response_header_value_#{stub_number}_trigger_#{trigger_number}"
338
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
339
+ end
340
+ end
341
+
342
+ it "returns a response whose body supports JSON responses" do
343
+ expect(response.body).to match(/#{escape_html({ "key" => "JSON body" }.to_json)}/)
344
+ end if stub_number == 1
345
+
346
+ it "returns a response whose body supports HTML responses" do
347
+ expect(response.body).to match(/#{escape_html("<html><body>HTML body</body></html>")}/)
348
+ end if stub_number == 2
349
+
350
+ it "returns a response whose body supports file responses" do
351
+ file_link = response_document.css("a.file").first
352
+ expect(file_link["href"]).to match(/^file:\/\/[^']+\.pdf$/)
353
+ end if stub_number == 3
354
+
355
+ it "returns a response whose body contains the response body of each stub trigger" do
356
+ (1..3).each do |trigger_number|
357
+ expect(response.body).to match(/Body of scenario stub #{stub_number}_trigger_#{trigger_number}/)
358
+ end
359
+ end
360
+
361
+ it "returns a response whose body contains the response delay of each stub" do
362
+ expect(response.body).to include("#{8 * stub_number}")
363
+ end
364
+
365
+ it "returns a response whose body contains the response delay of each stub trigger" do
366
+ (1..3).each do |trigger_number|
367
+ expect(response.body).to include("#{3 * stub_number * trigger_number}")
368
+ end
369
+ end
370
+
211
371
  end
212
- end
213
372
 
214
- include_context "the response contains HTML describing the configurers stubs"
373
+ end
215
374
 
216
375
  end
217
376