http_stub 0.20.0 → 0.21.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 (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