http_stub 0.13.5 → 0.14.0.rc1

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub.rb +13 -4
  3. data/lib/http_stub/configurer.rb +9 -63
  4. data/lib/http_stub/configurer/deprecated_dsl.rb +57 -0
  5. data/lib/http_stub/configurer/request/stub.rb +7 -13
  6. data/lib/http_stub/configurer/request/stub_activator.rb +8 -4
  7. data/lib/http_stub/configurer/request/stub_activator_payload_builder.rb +25 -0
  8. data/lib/http_stub/configurer/request/stub_payload_builder.rb +44 -0
  9. data/lib/http_stub/configurer/server/buffered_command_processor.rb +24 -0
  10. data/lib/http_stub/configurer/server/command.rb +18 -0
  11. data/lib/http_stub/configurer/server/command_processor.rb +38 -0
  12. data/lib/http_stub/configurer/server/dsl.rb +56 -0
  13. data/lib/http_stub/configurer/server/facade.rb +57 -0
  14. data/lib/http_stub/configurer/server/request_processor.rb +30 -0
  15. data/lib/http_stub/models/registry.rb +4 -0
  16. data/lib/http_stub/models/stub.rb +2 -1
  17. data/lib/http_stub/models/stub_registry.rb +29 -0
  18. data/lib/http_stub/models/stub_triggers.rb +23 -0
  19. data/lib/http_stub/rake/server_tasks.rb +2 -5
  20. data/lib/http_stub/server.rb +14 -4
  21. data/lib/http_stub/version.rb +1 -1
  22. data/lib/http_stub/views/_stub.haml +7 -0
  23. data/spec/lib/http_stub/configurer/deprecated_dsl_spec.rb +232 -0
  24. data/spec/lib/http_stub/configurer/request/controllable_value_spec.rb +8 -8
  25. data/spec/lib/http_stub/configurer/request/omittable_spec.rb +8 -8
  26. data/spec/lib/http_stub/configurer/request/regexpable_spec.rb +14 -14
  27. data/spec/lib/http_stub/configurer/request/stub_activator_payload_builder_spec.rb +74 -0
  28. data/spec/lib/http_stub/configurer/request/stub_activator_spec.rb +19 -26
  29. data/spec/lib/http_stub/configurer/request/stub_payload_builder_spec.rb +203 -0
  30. data/spec/lib/http_stub/configurer/request/stub_spec.rb +18 -157
  31. data/spec/lib/http_stub/configurer/server/buffered_command_processor_spec.rb +35 -0
  32. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +62 -0
  33. data/spec/lib/http_stub/configurer/server/command_spec.rb +25 -0
  34. data/spec/lib/http_stub/configurer/server/dsl_spec.rb +241 -0
  35. data/spec/lib/http_stub/configurer/server/facade_spec.rb +253 -0
  36. data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +99 -0
  37. data/spec/lib/http_stub/configurer_integration_spec.rb +172 -122
  38. data/spec/lib/http_stub/configurer_spec.rb +4 -4
  39. data/spec/lib/http_stub/controllers/stub_activator_controller_spec.rb +25 -25
  40. data/spec/lib/http_stub/controllers/stub_controller_spec.rb +22 -22
  41. data/spec/lib/http_stub/hash_extensions_spec.rb +24 -24
  42. data/spec/lib/http_stub/models/exact_value_matcher_spec.rb +4 -4
  43. data/spec/lib/http_stub/models/hash_with_string_value_matchers_spec.rb +29 -29
  44. data/spec/lib/http_stub/models/headers_spec.rb +10 -10
  45. data/spec/lib/http_stub/models/omitted_value_matcher_spec.rb +8 -8
  46. data/spec/lib/http_stub/models/regexp_value_matcher_spec.rb +6 -6
  47. data/spec/lib/http_stub/models/registry_spec.rb +71 -28
  48. data/spec/lib/http_stub/models/request_header_parser_spec.rb +4 -4
  49. data/spec/lib/http_stub/models/request_pipeline_spec.rb +2 -2
  50. data/spec/lib/http_stub/models/response_spec.rb +38 -38
  51. data/spec/lib/http_stub/models/string_value_matcher_spec.rb +25 -25
  52. data/spec/lib/http_stub/models/stub_activator_spec.rb +15 -15
  53. data/spec/lib/http_stub/models/stub_headers_spec.rb +18 -18
  54. data/spec/lib/http_stub/models/stub_parameters_spec.rb +16 -16
  55. data/spec/lib/http_stub/models/stub_registry_integration_spec.rb +62 -0
  56. data/spec/lib/http_stub/models/stub_registry_spec.rb +152 -0
  57. data/spec/lib/http_stub/models/stub_spec.rb +67 -43
  58. data/spec/lib/http_stub/models/stub_triggers_spec.rb +64 -0
  59. data/spec/lib/http_stub/models/stub_uri_spec.rb +9 -9
  60. data/spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb +7 -7
  61. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +5 -5
  62. data/spec/lib/http_stub/rake/server_tasks_spec.rb +17 -15
  63. data/spec/lib/http_stub/server_daemon_spec.rb +16 -16
  64. data/spec/lib/http_stub/server_integration_spec.rb +112 -65
  65. data/spec/lib/http_stub/server_spec.rb +134 -96
  66. data/spec/spec_helper.rb +1 -1
  67. data/spec/support/http_stub/configurer/request/stub_payload_builder_shared_context.rb +27 -0
  68. data/spec/support/server_integration.rb +2 -2
  69. metadata +69 -30
  70. data/lib/http_stub/configurer/command.rb +0 -26
  71. data/lib/http_stub/configurer/command_processor.rb +0 -36
  72. data/lib/http_stub/configurer/impatient_command_chain.rb +0 -13
  73. data/lib/http_stub/configurer/patient_command_chain.rb +0 -25
  74. data/spec/lib/http_stub/configurer/command_processor_integration_spec.rb +0 -63
  75. data/spec/lib/http_stub/configurer/command_spec.rb +0 -40
  76. data/spec/lib/http_stub/configurer/impatient_command_chain_spec.rb +0 -17
  77. data/spec/lib/http_stub/configurer/patient_command_chain_spec.rb +0 -73
@@ -10,38 +10,38 @@ describe HttpStub::Models::StringValueMatcher do
10
10
 
11
11
  shared_examples_for "a StringValueMatcher that matches an expected stub value" do
12
12
 
13
- it "should determine if actual value should be omitted" do
14
- HttpStub::Models::OmittedValueMatcher.should_receive(:match?).with(expected_stub_match_value, actual_value)
13
+ it "determines if actual value should be omitted" do
14
+ expect(HttpStub::Models::OmittedValueMatcher).to receive(:match?).with(expected_stub_match_value, actual_value)
15
15
 
16
16
  perform_match
17
17
  end
18
18
 
19
- it "should determine if the actual value matches a regular expression" do
20
- HttpStub::Models::RegexpValueMatcher.should_receive(:match?).with(expected_stub_match_value, actual_value)
19
+ it "determines if the actual value matches a regular expression" do
20
+ expect(HttpStub::Models::RegexpValueMatcher).to receive(:match?).with(expected_stub_match_value, actual_value)
21
21
 
22
22
  perform_match
23
23
  end
24
24
 
25
- it "should determine if the actual value exactly matches the stub value" do
26
- HttpStub::Models::ExactValueMatcher.should_receive(:match?).with(expected_stub_match_value, actual_value)
25
+ it "determines if the actual value exactly matches the stub value" do
26
+ expect(HttpStub::Models::ExactValueMatcher).to receive(:match?).with(expected_stub_match_value, actual_value)
27
27
 
28
28
  perform_match
29
29
  end
30
30
 
31
- it "should determine if actual value should be omitted" do
32
- HttpStub::Models::OmittedValueMatcher.should_receive(:match?).with(expected_stub_match_value, actual_value)
31
+ it "determines if actual value should be omitted" do
32
+ expect(HttpStub::Models::OmittedValueMatcher).to receive(:match?).with(expected_stub_match_value, actual_value)
33
33
 
34
34
  perform_match
35
35
  end
36
36
 
37
- it "should determine if the actual value matches a regular expression" do
38
- HttpStub::Models::RegexpValueMatcher.should_receive(:match?).with(expected_stub_match_value, actual_value)
37
+ it "determines if the actual value matches a regular expression" do
38
+ expect(HttpStub::Models::RegexpValueMatcher).to receive(:match?).with(expected_stub_match_value, actual_value)
39
39
 
40
40
  perform_match
41
41
  end
42
42
 
43
- it "should determine if the actual value exactly matches the stub value" do
44
- HttpStub::Models::ExactValueMatcher.should_receive(:match?).with(expected_stub_match_value, actual_value)
43
+ it "determines if the actual value exactly matches the stub value" do
44
+ expect(HttpStub::Models::ExactValueMatcher).to receive(:match?).with(expected_stub_match_value, actual_value)
45
45
 
46
46
  perform_match
47
47
  end
@@ -68,38 +68,38 @@ describe HttpStub::Models::StringValueMatcher do
68
68
 
69
69
  context "when an omitted match occurs" do
70
70
 
71
- before(:each) { HttpStub::Models::OmittedValueMatcher.should_receive(:match?).and_return(true) }
71
+ before(:example) { expect(HttpStub::Models::OmittedValueMatcher).to receive(:match?).and_return(true) }
72
72
 
73
- it "should return true" do
74
- perform_match.should be_true
73
+ it "returns true" do
74
+ expect(perform_match).to be_truthy
75
75
  end
76
76
 
77
77
  end
78
78
 
79
79
  context "when a regular expression match occurs" do
80
80
 
81
- before(:each) { HttpStub::Models::RegexpValueMatcher.should_receive(:match?).and_return(true) }
81
+ before(:example) { expect(HttpStub::Models::RegexpValueMatcher).to receive(:match?).and_return(true) }
82
82
 
83
- it "should return true" do
84
- perform_match.should be_true
83
+ it "returns true" do
84
+ expect(perform_match).to be_truthy
85
85
  end
86
86
 
87
87
  end
88
88
 
89
89
  context "when an exact match occurs" do
90
90
 
91
- before(:each) { HttpStub::Models::ExactValueMatcher.should_receive(:match?).and_return(true) }
91
+ before(:example) { expect(HttpStub::Models::ExactValueMatcher).to receive(:match?).and_return(true) }
92
92
 
93
- it "should return true" do
94
- perform_match.should be_true
93
+ it "returns true" do
94
+ expect(perform_match).to be_truthy
95
95
  end
96
96
 
97
97
  end
98
98
 
99
99
  context "when no match occurs" do
100
100
 
101
- it "should return false" do
102
- perform_match.should be_false
101
+ it "returns false" do
102
+ expect(perform_match).to be_falsey
103
103
  end
104
104
 
105
105
  end
@@ -112,8 +112,8 @@ describe HttpStub::Models::StringValueMatcher do
112
112
 
113
113
  describe "#to_s" do
114
114
 
115
- it "should return the stub value provided" do
116
- string_value_matcher.to_s.should eql(stub_value)
115
+ it "returns the stub value provided" do
116
+ expect(string_value_matcher.to_s).to eql(stub_value)
117
117
  end
118
118
 
119
119
  end
@@ -6,7 +6,7 @@ describe HttpStub::Models::StubActivator do
6
6
  end
7
7
  let(:stub_activator) { HttpStub::Models::StubActivator.new(args) }
8
8
 
9
- before(:each) { HttpStub::Models::Stub.stub(:new).and_return(double(HttpStub::Models::Stub)) }
9
+ before(:example) { allow(HttpStub::Models::Stub).to receive(:new).and_return(double(HttpStub::Models::Stub)) }
10
10
 
11
11
  describe "#satisfies?" do
12
12
 
@@ -16,8 +16,8 @@ describe HttpStub::Models::StubActivator do
16
16
 
17
17
  let(:request_path_info) { activation_uri }
18
18
 
19
- it "should return true" do
20
- stub_activator.satisfies?(request).should be_true
19
+ it "returns true" do
20
+ expect(stub_activator.satisfies?(request)).to be_truthy
21
21
  end
22
22
 
23
23
  end
@@ -26,8 +26,8 @@ describe HttpStub::Models::StubActivator do
26
26
 
27
27
  let(:request_path_info) { "#{activation_uri}/with/additional/paths" }
28
28
 
29
- it "should return false" do
30
- stub_activator.satisfies?(request).should be_false
29
+ it "returns false" do
30
+ expect(stub_activator.satisfies?(request)).to be_falsey
31
31
  end
32
32
 
33
33
  end
@@ -36,8 +36,8 @@ describe HttpStub::Models::StubActivator do
36
36
 
37
37
  let(:request_path_info) { "/completely/different/path" }
38
38
 
39
- it "should return false" do
40
- stub_activator.satisfies?(request).should be_false
39
+ it "returns false" do
40
+ expect(stub_activator.satisfies?(request)).to be_falsey
41
41
  end
42
42
 
43
43
  end
@@ -46,29 +46,29 @@ describe HttpStub::Models::StubActivator do
46
46
 
47
47
  describe "#the_stub" do
48
48
 
49
- it "should return a HttpStub::Models::Stub constructed from the activator's arguments" do
49
+ it "returns a HttpStub::Models::Stub constructed from the activator's arguments" do
50
50
  stub = double(HttpStub::Models::Stub)
51
- HttpStub::Models::Stub.should_receive(:new).with(args).and_return(stub)
51
+ expect(HttpStub::Models::Stub).to receive(:new).with(args).and_return(stub)
52
52
 
53
- stub_activator.the_stub.should eql(stub)
53
+ expect(stub_activator.the_stub).to eql(stub)
54
54
  end
55
55
 
56
56
  end
57
57
 
58
58
  describe "#activation_uri" do
59
59
 
60
- it "should return the value provided in the request body" do
61
- stub_activator.activation_uri.should eql(activation_uri)
60
+ it "returns the value provided in the request body" do
61
+ expect(stub_activator.activation_uri).to eql(activation_uri)
62
62
  end
63
63
 
64
64
  end
65
65
 
66
66
  describe "#to_s" do
67
67
 
68
- it "should return the string representation of the activation arguments" do
69
- args.should_receive(:to_s).and_return("activation args string")
68
+ it "returns the string representation of the activation arguments" do
69
+ expect(args).to receive(:to_s).and_return("activation args string")
70
70
 
71
- stub_activator.to_s.should eql("activation args string")
71
+ expect(stub_activator.to_s).to eql("activation args string")
72
72
  end
73
73
 
74
74
  end
@@ -5,16 +5,16 @@ describe HttpStub::Models::StubHeaders do
5
5
 
6
6
  let(:stub_headers) { HttpStub::Models::StubHeaders.new(stubbed_headers) }
7
7
 
8
- it "should be Headers" do
9
- stub_headers.should be_a(HttpStub::Models::Headers)
8
+ it "is Headers" do
9
+ expect(stub_headers).to be_a(HttpStub::Models::Headers)
10
10
  end
11
11
 
12
12
  describe "when stubbed headers are provided" do
13
13
 
14
- it "should create a regexpable representation of the stubbed headers whose keys are downcased and underscored" do
14
+ it "creates a regexpable representation of the stubbed headers whose keys are downcased and underscored" do
15
15
  downcased_and_underscored_hash = { "another_stub_key" => "value" }
16
- stubbed_headers.should_receive(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
17
- HttpStub::Models::HashWithStringValueMatchers.should_receive(:new).with(downcased_and_underscored_hash)
16
+ expect(stubbed_headers).to receive(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
17
+ expect(HttpStub::Models::HashWithStringValueMatchers).to receive(:new).with(downcased_and_underscored_hash)
18
18
 
19
19
  stub_headers
20
20
  end
@@ -25,8 +25,8 @@ describe HttpStub::Models::StubHeaders do
25
25
 
26
26
  let(:stubbed_headers) { nil }
27
27
 
28
- it "should create a regexpable representation of an empty hash" do
29
- HttpStub::Models::HashWithStringValueMatchers.should_receive(:new).with({})
28
+ it "creates a regexpable representation of an empty hash" do
29
+ expect(HttpStub::Models::HashWithStringValueMatchers).to receive(:new).with({})
30
30
 
31
31
  stub_headers
32
32
  end
@@ -38,29 +38,29 @@ describe HttpStub::Models::StubHeaders do
38
38
  let(:request_headers) { { "request_key" => "value" } }
39
39
  let(:regexpable_stubbed_headers) { double(HttpStub::Models::HashWithStringValueMatchers).as_null_object }
40
40
 
41
- before(:each) do
42
- HttpStub::Models::HashWithStringValueMatchers.stub(:new).and_return(regexpable_stubbed_headers)
43
- HttpStub::Models::RequestHeaderParser.stub(:parse).with(request).and_return(request_headers)
41
+ before(:example) do
42
+ allow(HttpStub::Models::HashWithStringValueMatchers).to receive(:new).and_return(regexpable_stubbed_headers)
43
+ allow(HttpStub::Models::RequestHeaderParser).to receive(:parse).with(request).and_return(request_headers)
44
44
  end
45
45
 
46
- it "should parse the requests headers into a hash" do
47
- HttpStub::Models::RequestHeaderParser.should_receive(:parse).with(request).and_return(request_headers)
46
+ it "parses the requests headers into a hash" do
47
+ expect(HttpStub::Models::RequestHeaderParser).to receive(:parse).with(request).and_return(request_headers)
48
48
 
49
49
  stub_headers.match?(request)
50
50
  end
51
51
 
52
- it "should downcase and underscore the keys in the request header hash" do
53
- request_headers.should_receive(:downcase_and_underscore_keys)
52
+ it "downcases and underscore the keys in the request header hash" do
53
+ expect(request_headers).to receive(:downcase_and_underscore_keys)
54
54
 
55
55
  stub_headers.match?(request)
56
56
  end
57
57
 
58
- it "should delegate to the regexpable representation of the stubbed headers to determine a match" do
58
+ it "delegates to the regexpable representation of the stubbed headers to determine a match" do
59
59
  downcased_and_underscored_hash = { "another_request_key" => "value" }
60
- request_headers.stub(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
61
- regexpable_stubbed_headers.should_receive(:match?).with(downcased_and_underscored_hash).and_return(true)
60
+ allow(request_headers).to receive(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
61
+ expect(regexpable_stubbed_headers).to receive(:match?).with(downcased_and_underscored_hash).and_return(true)
62
62
 
63
- stub_headers.match?(request).should be_true
63
+ expect(stub_headers.match?(request)).to be_truthy
64
64
  end
65
65
 
66
66
  end
@@ -10,8 +10,8 @@ describe HttpStub::Models::StubParameters do
10
10
 
11
11
  describe "when stubbed parameters are provided" do
12
12
 
13
- it "should create a regexpable representation of the stubbed parameters" do
14
- HttpStub::Models::HashWithStringValueMatchers.should_receive(:new).with(stubbed_parameters)
13
+ it "creates a regexpable representation of the stubbed parameters" do
14
+ expect(HttpStub::Models::HashWithStringValueMatchers).to receive(:new).with(stubbed_parameters)
15
15
 
16
16
  stub_parameters
17
17
  end
@@ -22,8 +22,8 @@ describe HttpStub::Models::StubParameters do
22
22
 
23
23
  let(:stubbed_parameters) { nil }
24
24
 
25
- it "should create a regexpable representation of an empty hash" do
26
- HttpStub::Models::HashWithStringValueMatchers.should_receive(:new).with({})
25
+ it "creates a regexpable representation of an empty hash" do
26
+ expect(HttpStub::Models::HashWithStringValueMatchers).to receive(:new).with({})
27
27
 
28
28
  stub_parameters
29
29
  end
@@ -32,11 +32,11 @@ describe HttpStub::Models::StubParameters do
32
32
 
33
33
  describe "#match?" do
34
34
 
35
- it "should delegate to the regexpable representation of the stubbed parameters to determine a match" do
36
- HttpStub::Models::HashWithStringValueMatchers.stub(:new).and_return(regexpable_stubbed_paremeters)
37
- regexpable_stubbed_paremeters.should_receive(:match?).with(request_parameters).and_return(true)
35
+ it "delegates to the regexpable representation of the stubbed parameters to determine a match" do
36
+ allow(HttpStub::Models::HashWithStringValueMatchers).to receive(:new).and_return(regexpable_stubbed_paremeters)
37
+ expect(regexpable_stubbed_paremeters).to receive(:match?).with(request_parameters).and_return(true)
38
38
 
39
- stub_parameters.match?(request).should be(true)
39
+ expect(stub_parameters.match?(request)).to be(true)
40
40
  end
41
41
 
42
42
  end
@@ -47,14 +47,14 @@ describe HttpStub::Models::StubParameters do
47
47
 
48
48
  let(:stubbed_parameters) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
49
49
 
50
- it "should return a string containing each parameter formatted as a conventional request parameter" do
50
+ it "returns a string containing each parameter formatted as a conventional request parameter" do
51
51
  result = stub_parameters.to_s
52
52
 
53
- stubbed_parameters.each { |key, value| result.should match(/#{key}=#{value}/) }
53
+ stubbed_parameters.each { |key, value| expect(result).to match(/#{key}=#{value}/) }
54
54
  end
55
55
 
56
- it "should separate each parameter with the conventional request parameter delimiter" do
57
- stub_parameters.to_s.should match(/key\d.value\d\&key\d.value\d\&key\d.value\d/)
56
+ it "separates each parameter with the conventional request parameter delimiter" do
57
+ expect(stub_parameters.to_s).to match(/key\d.value\d\&key\d.value\d\&key\d.value\d/)
58
58
  end
59
59
 
60
60
  end
@@ -63,8 +63,8 @@ describe HttpStub::Models::StubParameters do
63
63
 
64
64
  let(:stubbed_parameters) { {} }
65
65
 
66
- it "should return an empty string" do
67
- stub_parameters.to_s.should eql("")
66
+ it "returns an empty string" do
67
+ expect(stub_parameters.to_s).to eql("")
68
68
  end
69
69
 
70
70
  end
@@ -73,8 +73,8 @@ describe HttpStub::Models::StubParameters do
73
73
 
74
74
  let(:stubbed_parameters) { nil }
75
75
 
76
- it "should return an empty string" do
77
- stub_parameters.to_s.should eql("")
76
+ it "returns an empty string" do
77
+ expect(stub_parameters.to_s).to eql("")
78
78
  end
79
79
 
80
80
  end
@@ -0,0 +1,62 @@
1
+ describe HttpStub::Models::StubRegistry, "integrating with real stubs" do
2
+
3
+ let(:logger) { double("Logger").as_null_object }
4
+ let(:request) { double("HttpRequest", logger: logger) }
5
+
6
+ let(:stub_registry) { HttpStub::Models::StubRegistry.new }
7
+
8
+ describe "#recall" do
9
+
10
+ subject { stub_registry.recall }
11
+
12
+ context "when stubs have been added" do
13
+
14
+ let(:stubs) do
15
+ (1..3).map { |i| create_stub(i) }
16
+ end
17
+
18
+ before(:example) do
19
+ stubs.each { |stub| stub_registry.add(stub, request) }
20
+ end
21
+
22
+ context "and remembered" do
23
+
24
+ before(:example) { stub_registry.remember }
25
+
26
+ context "and a stub subsequently added" do
27
+
28
+ let(:stub_to_add) { create_stub(4) }
29
+
30
+ before(:example) { stub_registry.add(stub_to_add, request) }
31
+
32
+ it "should restore all known stubs to the remembered state" do
33
+ subject
34
+
35
+ expect(stub_registry.all).not_to include(stub_to_add)
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ def create_stub(number)
47
+ HttpStub::Models::Stub.new(
48
+ {
49
+ "uri" => "/uri#{number}",
50
+ "method" => "get",
51
+ "headers" => {"header_key_#{number}" => "header_value_#{number}"},
52
+ "parameters" => {"parameter_key_#{number}" => "parameter_value_#{number}"},
53
+ "response" => {
54
+ "status" => 200 + number,
55
+ "body" => "Body #{number}"
56
+ },
57
+ "triggers" => []
58
+ }
59
+ )
60
+ end
61
+
62
+ end
@@ -0,0 +1,152 @@
1
+ describe HttpStub::Models::StubRegistry do
2
+
3
+ let(:registry) { instance_double(HttpStub::Models::Registry) }
4
+
5
+ let(:stub_registry) { HttpStub::Models::StubRegistry.new }
6
+
7
+ before(:example) { allow(HttpStub::Models::Registry).to receive(:new).and_return(registry) }
8
+
9
+ describe "#add" do
10
+
11
+ let(:stub) { instance_double(HttpStub::Models::Stub) }
12
+ let(:request) { double("HttpRequest") }
13
+
14
+ it "delegates to an underlying simple registry" do
15
+ expect(registry).to receive(:add).with(stub, request)
16
+
17
+ stub_registry.add(stub, request)
18
+ end
19
+
20
+ end
21
+
22
+ describe "#find_for" do
23
+
24
+ let(:request) { double("HttpRequest") }
25
+
26
+ subject { stub_registry.find_for(request) }
27
+
28
+ it "delegates to an underlying simple registry" do
29
+ expect(registry).to receive(:find_for).with(request)
30
+
31
+ subject
32
+ end
33
+
34
+ context "when a stub is found" do
35
+
36
+ let(:triggers) { instance_double(HttpStub::Models::StubTriggers) }
37
+ let(:stub) { instance_double(HttpStub::Models::Stub, triggers: triggers) }
38
+
39
+ before(:example) { allow(registry).to receive(:find_for).and_return(stub) }
40
+
41
+ it "should add the stubs triggers to the registry" do
42
+ expect(triggers).to receive(:add_to).with(stub_registry, request)
43
+
44
+ subject
45
+ end
46
+
47
+ it "returns the stub found in the underlying registry" do
48
+ allow(triggers).to receive(:add_to)
49
+
50
+ expect(subject).to eql(stub)
51
+ end
52
+
53
+ end
54
+
55
+ context "when a stub is not found" do
56
+
57
+ before(:example) { allow(registry).to receive(:find_for).and_return(nil) }
58
+
59
+ it "returns the result from the underlying registry" do
60
+ expect(subject).to eql(nil)
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ describe "#remember" do
68
+
69
+ it "copies the underlying registry" do
70
+ expect(registry).to receive(:copy)
71
+
72
+ stub_registry.remember
73
+ end
74
+
75
+ end
76
+
77
+ describe "#recall" do
78
+
79
+ subject { stub_registry.recall }
80
+
81
+ context "when the state of the registry has been remembered" do
82
+
83
+ let(:remembered_registry) { instance_double(HttpStub::Models::Registry) }
84
+ let(:copy_of_remembered_registry) { instance_double(HttpStub::Models::Registry) }
85
+
86
+ before(:example) do
87
+ allow(registry).to receive(:copy).and_return(remembered_registry)
88
+ allow(remembered_registry).to receive(:copy).and_return(copy_of_remembered_registry)
89
+ stub_registry.remember
90
+ end
91
+
92
+ it "copies the remembered registry to ensure subsequent recalls recall the same stubs" do
93
+ expect(remembered_registry).to receive(:copy)
94
+
95
+ subject
96
+ end
97
+
98
+ it "causes subsequent method calls to delegate to the copy" do
99
+ subject
100
+
101
+ expect(copy_of_remembered_registry).to receive(:all)
102
+ stub_registry.all
103
+ end
104
+
105
+ end
106
+
107
+ context "when the state of the registry has not been remembered" do
108
+
109
+ it "does not effect subsequent method calls" do
110
+ subject
111
+
112
+ expect(registry).to receive(:all)
113
+ stub_registry.all
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+
120
+ describe "#all" do
121
+
122
+ let(:stubs) { (1..3).map { instance_double(HttpStub::Models::Stub) } }
123
+
124
+ subject { stub_registry.all }
125
+
126
+ it "delegates to an underlying simple registry" do
127
+ expect(registry).to receive(:all)
128
+
129
+ subject
130
+ end
131
+
132
+ it "returns the result from the underlying registry" do
133
+ allow(registry).to receive(:all).and_return(stubs)
134
+
135
+ expect(subject).to eql(stubs)
136
+ end
137
+
138
+ end
139
+
140
+ describe "#clear" do
141
+
142
+ let(:request) { double("HttpRequest") }
143
+
144
+ it "delegates to an underlying simple registry" do
145
+ expect(registry).to receive(:clear).with(request)
146
+
147
+ stub_registry.clear(request)
148
+ end
149
+
150
+ end
151
+
152
+ end