http_stub 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +8 -8
  2. data/lib/http_stub/configurer/request/http/factory.rb +9 -16
  3. data/lib/http_stub/configurer/request/http/multipart.rb +6 -3
  4. data/lib/http_stub/configurer/server/facade.rb +7 -7
  5. data/lib/http_stub/rake/server_tasks.rb +2 -2
  6. data/lib/http_stub/server/application.rb +14 -10
  7. data/lib/http_stub/server/stub/stub.rb +1 -1
  8. data/lib/http_stub/server/views/{_stub_file_response.haml → _file_response.haml} +0 -0
  9. data/lib/http_stub/server/views/_match.haml +7 -14
  10. data/lib/http_stub/server/views/_request.haml +16 -0
  11. data/lib/http_stub/server/views/_response.haml +9 -0
  12. data/lib/http_stub/server/views/_stub.haml +9 -25
  13. data/lib/http_stub/server/views/{_stub_text_response.haml → _text_response.haml} +0 -0
  14. data/lib/http_stub/server/views/favicon.ico +0 -0
  15. data/lib/http_stub/server/views/layout.haml +4 -3
  16. data/lib/http_stub/version.rb +1 -1
  17. data/spec/acceptance/stub_match_spec.rb +64 -31
  18. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +21 -67
  19. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +18 -7
  20. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +1 -1
  21. data/spec/lib/http_stub/configurer/server/facade_spec.rb +25 -19
  22. data/spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb +1 -1
  23. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +1 -1
  24. data/spec/lib/http_stub/server/application_integration_spec.rb +4 -4
  25. data/spec/lib/http_stub/server/application_spec.rb +10 -10
  26. data/spec/lib/http_stub/server/stub/stub_spec.rb +2 -2
  27. data/spec/spec_helper.rb +3 -1
  28. metadata +21 -4
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzEzZTE3NjYzODQyZTFjMTU1NzdjNDk1YmE3MDBmYWVlYjQzNTRlMQ==
4
+ NDhkNDZhYjNiNzIwYTk3N2YwNmVkODE5ZDM4MmYzYWM2NmI3OTg5Mw==
5
5
  data.tar.gz: !binary |-
6
- YzI4MjA5ZjI5NzI1NmYyNDEzMGI4OWM0MDhmYjg5NTcyNGJlNTk3NQ==
6
+ MzZiOTc1Mjc1YzU1OWVmMGI3YTRkYmE0NTZlOWU5ZGU0MDEyOTJlMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODkwODg5NzU4Yzk0MjdhZjJlMmE1Nzg5ZjFmMmRlZGM2MmI4ZmZlZWJmZTE2
10
- MzViMTBmMmY1NWE4MGMxOTBiOWMwYmExMTVmNDQ5ZWM5NzQyMWU1MjA1YzAw
11
- MjlkMDBjYTJjNDI0NDRmNTgzMDhkYzU4ODI3OTEwMDYyOGY4MjA=
9
+ YWZiMWI1NzkxMTc2NWJhOGQ5ZjNmOTJmMjE5OGI2MzcxYzU0NWY4NGNkYjM2
10
+ Mzk1N2RiMjE0MzdmOWI3YWRmYzZkNmE2ODkxMGU4OWJiYTNkNjYyMDAwZTc0
11
+ OTNkNWNmNTg3NGNjYWIyYzUwYjI1MGIwYzhlOGNjMWI2YWE5MWU=
12
12
  data.tar.gz: !binary |-
13
- ODk0MTQ5YmNjN2I0YjZkYmRjZDc0ZDU2NWNlMWUzZTU3NGRhMmRjOTZkMDUy
14
- NjEwYzIzZGNiMDg4MTMxMDc0N2RjOTIwNDY4OTcwMjRmMThhMjk0NzNlYmY4
15
- ZTUxOWIyMTAyODY5NDIxMWIxNTdhZThhNzM0MWM5NzQyNzFjNGY=
13
+ MTI0MGY5NDNmNTczMjczMmQxNWYyZTlhODRjZDZjMGE1Mzc4MWUyNmNmMDlh
14
+ YzVlNDk3NDVhMTQxZDI0MzQ4YzkzYThmYjU0ZjEzMjU1MzAxMDA5NmU5ZjJk
15
+ MmVkNDU1MDRjZjJiZmFhNWJmN2Y0Y2RkYTI4OTVlYTRkMGU4MzM=
@@ -7,35 +7,28 @@ module HttpStub
7
7
 
8
8
  class << self
9
9
 
10
- def stub(model)
11
- HttpStub::Configurer::Request::Http::Multipart.new("/stubs", model)
12
- end
13
-
14
- def scenario(model)
15
- HttpStub::Configurer::Request::Http::Multipart.new("/stubs/scenarios", model)
16
- end
17
-
18
- alias_method :stub_activator, :scenario
19
-
20
- def activate(uri)
21
- get(uri.start_with?("/") ? uri : "/#{uri}")
10
+ def multipart(model)
11
+ HttpStub::Configurer::Request::Http::Multipart.new(model)
22
12
  end
23
13
 
24
14
  def get(path)
25
- to_basic_request(Net::HTTP::Get.new(path))
15
+ create_basic_request(:get, path.start_with?("/") ? path : "/#{path}")
26
16
  end
27
17
 
28
18
  def post(path)
29
- to_basic_request(Net::HTTP::Post.new(path).tap { |request| request.body = "" })
19
+ create_basic_request(:post, path) { |http_request| http_request.body = "" }
30
20
  end
31
21
 
32
22
  def delete(path)
33
- to_basic_request(Net::HTTP::Delete.new(path))
23
+ create_basic_request(:delete, path)
34
24
  end
35
25
 
36
26
  private
37
27
 
38
- def to_basic_request(http_request)
28
+ def create_basic_request(request_method, path, &block)
29
+ http_request_class = Net::HTTP.const_get(request_method.to_s.capitalize)
30
+ http_request = http_request_class.new(path)
31
+ block.call(http_request) if block_given?
39
32
  HttpStub::Configurer::Request::Http::Basic.new(http_request)
40
33
  end
41
34
 
@@ -5,17 +5,20 @@ module HttpStub
5
5
 
6
6
  class Multipart
7
7
 
8
- def initialize(path, model)
9
- @path = path
8
+ def initialize(model)
10
9
  @model = model
11
10
  end
12
11
 
13
12
  def to_http_request
14
- Net::HTTP::Post::Multipart.new(@path, parameters)
13
+ Net::HTTP::Post::Multipart.new(path, parameters)
15
14
  end
16
15
 
17
16
  private
18
17
 
18
+ def path
19
+ "/http_stub/#{@model.class.name.demodulize.pluralize.underscore}"
20
+ end
21
+
19
22
  def parameters
20
23
  { payload: @model.payload.to_json }.tap do |parameters|
21
24
  @model.response_files.each do |response_file|
@@ -10,48 +10,48 @@ module HttpStub
10
10
 
11
11
  def stub_response(model)
12
12
  @request_processor.submit(
13
- request: HttpStub::Configurer::Request::Http::Factory.stub(model),
13
+ request: HttpStub::Configurer::Request::Http::Factory.multipart(model),
14
14
  description: "stubbing '#{model}'"
15
15
  )
16
16
  end
17
17
 
18
18
  def define_scenario(model)
19
19
  @request_processor.submit(
20
- request: HttpStub::Configurer::Request::Http::Factory.scenario(model),
20
+ request: HttpStub::Configurer::Request::Http::Factory.multipart(model),
21
21
  description: "registering scenario '#{model}'"
22
22
  )
23
23
  end
24
24
 
25
25
  def activate(uri)
26
26
  @request_processor.submit(
27
- request: HttpStub::Configurer::Request::Http::Factory.activate(uri),
27
+ request: HttpStub::Configurer::Request::Http::Factory.get(uri),
28
28
  description: "activating '#{uri}'"
29
29
  )
30
30
  end
31
31
 
32
32
  def remember_stubs
33
33
  @request_processor.submit(
34
- request: HttpStub::Configurer::Request::Http::Factory.post("/stubs/memory"),
34
+ request: HttpStub::Configurer::Request::Http::Factory.post("/http_stub/stubs/memory"),
35
35
  description: "committing stubs to memory"
36
36
  )
37
37
  end
38
38
 
39
39
  def recall_stubs
40
40
  @request_processor.submit(
41
- request: HttpStub::Configurer::Request::Http::Factory.get("/stubs/memory"),
41
+ request: HttpStub::Configurer::Request::Http::Factory.get("/http_stub/stubs/memory"),
42
42
  description: "recalling stubs in memory"
43
43
  )
44
44
  end
45
45
 
46
46
  def clear_stubs
47
47
  @request_processor.submit(
48
- request: HttpStub::Configurer::Request::Http::Factory.delete("/stubs"),
48
+ request: HttpStub::Configurer::Request::Http::Factory.delete("/http_stub/stubs"),
49
49
  description: "clearing stubs")
50
50
  end
51
51
 
52
52
  def clear_scenarios
53
53
  @request_processor.submit(
54
- request: HttpStub::Configurer::Request::Http::Factory.delete("/stubs/scenarios"),
54
+ request: HttpStub::Configurer::Request::Http::Factory.delete("/http_stub/scenarios"),
55
55
  description: "clearing scenarios"
56
56
  )
57
57
  end
@@ -14,7 +14,7 @@ module HttpStub
14
14
 
15
15
  def define_start_task(args)
16
16
  namespace :start do
17
- desc "Starts stub #{args[:name]} in the foreground"
17
+ desc "Start stub #{args[:name]} in the foreground"
18
18
  task(:foreground) do
19
19
  HttpStub::Server::Application.instance_eval do
20
20
  set :environment, :test
@@ -26,7 +26,7 @@ module HttpStub
26
26
  end
27
27
 
28
28
  def define_initialize_task(args)
29
- desc "Configures stub #{args[:name]}"
29
+ desc "Configure stub #{args[:name]}"
30
30
  task(:configure) { args[:configurer].initialize! }
31
31
  end
32
32
 
@@ -33,49 +33,49 @@ module HttpStub
33
33
 
34
34
  public
35
35
 
36
- post "/stubs" do
36
+ post "/http_stub/stubs" do
37
37
  response = @stub_controller.register(@http_stub_request, logger)
38
38
  @response_pipeline.process(response)
39
39
  end
40
40
 
41
- get "/stubs" do
41
+ get "/http_stub/stubs" do
42
42
  haml :stubs, {}, stubs: @stub_registry.all
43
43
  end
44
44
 
45
- delete "/stubs" do
45
+ delete "/http_stub/stubs" do
46
46
  @stub_controller.clear(logger)
47
47
  halt 200, "OK"
48
48
  end
49
49
 
50
- post "/stubs/memory" do
50
+ post "/http_stub/stubs/memory" do
51
51
  @stub_registry.remember
52
52
  halt 200, "OK"
53
53
  end
54
54
 
55
- get "/stubs/memory" do
55
+ get "/http_stub/stubs/memory" do
56
56
  @stub_registry.recall
57
57
  halt 200, "OK"
58
58
  end
59
59
 
60
- get "/stubs/matches" do
60
+ get "/http_stub/stubs/matches" do
61
61
  haml :matches, {}, matches: @match_registry.all
62
62
  end
63
63
 
64
- post "/stubs/scenarios" do
64
+ post "/http_stub/scenarios" do
65
65
  response = @scenario_controller.register(@http_stub_request, logger)
66
66
  @response_pipeline.process(response)
67
67
  end
68
68
 
69
- get "/stubs/scenarios" do
69
+ get "/http_stub/scenarios" do
70
70
  haml :scenarios, {}, scenarios: @scenario_registry.all.sort_by(&:uri)
71
71
  end
72
72
 
73
- delete "/stubs/scenarios" do
73
+ delete "/http_stub/scenarios" do
74
74
  @scenario_controller.clear(logger)
75
75
  halt 200, "OK"
76
76
  end
77
77
 
78
- get "/stubs/:id" do
78
+ get "/http_stub/stubs/:id" do
79
79
  haml :stub, {}, the_stub: @stub_registry.find(params[:id], logger)
80
80
  end
81
81
 
@@ -83,6 +83,10 @@ module HttpStub
83
83
  sass :application
84
84
  end
85
85
 
86
+ get "/favicon.ico" do
87
+ send_file File.expand_path("../views/favicon.ico", __FILE__)
88
+ end
89
+
86
90
  any_request_type(//) do
87
91
  response = @request_pipeline.process(@http_stub_request, logger)
88
92
  @response_pipeline.process(response)
@@ -15,7 +15,7 @@ module HttpStub
15
15
  @body = HttpStub::Server::Stub::Match::Rule::Body.create(args["body"])
16
16
  @response = HttpStub::Server::Stub::Response.create(args["response"])
17
17
  @triggers = HttpStub::Server::Stub::Triggers.new(args["triggers"])
18
- @stub_uri = "/stubs/#{@id}"
18
+ @stub_uri = "/http_stub/stubs/#{@id}"
19
19
  @description = args.to_s
20
20
  end
21
21
 
@@ -1,19 +1,12 @@
1
- %table
1
+ %table{ class: :match }
2
2
  %tr
3
- %td URI:
4
- %td=h(match.request.uri)
3
+ %td Request:
4
+ %td= partial :request, locals: { request: match.request }
5
5
  %tr
6
- %td Method:
7
- %td=match.request.method
8
- %tr
9
- %td Headers:
10
- %td=h(match.request.headers)
11
- %tr
12
- %td Parameters:
13
- %td=h(match.request.parameters)
14
- %tr
15
- %td Body:
16
- %td=h(match.request.body)
6
+ %td Response:
7
+ %td
8
+ %table{ class: :response }
9
+ = partial :response, locals: { response: match.stub.response }
17
10
  %tr
18
11
  %td Matched Stub:
19
12
  %td
@@ -0,0 +1,16 @@
1
+ %table
2
+ %tr
3
+ %td URI:
4
+ %td=h(request.uri)
5
+ %tr
6
+ %td Method:
7
+ %td=request.method
8
+ %tr
9
+ %td Headers:
10
+ %td=h(request.headers)
11
+ %tr
12
+ %td Parameters:
13
+ %td=h(request.parameters)
14
+ %tr
15
+ %td Body:
16
+ %td=h(request.body)
@@ -0,0 +1,9 @@
1
+ %tr
2
+ %td Status:
3
+ %td=response.status
4
+ %tr
5
+ %td Headers:
6
+ %td=h(response.headers)
7
+ %tr
8
+ %td Body:
9
+ %td=partial "#{response.type}_response".to_sym, locals: { response: response }
@@ -1,31 +1,15 @@
1
1
  %table
2
2
  %tr
3
- %td URI:
4
- %td=h(the_stub.uri)
3
+ %td Request:
4
+ %td=partial :request, locals: { request: the_stub }
5
5
  %tr
6
- %td Method:
7
- %td=the_stub.method
8
- %tr
9
- %td Headers:
10
- %td=h(the_stub.headers)
11
- %tr
12
- %td Parameters:
13
- %td=h(the_stub.parameters)
14
- %tr
15
- %td Body:
16
- %td=h(the_stub.body)
17
- %tr
18
- %td Response Status:
19
- %td=the_stub.response.status
20
- %tr
21
- %td Response Headers:
22
- %td=h(the_stub.response.headers)
23
- %tr
24
- %td Response Body:
25
- %td=partial "stub_#{the_stub.response.type}_response".to_sym, locals: { response: the_stub.response }
26
- %tr
27
- %td Response Delay:
28
- %td=h(the_stub.response.delay_in_seconds)
6
+ %td Response:
7
+ %td
8
+ %table
9
+ =partial :response, locals: { response: the_stub.response }
10
+ %tr
11
+ %td Delay:
12
+ %td=h(the_stub.response.delay_in_seconds)
29
13
  %tr
30
14
  %td Triggers:
31
15
  %td
@@ -1,7 +1,8 @@
1
1
  !!!
2
2
  %html
3
3
  %head
4
- %title http_stub server configuration
5
- %link{ "rel" => "stylesheet", "href" => "/application.css", "type" => "text/css" }
4
+ %link{ rel: "stylesheet", href: "/application.css", type: "text/css" }
5
+ %link{ rel: "icon", href: "/favicon.ico", type: "image/x-icon" }
6
+ %title http_stub server diagnostics
6
7
  %body
7
- =yield
8
+ =yield
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.20.0".freeze
2
+ VERSION = "0.21.0".freeze
3
3
  end
@@ -5,23 +5,46 @@ describe "Stub match acceptance" do
5
5
 
6
6
  after(:example) { configurer.clear_stubs! }
7
7
 
8
- describe "GET /stubs/matches" do
8
+ describe "GET /http_stub/stubs/matches" do
9
9
 
10
- let(:uri) { "/some/uri" }
11
- let(:request_method) { :get }
12
- let(:headers) do
13
- (1..3).reduce({}) { |result, i| result.tap { result["header_#{i}"] = "header value #{i}" } }
10
+ let(:request_uri) { "/some/uri" }
11
+ let(:request_method) { :get }
12
+ let(:request_headers) do
13
+ (1..3).reduce({}) { |result, i| result.tap { result["request_header_#{i}"] = "request header value #{i}" } }
14
14
  end
15
- let(:parameters) { {} }
16
- let(:body) { nil }
15
+ let(:request_parameters) { {} }
16
+ let(:request_body) { nil }
17
17
 
18
- let(:response) { HTTParty.get("#{server_uri}/stubs/matches") }
18
+ let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs/matches") }
19
19
  let(:response_document) { Nokogiri::HTML(response.body) }
20
20
 
21
+ shared_context "registers a stub" do
22
+
23
+ let(:stub_response_status) { 203 }
24
+ let(:stub_response_headers) do
25
+ (1..3).reduce({}) { |result, i| result.tap { result["response_header_#{i}"] = "response header value #{i}" } }
26
+ end
27
+ let(:stub_response_body) { "Stub response body" }
28
+
29
+ def register_stub
30
+ @register_stub_response = stub_server.add_stub!(build_stub)
31
+ end
32
+
33
+ def build_stub
34
+ stub_server.build_stub do |stub|
35
+ stub.match_requests(uri: request_uri, method: request_method,
36
+ headers: request_headers, parameters: request_parameters, body: request_body)
37
+ stub.respond_with(status: stub_response_status, headers: stub_response_headers, body: stub_response_body)
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
21
44
  shared_context "behaviours of a request that is recorded in the stub match log" do
22
45
 
23
46
  it "returns a response body that contains the uri of the request" do
24
- expect(response.body).to match(/#{escape_html(uri)}/)
47
+ expect(response.body).to match(/#{escape_html(request_uri)}/)
25
48
  end
26
49
 
27
50
  it "returns a response body that contains the method of the request" do
@@ -29,51 +52,55 @@ describe "Stub match acceptance" do
29
52
  end
30
53
 
31
54
  it "returns a response body that contains the headers of the request whose names are in uppercase" do
32
- headers.each do |expected_header_key, expected_header_value|
55
+ request_headers.each do |expected_header_key, expected_header_value|
33
56
  expect(response.body).to match(/#{expected_header_key.upcase}:#{expected_header_value}/)
34
57
  end
35
58
  end
36
59
 
37
60
  context "when the request contains parameters" do
38
61
 
39
- let(:parameters) do
62
+ let(:request_parameters) do
40
63
  (1..3).reduce({}) { |result, i| result.tap { result["parameter_#{i}"] = "parameter value #{i}" } }
41
64
  end
42
65
 
43
66
  it "returns a response body that contain the parameters" do
44
- parameters.each do |expected_parameter_key, expected_parameter_value|
67
+ request_parameters.each do |expected_parameter_key, expected_parameter_value|
45
68
  expect(response.body).to match(/#{expected_parameter_key}=#{expected_parameter_value}/)
46
69
  end
47
70
  end
48
71
 
49
72
  def issue_request
50
- HTTParty.send(request_method, "#{server_uri}#{uri}", headers: headers, query: parameters)
73
+ HTTParty.send(
74
+ request_method, "#{server_uri}#{request_uri}", headers: request_headers, query: request_parameters
75
+ )
51
76
  end
52
77
 
53
78
  end
54
79
 
55
80
  context "when the request contains a body" do
56
81
 
57
- let(:body) { "Some <strong>request body</strong>" }
82
+ let(:request_body) { "Some <strong>request body</strong>" }
58
83
 
59
84
  it "returns a response body that contains the body" do
60
- expect(response.body).to match(/#{escape_html(body)}/)
85
+ expect(response.body).to match(/#{escape_html(request_body)}/)
61
86
  end
62
87
 
63
88
  def issue_request
64
- HTTParty.send(request_method, "#{server_uri}#{uri}", headers: headers, body: body)
89
+ HTTParty.send(request_method, "#{server_uri}#{request_uri}", headers: request_headers, body: request_body)
65
90
  end
66
91
 
67
92
  end
68
93
 
69
94
  def issue_request
70
- HTTParty.send(request_method, "#{server_uri}#{uri}", headers: headers)
95
+ HTTParty.send(request_method, "#{server_uri}#{request_uri}", headers: request_headers)
71
96
  end
72
97
 
73
98
  end
74
99
 
75
100
  context "when a request has been made matching a stub" do
76
101
 
102
+ include_context "registers a stub"
103
+
77
104
  before(:example) do
78
105
  register_stub
79
106
 
@@ -82,6 +109,20 @@ describe "Stub match acceptance" do
82
109
 
83
110
  include_context "behaviours of a request that is recorded in the stub match log"
84
111
 
112
+ it "returns a response body that contains stub response status" do
113
+ expect(response.body).to match(/#{escape_html(stub_response_status)}/)
114
+ end
115
+
116
+ it "returns a response body that contains stub response headers" do
117
+ stub_response_headers.each do |expected_header_key, expected_header_value|
118
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
119
+ end
120
+ end
121
+
122
+ it "returns a response body that contains stub response body" do
123
+ expect(response.body).to match(/#{escape_html(stub_response_body)}/)
124
+ end
125
+
85
126
  it "returns a response body that contains a link to the matched stub" do
86
127
  stub_link = response_document.css("a.stub").first
87
128
  expect(full_stub_uri).to end_with(stub_link["href"])
@@ -103,20 +144,24 @@ describe "Stub match acceptance" do
103
144
 
104
145
  context "when a request has been made configuring a stub" do
105
146
 
147
+ include_context "registers a stub"
148
+
106
149
  before(:example) { register_stub }
107
150
 
108
151
  it "should not be recorded in the stub request log" do
109
- expect(response.body).to_not match(/#{uri}/)
152
+ expect(response.body).to_not match(/#{request_uri}/)
110
153
  end
111
154
 
112
155
  end
113
156
 
114
157
  context "when a request has been made configuring a scenarios" do
115
158
 
159
+ include_context "registers a stub"
160
+
116
161
  before(:example) { register_scenario }
117
162
 
118
163
  it "should not be recorded in the stub request log" do
119
- expect(response.body).to_not match(/#{uri}/)
164
+ expect(response.body).to_not match(/#{request_uri}/)
120
165
  end
121
166
 
122
167
  def register_scenario
@@ -125,18 +170,6 @@ describe "Stub match acceptance" do
125
170
 
126
171
  end
127
172
 
128
- def register_stub
129
- @register_stub_response = stub_server.add_stub!(build_stub)
130
- end
131
-
132
- def build_stub
133
- stub_server.build_stub do |stub|
134
- stub.match_requests(uri: uri, method: request_method, headers: headers, parameters: parameters, body: body)
135
- stub.respond_with(status: 200, body: "Some body")
136
- end
137
-
138
- end
139
-
140
173
  end
141
174
 
142
175
  end
@@ -1,18 +1,18 @@
1
1
  describe HttpStub::Configurer::Request::Http::Factory do
2
2
 
3
- describe "::stub" do
3
+ describe "::multipart" do
4
4
 
5
- let(:model) { instance_double(HttpStub::Configurer::Request::Stub) }
5
+ let(:model) { double("HttpStub::Configurer::Request::SomeModel") }
6
6
  let(:multipart_request) { instance_double(HttpStub::Configurer::Request::Http::Multipart) }
7
7
 
8
- subject { HttpStub::Configurer::Request::Http::Factory.stub(model) }
8
+ subject { HttpStub::Configurer::Request::Http::Factory.multipart(model) }
9
9
 
10
10
  before(:example) do
11
11
  allow(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).and_return(multipart_request)
12
12
  end
13
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)
14
+ it "creates a multipart request with the provided model" do
15
+ expect(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).with(model)
16
16
 
17
17
  subject
18
18
  end
@@ -23,89 +23,43 @@ describe HttpStub::Configurer::Request::Http::Factory do
23
23
 
24
24
  end
25
25
 
26
- describe "::scenario" do
27
-
28
- let(:model) { instance_double(HttpStub::Configurer::Request::Scenario) }
29
- let(:multipart_request) { instance_double(HttpStub::Configurer::Request::Http::Multipart) }
30
-
31
- subject { HttpStub::Configurer::Request::Http::Factory.scenario(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 scenarios endpoint with the provided model" do
38
- expect(HttpStub::Configurer::Request::Http::Multipart).to receive(:new).with("/stubs/scenarios", 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 "::activate" do
26
+ describe "::get" do
50
27
 
51
- let(:uri) { "some/activate/uri" }
28
+ let(:path) { "some/get/path" }
29
+ let(:get_request) { instance_double(Net::HTTP::Get) }
52
30
  let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
53
31
 
54
- subject { HttpStub::Configurer::Request::Http::Factory.activate(uri) }
32
+ subject { HttpStub::Configurer::Request::Http::Factory.get(path) }
55
33
 
56
34
  before(:example) do
57
- allow(HttpStub::Configurer::Request::Http::Factory).to receive(:get).and_return(basic_request)
35
+ allow(Net::HTTP::Get).to receive(:new).and_return(get_request)
36
+ allow(HttpStub::Configurer::Request::Http::Basic).to receive(:new).and_return(basic_request)
58
37
  end
59
38
 
60
- context "when the uri is not prefixed with '/'" do
39
+ context "when the path is absolute" do
61
40
 
62
- let(:uri) { "uri/not/prefixed/with/forward/slash" }
41
+ let(:path) { "/some/absolute/get/path" }
63
42
 
64
- it "creates a get request with the uri prefixed with '/'" do
65
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:get).with("/#{uri}")
43
+ it "creates a GET request with the provided path" do
44
+ expect(Net::HTTP::Get).to receive(:new).with(path)
66
45
 
67
46
  subject
68
47
  end
69
48
 
70
49
  end
71
50
 
72
- context "when the uri is prefixed with '/'" do
51
+ context "when the path is relative" do
73
52
 
74
- let(:uri) { "/uri/prefixed/with/forward/slash" }
53
+ let(:path) { "some/relative/get/path" }
75
54
 
76
- it "creates a get request with the provided uri" do
77
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:get).with(uri)
55
+ it "creates a GET request with the path prefixed by '/'" do
56
+ expect(Net::HTTP::Get).to receive(:new).with("/#{path}")
78
57
 
79
58
  subject
80
59
  end
81
60
 
82
61
  end
83
62
 
84
- it "returns the created request" do
85
- expect(subject).to eql(basic_request)
86
- end
87
-
88
- end
89
-
90
- describe "::get" do
91
-
92
- let(:path) { "some/get/path" }
93
- let(:get_request) { instance_double(Net::HTTP::Get) }
94
- let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
95
-
96
- subject { HttpStub::Configurer::Request::Http::Factory.get(path) }
97
-
98
- before(:example) do
99
- allow(Net::HTTP::Get).to receive(:new).and_return(get_request)
100
- allow(HttpStub::Configurer::Request::Http::Basic).to receive(:new).and_return(basic_request)
101
- end
102
-
103
- it "creates a GET request with the provided path" do
104
- expect(Net::HTTP::Get).to receive(:new).with(path)
105
-
106
- subject
107
- end
108
-
109
63
  it "creates a basic request wrapping the GET request" do
110
64
  expect(HttpStub::Configurer::Request::Http::Basic).to receive(:new).with(get_request)
111
65
 
@@ -120,7 +74,7 @@ describe HttpStub::Configurer::Request::Http::Factory do
120
74
 
121
75
  describe "::post" do
122
76
 
123
- let(:path) { "some/post/path" }
77
+ let(:path) { "/some/post/path" }
124
78
  let(:post_request) { instance_double(Net::HTTP::Post).as_null_object }
125
79
  let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
126
80
 
@@ -157,7 +111,7 @@ describe HttpStub::Configurer::Request::Http::Factory do
157
111
 
158
112
  describe "::delete" do
159
113
 
160
- let(:path) { "some/get/path" }
114
+ let(:path) { "/some/delete/path" }
161
115
  let(:delete_request) { instance_double(Net::HTTP::Delete) }
162
116
  let(:basic_request) { instance_double(HttpStub::Configurer::Request::Http::Basic) }
163
117
 
@@ -1,10 +1,21 @@
1
1
  describe HttpStub::Configurer::Request::Http::Multipart do
2
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) }
3
+ class HttpStub::Configurer::Request::SomeModel
4
+
5
+ attr_reader :payload, :response_files
6
+
7
+ def initialize(args)
8
+ @payload = args[:payload]
9
+ @response_files = args[:response_files]
10
+ end
11
+
12
+ end
13
+
14
+ let(:payload) { { key: "value" } }
15
+ let(:response_files) { [] }
16
+ let(:model) { HttpStub::Configurer::Request::SomeModel.new(payload: payload, response_files: response_files) }
17
+
18
+ let(:multipart_request) { HttpStub::Configurer::Request::Http::Multipart.new(model) }
8
19
 
9
20
  describe "#to_http_request" do
10
21
 
@@ -23,8 +34,8 @@ describe HttpStub::Configurer::Request::Http::Multipart do
23
34
  expect(subject).to eql(http_multipart_request)
24
35
  end
25
36
 
26
- it "creates a HTTP request with the provided path" do
27
- expect(Net::HTTP::Post::Multipart).to receive(:new).with(path, anything)
37
+ it "creates a HTTP request with a path to the pluralized name for the model" do
38
+ expect(Net::HTTP::Post::Multipart).to receive(:new).with("/http_stub/some_models", anything)
28
39
 
29
40
  subject
30
41
  end
@@ -22,7 +22,7 @@ describe HttpStub::Configurer::Server::CommandProcessor do
22
22
 
23
23
  describe "and the server responds with a 200 response" do
24
24
 
25
- let(:request) { create_get_request("/stubs") }
25
+ let(:request) { create_get_request("/http_stub/stubs") }
26
26
 
27
27
  it "executes without error" do
28
28
  expect { subject }.not_to raise_error
@@ -29,16 +29,16 @@ describe HttpStub::Configurer::Server::Facade do
29
29
 
30
30
  before(:example) do
31
31
  allow(request_processor).to receive(:submit)
32
- allow(HttpStub::Configurer::Request::Http::Factory).to receive(:stub).and_return(request)
32
+ allow(HttpStub::Configurer::Request::Http::Factory).to receive(:multipart).and_return(request)
33
33
  end
34
34
 
35
- it "creates a stub request with the provided model" do
36
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:stub).with(model)
35
+ it "creates a multipart request with the provided model" do
36
+ expect(HttpStub::Configurer::Request::Http::Factory).to receive(:multipart).with(model)
37
37
 
38
38
  subject
39
39
  end
40
40
 
41
- it "submits the stub request via the request processor" do
41
+ it "submits the request via the request processor" do
42
42
  expect(request_processor).to receive(:submit).with(hash_including(request: request))
43
43
 
44
44
  subject
@@ -62,16 +62,16 @@ describe HttpStub::Configurer::Server::Facade do
62
62
 
63
63
  before(:example) do
64
64
  allow(request_processor).to receive(:submit)
65
- allow(HttpStub::Configurer::Request::Http::Factory).to receive(:scenario).and_return(request)
65
+ allow(HttpStub::Configurer::Request::Http::Factory).to receive(:multipart).and_return(request)
66
66
  end
67
67
 
68
- it "creates a scenario request with the provided model" do
69
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:scenario).with(model)
68
+ it "creates a multipart request with the provided model" do
69
+ expect(HttpStub::Configurer::Request::Http::Factory).to receive(:multipart).with(model)
70
70
 
71
71
  subject
72
72
  end
73
73
 
74
- it "submits the scenario request via the request processor" do
74
+ it "submits the request via the request processor" do
75
75
  expect(request_processor).to receive(:submit).with(hash_including(request: request))
76
76
 
77
77
  subject
@@ -95,12 +95,12 @@ describe HttpStub::Configurer::Server::Facade do
95
95
  subject { facade.activate(uri) }
96
96
 
97
97
  before(:example) do
98
- allow(HttpStub::Configurer::Request::Http::Factory).to receive(:activate).and_return(request)
98
+ allow(HttpStub::Configurer::Request::Http::Factory).to receive(:get).and_return(request)
99
99
  allow(request_processor).to receive(:submit)
100
100
  end
101
101
 
102
- it "creates an activation request for the uri" do
103
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:activate).with(uri).and_return(request)
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)
104
104
 
105
105
  subject
106
106
  end
@@ -130,8 +130,10 @@ describe HttpStub::Configurer::Server::Facade do
130
130
  allow(request_processor).to receive(:submit)
131
131
  end
132
132
 
133
- it "creates a POST request for /stubs/memory endpoint" do
134
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:post).with("/stubs/memory").and_return(request)
133
+ it "creates a POST request for the /http_stub/stubs/memory endpoint" do
134
+ expect(HttpStub::Configurer::Request::Http::Factory).to(
135
+ receive(:post).with("/http_stub/stubs/memory").and_return(request)
136
+ )
135
137
 
136
138
  subject
137
139
  end
@@ -161,8 +163,10 @@ describe HttpStub::Configurer::Server::Facade do
161
163
  allow(request_processor).to receive(:submit)
162
164
  end
163
165
 
164
- it "creates a GET request for /stubs/memory endpoint" do
165
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:get).with("/stubs/memory").and_return(request)
166
+ it "creates a GET request for the /http_stub/stubs/memory endpoint" do
167
+ expect(HttpStub::Configurer::Request::Http::Factory).to(
168
+ receive(:get).with("/http_stub/stubs/memory").and_return(request)
169
+ )
166
170
 
167
171
  subject
168
172
  end
@@ -192,8 +196,10 @@ describe HttpStub::Configurer::Server::Facade do
192
196
  allow(request_processor).to receive(:submit)
193
197
  end
194
198
 
195
- it "creates a DELETE request for the /stubs endpoint" do
196
- expect(HttpStub::Configurer::Request::Http::Factory).to receive(:delete).with("/stubs").and_return(request)
199
+ it "creates a DELETE request for the /http_stub/stubs endpoint" do
200
+ expect(HttpStub::Configurer::Request::Http::Factory).to(
201
+ receive(:delete).with("/http_stub/stubs").and_return(request)
202
+ )
197
203
 
198
204
  subject
199
205
  end
@@ -223,9 +229,9 @@ describe HttpStub::Configurer::Server::Facade do
223
229
  allow(request_processor).to receive(:submit)
224
230
  end
225
231
 
226
- it "creates a DELETE request for the /stubs/scenarios endpoint" do
232
+ it "creates a DELETE request for the /http_stub/scenarios endpoint" do
227
233
  expect(HttpStub::Configurer::Request::Http::Factory).to(
228
- receive(:delete).with("/stubs/scenarios").and_return(request)
234
+ receive(:delete).with("/http_stub/scenarios").and_return(request)
229
235
  )
230
236
 
231
237
  subject
@@ -16,7 +16,7 @@ describe HttpStub::Rake::ServerDaemonTasks do
16
16
  end
17
17
 
18
18
  it "starts a stub server that responds to stub requests" do
19
- request = Net::HTTP::Post.new("/stubs")
19
+ request = Net::HTTP::Post.new("/http_stub/stubs")
20
20
  request.body = { response: { status: 302, body: "Some Body" } }.to_json
21
21
 
22
22
  response = Net::HTTP.new("localhost", 8002).start { |http| http.request(request) }
@@ -19,7 +19,7 @@ describe HttpStub::Rake::ServerTasks do
19
19
  after(:example) { wait_until_server_has_stopped }
20
20
 
21
21
  it "starts a stub server that responds to stub requests" do
22
- request = Net::HTTP::Post.new("/stubs")
22
+ request = Net::HTTP::Post.new("/http_stub/stubs")
23
23
  request.body = { "uri" => "/", "response" => { "status" => 302, "body" => "Some Body" } }.to_json
24
24
 
25
25
  response = Net::HTTP.new("localhost", port).start { |http| http.request(request) }
@@ -9,7 +9,7 @@ describe HttpStub::Server::Application, "when the server is running" do
9
9
 
10
10
  let(:response) do
11
11
  HTTParty.post(
12
- "#{server_uri}/stubs",
12
+ "#{server_uri}/http_stub/stubs",
13
13
  body: { uri: "/some/path", method: "get", response: { status: 200, body: "Some body" } }.to_json
14
14
  )
15
15
  end
@@ -183,7 +183,7 @@ describe HttpStub::Server::Application, "when the server is running" do
183
183
 
184
184
  before(:context) { (1..3).each { |i| HTTParty.get("#{server_uri}/scenario_#{i}") } }
185
185
 
186
- let(:response) { HTTParty.get("#{server_uri}/stubs") }
186
+ let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs") }
187
187
 
188
188
  include_context "the response contains HTML describing the configurers stubs"
189
189
 
@@ -191,9 +191,9 @@ describe HttpStub::Server::Application, "when the server is running" do
191
191
 
192
192
  end
193
193
 
194
- describe "GET /stubs/scenarios" do
194
+ describe "GET /http_stub/scenarios" do
195
195
 
196
- let(:response) { HTTParty.get("#{server_uri}/stubs/scenarios") }
196
+ let(:response) { HTTParty.get("#{server_uri}/http_stub/scenarios") }
197
197
 
198
198
  it "returns a response whose body contains links to each scenario in alphabetical order" do
199
199
  expected_scenario_links = %w{ nested_scenario scenario }.map do |scenario_name_prefix|
@@ -31,7 +31,7 @@ describe HttpStub::Server::Application do
31
31
  let(:registration_response) { instance_double(HttpStub::Server::Stub::Response::Base) }
32
32
 
33
33
  subject do
34
- post "/stubs", { uri: "/a_path", method: "a method", response: { status: 200, body: "Foo" } }.to_json
34
+ post "/http_stub/stubs", { uri: "/a_path", method: "a method", response: { status: 200, body: "Foo" } }.to_json
35
35
  end
36
36
 
37
37
  before(:example) { allow(stub_controller).to receive(:register).and_return(registration_response) }
@@ -54,7 +54,7 @@ describe HttpStub::Server::Application do
54
54
 
55
55
  let(:found_stubs) { [ HttpStub::Server::Stub::Empty::INSTANCE ] }
56
56
 
57
- subject { get "/stubs" }
57
+ subject { get "/http_stub/stubs" }
58
58
 
59
59
  it "retrieves the stubs from the registry" do
60
60
  expect(stub_registry).to receive(:all).and_return(found_stubs)
@@ -69,7 +69,7 @@ describe HttpStub::Server::Application do
69
69
  let(:stub_id) { SecureRandom.uuid }
70
70
  let(:found_stub) { HttpStub::Server::Stub::Empty::INSTANCE }
71
71
 
72
- subject { get "/stubs/#{stub_id}" }
72
+ subject { get "/http_stub/stubs/#{stub_id}" }
73
73
 
74
74
  it "retrieves the stub from the registry" do
75
75
  expect(stub_registry).to receive(:find).with(stub_id, anything).and_return(found_stub)
@@ -81,7 +81,7 @@ describe HttpStub::Server::Application do
81
81
 
82
82
  context "when a request to clear the stubs is received" do
83
83
 
84
- subject { delete "/stubs" }
84
+ subject { delete "/http_stub/stubs" }
85
85
 
86
86
  it "delegates clearing to the stub controller" do
87
87
  expect(stub_controller).to receive(:clear)
@@ -99,7 +99,7 @@ describe HttpStub::Server::Application do
99
99
 
100
100
  context "when a request to commit the stubs to memory is received" do
101
101
 
102
- subject { post "/stubs/memory" }
102
+ subject { post "/http_stub/stubs/memory" }
103
103
 
104
104
  it "remembers the stubs in the stub registry" do
105
105
  expect(stub_registry).to receive(:remember)
@@ -117,7 +117,7 @@ describe HttpStub::Server::Application do
117
117
 
118
118
  context "when a request to recall the stubs in memory is received" do
119
119
 
120
- subject { get "/stubs/memory" }
120
+ subject { get "/http_stub/stubs/memory" }
121
121
 
122
122
  it "recalls the stubs remembered by the stub registry" do
123
123
  expect(stub_registry).to receive(:recall)
@@ -137,7 +137,7 @@ describe HttpStub::Server::Application do
137
137
 
138
138
  let(:found_matches) { [ HttpStub::Server::Stub::Match::MatchFixture.empty ] }
139
139
 
140
- subject { get "/stubs/matches" }
140
+ subject { get "/http_stub/stubs/matches" }
141
141
 
142
142
  it "retrieves the matches from the registry" do
143
143
  expect(match_registry).to receive(:all).and_return(found_matches)
@@ -154,7 +154,7 @@ describe HttpStub::Server::Application do
154
154
  before(:example) { allow(scenario_controller).to receive(:register).and_return(registration_response) }
155
155
 
156
156
  subject do
157
- post "/stubs/scenarios",
157
+ post "/http_stub/scenarios",
158
158
  {
159
159
  uri: "/a_scenario_path",
160
160
  stubs: [ { uri: "/a_path", method: "a method", response: { status: 200, body: "Foo" } } ],
@@ -180,7 +180,7 @@ describe HttpStub::Server::Application do
180
180
 
181
181
  let(:found_scenarios) { [ HttpStub::Server::Scenario::ScenarioFixture.empty ] }
182
182
 
183
- subject { get "/stubs/scenarios" }
183
+ subject { get "/http_stub/scenarios" }
184
184
 
185
185
  it "retrieves the stubs from the registry" do
186
186
  expect(scenario_registry).to receive(:all).and_return(found_scenarios)
@@ -192,7 +192,7 @@ describe HttpStub::Server::Application do
192
192
 
193
193
  context "when a request to clear the scenarios has been received" do
194
194
 
195
- subject { delete "/stubs/scenarios" }
195
+ subject { delete "/http_stub/scenarios" }
196
196
 
197
197
  it "delegates clearing to the scenario controller" do
198
198
  expect(scenario_controller).to receive(:clear)
@@ -266,7 +266,7 @@ describe HttpStub::Server::Stub::Stub do
266
266
  context "when an id is provided in the payload" do
267
267
 
268
268
  it "returns a relative uri to the stub that includes the id" do
269
- expect(the_stub.stub_uri).to eql("/stubs/#{stub_id}")
269
+ expect(the_stub.stub_uri).to eql("/http_stub/stubs/#{stub_id}")
270
270
  end
271
271
 
272
272
  end
@@ -274,7 +274,7 @@ describe HttpStub::Server::Stub::Stub do
274
274
  context "when an id is not provided in the payload" do
275
275
 
276
276
  it "returns a relative uri to the stub that includes a generated id" do
277
- expect(the_stub.stub_uri).to match(/\/stubs\/[a-zA-Z0-9-]+$/)
277
+ expect(the_stub.stub_uri).to match(/\/http_stub\/stubs\/[a-zA-Z0-9-]+$/)
278
278
  end
279
279
 
280
280
  end
data/spec/spec_helper.rb CHANGED
@@ -1,13 +1,15 @@
1
1
  require 'bundler'
2
2
  Bundler.require(:development)
3
3
 
4
+ CodeClimate::TestReporter.start
5
+
4
6
  SimpleCov.start do
5
7
  coverage_dir "tmp/coverage"
6
8
 
7
9
  add_filter "/spec/"
8
10
  add_filter "/vendor/"
9
11
 
10
- minimum_coverage 99.92
12
+ minimum_coverage 99.85
11
13
  refuse_coverage_drop
12
14
  end if ENV["coverage"]
13
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_stub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ueckerman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-03 00:00:00.000000000 Z
12
+ date: 2015-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -263,6 +263,20 @@ dependencies:
263
263
  - - ~>
264
264
  - !ruby/object:Gem::Version
265
265
  version: '0.1'
266
+ - !ruby/object:Gem::Dependency
267
+ name: codeclimate-test-reporter
268
+ requirement: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - ~>
271
+ - !ruby/object:Gem::Version
272
+ version: '0.4'
273
+ type: :development
274
+ prerelease: false
275
+ version_requirements: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ~>
278
+ - !ruby/object:Gem::Version
279
+ version: '0.4'
266
280
  description: fakeweb for a HTTP server, informing it to stub / fake responses
267
281
  email: matthew.ueckerman@myob.com
268
282
  executables: []
@@ -341,12 +355,15 @@ files:
341
355
  - ./lib/http_stub/server/stub/response/text.rb
342
356
  - ./lib/http_stub/server/stub/stub.rb
343
357
  - ./lib/http_stub/server/stub/triggers.rb
358
+ - ./lib/http_stub/server/views/_file_response.haml
344
359
  - ./lib/http_stub/server/views/_match.haml
360
+ - ./lib/http_stub/server/views/_request.haml
361
+ - ./lib/http_stub/server/views/_response.haml
345
362
  - ./lib/http_stub/server/views/_scenario.haml
346
363
  - ./lib/http_stub/server/views/_stub.haml
347
- - ./lib/http_stub/server/views/_stub_file_response.haml
348
- - ./lib/http_stub/server/views/_stub_text_response.haml
364
+ - ./lib/http_stub/server/views/_text_response.haml
349
365
  - ./lib/http_stub/server/views/application.sass
366
+ - ./lib/http_stub/server/views/favicon.ico
350
367
  - ./lib/http_stub/server/views/layout.haml
351
368
  - ./lib/http_stub/server/views/matches.haml
352
369
  - ./lib/http_stub/server/views/scenarios.haml