http_stub 0.25.1 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (187) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub.rb +32 -9
  3. data/lib/http_stub/configurer.rb +2 -10
  4. data/lib/http_stub/configurer/dsl/scenario_builder.rb +13 -11
  5. data/lib/http_stub/configurer/dsl/server.rb +32 -43
  6. data/lib/http_stub/configurer/dsl/server_endpoint_template.rb +23 -0
  7. data/lib/http_stub/configurer/dsl/session.rb +55 -0
  8. data/lib/http_stub/configurer/dsl/session_endpoint_template.rb +22 -0
  9. data/lib/http_stub/configurer/dsl/session_factory.rb +34 -0
  10. data/lib/http_stub/configurer/dsl/stub_builder.rb +18 -8
  11. data/lib/http_stub/configurer/dsl/stub_builder_template.rb +26 -0
  12. data/lib/http_stub/configurer/request/http/basic.rb +9 -3
  13. data/lib/http_stub/configurer/request/http/factory.rb +7 -16
  14. data/lib/http_stub/configurer/request/http/multipart.rb +5 -7
  15. data/lib/http_stub/configurer/request/stub.rb +3 -3
  16. data/lib/http_stub/configurer/request/triggers.rb +25 -0
  17. data/lib/http_stub/configurer/server/command_processor.rb +8 -10
  18. data/lib/http_stub/configurer/server/configuration.rb +33 -0
  19. data/lib/http_stub/configurer/server/facade.rb +21 -43
  20. data/lib/http_stub/configurer/server/request_processor.rb +2 -2
  21. data/lib/http_stub/configurer/server/session_facade.rb +64 -0
  22. data/lib/http_stub/extensions/core/uri.rb +28 -0
  23. data/lib/http_stub/extensions/rack/handler.rb +1 -0
  24. data/lib/http_stub/extensions/sinatra/namespace.rb +9 -0
  25. data/lib/http_stub/rake/server_tasks.rb +1 -4
  26. data/lib/http_stub/server/application/application.rb +17 -98
  27. data/lib/http_stub/server/application/configuration.rb +38 -0
  28. data/lib/http_stub/server/application/cross_origin_support.rb +7 -5
  29. data/lib/http_stub/server/application/request_support.rb +38 -0
  30. data/lib/http_stub/server/application/response_support.rb +19 -0
  31. data/lib/http_stub/server/application/routes/memory.rb +37 -0
  32. data/lib/http_stub/server/application/routes/resource.rb +23 -0
  33. data/lib/http_stub/server/application/routes/scenario.rb +52 -0
  34. data/lib/http_stub/server/application/routes/session.rb +65 -0
  35. data/lib/http_stub/server/application/routes/stub.rb +75 -0
  36. data/lib/http_stub/server/application/session_uri_support.rb +15 -0
  37. data/lib/http_stub/server/memory/controller.rb +25 -0
  38. data/lib/http_stub/server/memory/memory.rb +32 -0
  39. data/lib/http_stub/server/registry.rb +25 -8
  40. data/lib/http_stub/server/request/factory.rb +23 -0
  41. data/lib/http_stub/server/request/parameters.rb +2 -2
  42. data/lib/http_stub/server/request/request.rb +6 -11
  43. data/lib/http_stub/server/request/sinatra_request.rb +26 -0
  44. data/lib/http_stub/server/scenario/controller.rb +16 -11
  45. data/lib/http_stub/server/scenario/not_found_error.rb +15 -0
  46. data/lib/http_stub/server/session.rb +14 -0
  47. data/lib/http_stub/server/session/configuration.rb +32 -0
  48. data/lib/http_stub/server/session/controller.rb +40 -0
  49. data/lib/http_stub/server/session/empty.rb +15 -0
  50. data/lib/http_stub/server/session/identifier_strategy.rb +24 -0
  51. data/lib/http_stub/server/session/registry.rb +38 -0
  52. data/lib/http_stub/server/session/session.rb +80 -0
  53. data/lib/http_stub/server/stub/controller.rb +18 -12
  54. data/lib/http_stub/server/stub/empty.rb +1 -1
  55. data/lib/http_stub/server/stub/match/controller.rb +9 -5
  56. data/lib/http_stub/server/stub/payload/response_body_modifier.rb +3 -1
  57. data/lib/http_stub/server/stub/registry.rb +6 -13
  58. data/lib/http_stub/server/stub/triggers.rb +11 -9
  59. data/lib/http_stub/server/views/_home.haml +2 -0
  60. data/lib/http_stub/server/views/_post_link_function.haml +26 -0
  61. data/lib/http_stub/server/views/_session.haml +16 -0
  62. data/lib/http_stub/server/views/_stub.haml +8 -2
  63. data/lib/http_stub/server/views/_stubs.haml +4 -0
  64. data/lib/http_stub/server/views/application.sass +4 -1
  65. data/lib/http_stub/server/views/layout.haml +1 -0
  66. data/lib/http_stub/server/views/scenario.haml +4 -3
  67. data/lib/http_stub/server/views/scenarios.haml +7 -6
  68. data/lib/http_stub/server/views/session.haml +3 -0
  69. data/lib/http_stub/server/views/sessions.haml +6 -0
  70. data/lib/http_stub/server/views/stubs.haml +1 -4
  71. data/lib/http_stub/server/views/transactional_session.haml +2 -0
  72. data/lib/http_stub/version.rb +1 -1
  73. data/spec/acceptance/configurer_initialization_spec.rb +40 -51
  74. data/spec/acceptance/configurer_part_spec.rb +5 -7
  75. data/spec/acceptance/cross_origin_support_spec.rb +7 -13
  76. data/spec/acceptance/endpoint_template_spec.rb +2 -4
  77. data/spec/acceptance/request_reference_spec.rb +1 -3
  78. data/spec/acceptance/scenario_spec.rb +7 -9
  79. data/spec/acceptance/server_defaults_spec.rb +2 -4
  80. data/spec/acceptance/server_memory_spec.rb +20 -0
  81. data/spec/acceptance/session_spec.rb +125 -0
  82. data/spec/acceptance/stub_body_request_matching_spec.rb +2 -4
  83. data/spec/acceptance/stub_control_values_spec.rb +19 -18
  84. data/spec/acceptance/stub_match_last_spec.rb +0 -4
  85. data/spec/acceptance/stub_match_list_spec.rb +0 -4
  86. data/spec/acceptance/stub_miss_list_spec.rb +0 -4
  87. data/spec/acceptance/stub_spec.rb +11 -11
  88. data/spec/acceptance/stub_trigger_spec.rb +60 -13
  89. data/spec/lib/http_stub/configurer/dsl/scenario_builder_spec.rb +83 -30
  90. data/spec/lib/http_stub/configurer/dsl/server_endpoint_template_spec.rb +167 -0
  91. data/spec/lib/http_stub/configurer/dsl/server_spec.rb +306 -176
  92. data/spec/lib/http_stub/configurer/dsl/session_endpoint_template_spec.rb +150 -0
  93. data/spec/lib/http_stub/configurer/dsl/session_factory_spec.rb +97 -0
  94. data/spec/lib/http_stub/configurer/dsl/session_spec.rb +222 -0
  95. data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +209 -48
  96. data/spec/lib/http_stub/configurer/dsl/stub_builder_template_spec.rb +203 -0
  97. data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +80 -4
  98. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +115 -56
  99. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +39 -6
  100. data/spec/lib/http_stub/configurer/request/stub_spec.rb +50 -108
  101. data/spec/lib/http_stub/configurer/request/triggers_spec.rb +101 -0
  102. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +11 -10
  103. data/spec/lib/http_stub/configurer/server/configuration_spec.rb +139 -0
  104. data/spec/lib/http_stub/configurer/server/facade_spec.rb +65 -142
  105. data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +7 -6
  106. data/spec/lib/http_stub/configurer/server/session_facade_spec.rb +336 -0
  107. data/spec/lib/http_stub/configurer_spec.rb +105 -0
  108. data/spec/lib/http_stub/extensions/core/uri_spec.rb +75 -0
  109. data/spec/lib/http_stub/extensions/rack/handler_spec.rb +1 -1
  110. data/spec/lib/http_stub/extensions/sinatra/namespace_spec.rb +36 -0
  111. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +4 -3
  112. data/spec/lib/http_stub/rake/server_tasks_spec.rb +47 -10
  113. data/spec/lib/http_stub/server/application/application_spec.rb +44 -301
  114. data/spec/lib/http_stub/server/application/configuration_spec.rb +59 -0
  115. data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +23 -20
  116. data/spec/lib/http_stub/server/application/request_support_integration_spec.rb +93 -0
  117. data/spec/lib/http_stub/server/application/request_support_spec.rb +61 -0
  118. data/spec/lib/http_stub/server/application/response_support_spec.rb +30 -0
  119. data/spec/lib/http_stub/server/application/routes/memory_spec.rb +41 -0
  120. data/spec/lib/http_stub/server/application/routes/resource_spec.rb +16 -0
  121. data/spec/lib/http_stub/server/application/routes/scenario_spec.rb +117 -0
  122. data/spec/lib/http_stub/server/application/routes/session_integration_spec.rb +46 -0
  123. data/spec/lib/http_stub/server/application/routes/session_spec.rb +186 -0
  124. data/spec/lib/http_stub/server/application/{application_integration_spec.rb → routes/stub_integration_spec.rb} +16 -38
  125. data/spec/lib/http_stub/server/application/routes/stub_spec.rb +202 -0
  126. data/spec/lib/http_stub/server/application/session_uri_support_spec.rb +48 -0
  127. data/spec/lib/http_stub/server/application/text_formatting_support_spec.rb +3 -3
  128. data/spec/lib/http_stub/server/memory/controller_spec.rb +47 -0
  129. data/spec/lib/http_stub/server/memory/memory_spec.rb +122 -0
  130. data/spec/lib/http_stub/server/registry_spec.rb +153 -34
  131. data/spec/lib/http_stub/server/request/factory_spec.rb +74 -0
  132. data/spec/lib/http_stub/server/request/parameters_spec.rb +5 -8
  133. data/spec/lib/http_stub/server/request/request_spec.rb +52 -52
  134. data/spec/lib/http_stub/server/request/sinatra_request_spec.rb +132 -0
  135. data/spec/lib/http_stub/server/scenario/controller_spec.rb +121 -35
  136. data/spec/lib/http_stub/server/scenario/not_found_error_spec.rb +25 -0
  137. data/spec/lib/http_stub/server/session/configuration_spec.rb +94 -0
  138. data/spec/lib/http_stub/server/session/controller_spec.rb +106 -0
  139. data/spec/lib/http_stub/server/session/empty_spec.rb +13 -0
  140. data/spec/lib/http_stub/server/session/identifier_strategy_spec.rb +126 -0
  141. data/spec/lib/http_stub/server/session/registry_spec.rb +214 -0
  142. data/spec/lib/http_stub/server/session/session_spec.rb +444 -0
  143. data/spec/lib/http_stub/server/stub/controller_spec.rb +89 -37
  144. data/spec/lib/http_stub/server/stub/empty_spec.rb +2 -2
  145. data/spec/lib/http_stub/server/stub/match/controller_spec.rb +59 -16
  146. data/spec/lib/http_stub/server/stub/payload/response_body_modifier_spec.rb +7 -8
  147. data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +42 -15
  148. data/spec/lib/http_stub/server/stub/registry_spec.rb +38 -59
  149. data/spec/lib/http_stub/server/stub/triggers_spec.rb +93 -34
  150. data/spec/spec_helper.rb +13 -1
  151. data/spec/support/contain_file.rb +23 -0
  152. data/spec/support/cross_origin_server/application.rb +1 -1
  153. data/spec/support/cross_origin_server/index_page.rb +2 -2
  154. data/spec/support/cross_origin_server/integration.rb +3 -2
  155. data/spec/support/cross_origin_server/public/index.html +2 -1
  156. data/spec/support/http_stub/configurer_integration.rb +12 -14
  157. data/spec/support/http_stub/server/application/http_stub_rack_application_test.rb +47 -0
  158. data/spec/support/http_stub/server/driver.rb +56 -0
  159. data/spec/support/http_stub/server/memory_fixture.rb +17 -0
  160. data/spec/support/http_stub/server/request_fixture.rb +7 -6
  161. data/spec/support/http_stub/server/scenario_fixture.rb +13 -0
  162. data/spec/support/http_stub/server/session_fixture.rb +27 -0
  163. data/spec/support/http_stub/server_integration.rb +12 -17
  164. data/spec/support/http_stub/stub_fixture.rb +19 -6
  165. data/spec/support/include_in_json.rb +4 -4
  166. data/spec/support/rack/rack_application_test.rb +9 -0
  167. data/spec/support/rack/request_fixture.rb +13 -0
  168. data/spec/support/surpressed_output.rb +10 -0
  169. metadata +149 -36
  170. data/lib/http_stub/configurer/dsl/deprecated.rb +0 -60
  171. data/lib/http_stub/configurer/dsl/endpoint_template.rb +0 -38
  172. data/lib/http_stub/configurer/dsl/scenario_activator.rb +0 -15
  173. data/lib/http_stub/configurer/dsl/stub_activator_builder.rb +0 -24
  174. data/lib/http_stub/configurer/dsl/stub_builder_producer.rb +0 -21
  175. data/lib/http_stub/server/request.rb +0 -12
  176. data/lib/http_stub/server/scenario/activator.rb +0 -25
  177. data/lib/http_stub/server/views/_activate_scenario.haml +0 -23
  178. data/lib/http_stub/server/views/index.haml +0 -8
  179. data/spec/acceptance/activator_spec.rb +0 -81
  180. data/spec/lib/http_stub/configurer/dsl/deprecated_spec.rb +0 -240
  181. data/spec/lib/http_stub/configurer/dsl/endpoint_template_spec.rb +0 -255
  182. data/spec/lib/http_stub/configurer/dsl/scenario_activator_spec.rb +0 -62
  183. data/spec/lib/http_stub/configurer/dsl/stub_activator_builder_spec.rb +0 -120
  184. data/spec/lib/http_stub/configurer/dsl/stub_builder_producer_spec.rb +0 -85
  185. data/spec/lib/http_stub/server/request_spec.rb +0 -24
  186. data/spec/lib/http_stub/server/scenario/activator_spec.rb +0 -111
  187. data/spec/support/http_stub/server/scenario/scenario_fixture.rb +0 -15
@@ -0,0 +1,48 @@
1
+ describe HttpStub::Server::Application::SessionUriSupport do
2
+
3
+ class HttpStub::Server::Application::SessionUriSupport::TestApplication
4
+ include HttpStub::Server::Application::SessionUriSupport
5
+
6
+ def initialize(request)
7
+ @request = request
8
+ end
9
+
10
+ def http_stub_request
11
+ @request
12
+ end
13
+
14
+ end
15
+
16
+ let(:session_id) { "some_session_id" }
17
+ let(:session) { instance_double(HttpStub::Server::Session::Session, id: session_id) }
18
+ let(:request) { instance_double(HttpStub::Server::Request::Request, session: session) }
19
+
20
+ let(:application) { HttpStub::Server::Application::SessionUriSupport::TestApplication.new(request) }
21
+
22
+ describe "#session_uri" do
23
+
24
+ let(:uri) { "http://some/uri" }
25
+
26
+ subject { application.session_uri(uri) }
27
+
28
+ context "when the uri contains parameters" do
29
+
30
+ let(:uri) { "http://some/uri?parameter_name=parameter_value" }
31
+
32
+ it "adds a http_stub_session_id parameter to the uri containing the current session id" do
33
+ expect(subject).to eql("#{uri}&http_stub_session_id=some_session_id")
34
+ end
35
+
36
+ end
37
+
38
+ context "when the uri does not contain parameters" do
39
+
40
+ it "adds a http_stub_session_id parameter to the uri containing the current session id" do
41
+ expect(subject).to eql("#{uri}?http_stub_session_id=some_session_id")
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -2,19 +2,19 @@ describe HttpStub::Server::Application::TextFormattingSupport do
2
2
 
3
3
  let(:text_formatting_support) { Class.new.extend(described_class) }
4
4
 
5
- describe "::h" do
5
+ describe "#h" do
6
6
 
7
7
  let(:text) { "<tag>Some text</tag>" }
8
8
 
9
9
  subject { text_formatting_support.h(text) }
10
10
 
11
11
  it "should escape the provided HTML" do
12
- expect(subject).to eq("&lt;tag&gt;Some text&lt;&#x2F;tag&gt;")
12
+ expect(subject).to eql("&lt;tag&gt;Some text&lt;&#x2F;tag&gt;")
13
13
  end
14
14
 
15
15
  end
16
16
 
17
- describe "::pp" do
17
+ describe "#pp" do
18
18
 
19
19
  subject { text_formatting_support.pp(text) }
20
20
 
@@ -0,0 +1,47 @@
1
+ describe HttpStub::Server::Memory::Controller do
2
+
3
+ let(:session_configuration) { instance_double(HttpStub::Server::Session::Configuration) }
4
+ let(:server_memory) { instance_double(HttpStub::Server::Memory::Memory) }
5
+
6
+ let(:controller) { described_class.new(session_configuration, server_memory) }
7
+
8
+ describe "#find_stubs" do
9
+
10
+ let(:memorized_stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
11
+
12
+ subject { controller.find_stubs }
13
+
14
+ before(:example) { allow(server_memory).to receive(:stubs).and_return(memorized_stubs) }
15
+
16
+ it "returns the stubs within the servers memory" do
17
+ expect(subject).to eql(memorized_stubs)
18
+ end
19
+
20
+ end
21
+
22
+ describe "#reset" do
23
+
24
+ let(:logger) { instance_double(Logger) }
25
+
26
+ subject { controller.reset(logger) }
27
+
28
+ before(:example) do
29
+ allow(session_configuration).to receive(:reset)
30
+ allow(server_memory).to receive(:reset)
31
+ end
32
+
33
+ it "resets the servers session configuration" do
34
+ expect(session_configuration).to receive(:reset)
35
+
36
+ subject
37
+ end
38
+
39
+ it "resets the servers memory providing the logger" do
40
+ expect(server_memory).to receive(:reset).with(logger)
41
+
42
+ subject
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,122 @@
1
+ describe HttpStub::Server::Memory::Memory do
2
+
3
+ let(:session_configuration) { instance_double(HttpStub::Server::Session::Configuration) }
4
+
5
+ let(:memory_session) { instance_double(HttpStub::Server::Session::Session) }
6
+ let(:scenario_registry) { instance_double(HttpStub::Server::Registry) }
7
+ let(:session_registry) { instance_double(HttpStub::Server::Session::Registry) }
8
+
9
+ let(:memory) { described_class.new(session_configuration) }
10
+
11
+ before(:example) do
12
+ allow(HttpStub::Server::Session::Session).to receive(:new).and_return(memory_session)
13
+ allow(HttpStub::Server::Registry).to receive(:new).and_return(scenario_registry)
14
+ allow(HttpStub::Server::Session::Registry).to receive(:new).and_return(session_registry)
15
+ end
16
+
17
+ it "creates a simple scenario registry" do
18
+ expect(HttpStub::Server::Registry).to receive(:new).with("scenario")
19
+
20
+ memory
21
+ end
22
+
23
+ it "creates a memory session" do
24
+ expect(HttpStub::Server::Session::Session).to(
25
+ receive(:new).with(HttpStub::Server::Session::MEMORY_SESSION_ID, anything, anything)
26
+ )
27
+
28
+ memory
29
+ end
30
+
31
+ it "creates a memory session containing the scenario registry" do
32
+ expect(HttpStub::Server::Session::Session).to receive(:new).with(anything, scenario_registry, anything)
33
+
34
+ memory
35
+ end
36
+
37
+ it "creates a memory session containing an empty memory session" do
38
+ expect(HttpStub::Server::Session::Session).to(
39
+ receive(:new).with(anything, anything, HttpStub::Server::Session::Empty)
40
+ )
41
+
42
+ memory
43
+ end
44
+
45
+ it "creates a session registry containing the session configuration" do
46
+ expect(HttpStub::Server::Session::Registry).to receive(:new).with(session_configuration, anything, anything)
47
+
48
+ memory
49
+ end
50
+
51
+ it "creates a session registry containing the scenario registry" do
52
+ expect(HttpStub::Server::Session::Registry).to receive(:new).with(anything, scenario_registry, anything)
53
+
54
+ memory
55
+ end
56
+
57
+ it "creates a session registry initalised with the memory session" do
58
+ expect(HttpStub::Server::Session::Registry).to receive(:new).with(anything, anything, memory_session)
59
+
60
+ memory
61
+ end
62
+
63
+ describe "#scenarios" do
64
+
65
+ subject { memory.scenarios }
66
+
67
+ it "returns the servers scenario registry" do
68
+ expect(subject).to eql(scenario_registry)
69
+ end
70
+
71
+ end
72
+
73
+ describe "#sessions" do
74
+
75
+ subject { memory.sessions }
76
+
77
+ it "returns the servers session registry" do
78
+ expect(subject).to eql(session_registry)
79
+ end
80
+
81
+ end
82
+
83
+ describe "#stubs" do
84
+
85
+ let(:stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
86
+
87
+ subject { memory.stubs }
88
+
89
+ before(:example) { allow(memory_session).to receive(:stubs).and_return(stubs) }
90
+
91
+ it "returns the stubs within the memory session" do
92
+ expect(subject).to eql(stubs)
93
+ end
94
+
95
+ end
96
+
97
+ describe "#reset" do
98
+
99
+ let(:logger) { instance_double(Logger) }
100
+
101
+ subject { memory.reset(logger) }
102
+
103
+ before(:example) do
104
+ allow(scenario_registry).to receive(:clear)
105
+ allow(session_registry).to receive(:clear)
106
+ end
107
+
108
+ it "clears the servers scenarios" do
109
+ expect(scenario_registry).to receive(:clear).with(logger)
110
+
111
+ subject
112
+ end
113
+
114
+ it "clears the servers sessions" do
115
+ expect(session_registry).to receive(:clear).with(logger)
116
+
117
+ subject
118
+ end
119
+
120
+ end
121
+
122
+ end
@@ -1,17 +1,65 @@
1
1
  describe HttpStub::Server::Registry do
2
2
 
3
- let(:logger) { instance_double(Logger, info: nil) }
3
+ let(:model_name) { "a_model" }
4
4
 
5
- let(:registry) { HttpStub::Server::Registry.new("a_model") }
5
+ let(:logger) { instance_double(Logger, info: nil) }
6
6
 
7
- shared_context "register multiple models" do
7
+ let(:registry) { described_class.new(model_name) }
8
+
9
+ shared_context "multiple models" do
8
10
 
9
- let(:models) { (1..3).map { |i| double("HttpStub::Server::Model#{i}", :matches? => false) } }
11
+ let(:models) { (1..3).map { |i| double("HttpStub::Server::Model#{i}", matches?: false) } }
12
+
13
+ end
14
+
15
+ shared_context "register multiple models" do
16
+ include_context "multiple models"
10
17
 
11
18
  before(:example) { registry.concat(models, logger) }
12
19
 
13
20
  end
14
21
 
22
+ shared_context "one model matches" do
23
+
24
+ let(:matching_model) { models[1] }
25
+
26
+ before(:example) { allow(matching_model).to receive(:matches?).and_return(true) }
27
+
28
+ end
29
+
30
+ shared_context "many models match" do
31
+
32
+ let(:matching_models) { [ models[0], models[2] ] }
33
+
34
+ before(:example) { matching_models.each { |model| allow(model).to receive(:matches?).and_return(true) } }
35
+
36
+ end
37
+
38
+ describe "constructor" do
39
+
40
+ context "when models are provided" do
41
+ include_context "multiple models"
42
+
43
+ subject { described_class.new(model_name, models) }
44
+
45
+ it "creates a registry with the models" do
46
+ expect(subject.all).to eql(models)
47
+ end
48
+
49
+ end
50
+
51
+ context "when models are not provided" do
52
+
53
+ subject { described_class.new(model_name) }
54
+
55
+ it "creates a registy with no models" do
56
+ expect(subject.all).to eql([])
57
+ end
58
+
59
+ end
60
+
61
+ end
62
+
15
63
  describe "#add" do
16
64
 
17
65
  let(:model_string_representation) { "some model string" }
@@ -46,18 +94,69 @@ describe HttpStub::Server::Registry do
46
94
 
47
95
  subject { registry.concat(models, logger) }
48
96
 
97
+ it "adds the models" do
98
+ subject
99
+
100
+ expect_registry_to_contain(models)
101
+ end
102
+
49
103
  it "logs that the models have been registered" do
50
104
  model_string_representations.each do |string_representation|
51
- expect(logger).to receive(:info).with(/#{string_representation}/)
105
+ expect(logger).to receive(:info).with(/Registered.+#{string_representation}/)
52
106
  end
53
107
 
54
108
  subject
55
109
  end
56
110
 
57
- it "adds the models" do
111
+ end
112
+
113
+ describe "#replace" do
114
+
115
+ let(:model_string_representations) { (1..3).map { |i| "model string ##{i}" } }
116
+ let(:models) do
117
+ model_string_representations.map do |string_representation|
118
+ double("HttpStub::Server::Model", to_s: string_representation)
119
+ end
120
+ end
121
+
122
+ subject { registry.replace(models, logger) }
123
+
124
+ context "when no models had been added" do
125
+
126
+ it "establishes the models" do
127
+ subject
128
+
129
+ expect_registry_to_contain(models)
130
+ end
131
+
132
+ end
133
+
134
+ context "when models had been added" do
135
+
136
+ let(:original_models) { (1..3).map { double("HttpStub::Server::Model") } }
137
+
138
+ before(:example) { registry.concat(original_models, logger) }
139
+
140
+ it "replaces those models with the provided models" do
141
+ subject
142
+
143
+ expect_registry_to_contain(models)
144
+ end
145
+
146
+ end
147
+
148
+ it "logs that the models are being cleared" do
149
+ expect(logger).to receive(:info).with(/clearing a_model/i)
150
+
58
151
  subject
152
+ end
153
+
154
+ it "logs that the models have been registered" do
155
+ model_string_representations.each do |string_representation|
156
+ expect(logger).to receive(:info).with(/Registered.+#{string_representation}/)
157
+ end
59
158
 
60
- expect(registry.all).to eql(models.reverse)
159
+ subject
61
160
  end
62
161
 
63
162
  end
@@ -78,10 +177,7 @@ describe HttpStub::Server::Registry do
78
177
  end
79
178
 
80
179
  describe "and one registered model matches the criteria" do
81
-
82
- let(:matching_model) { models[1] }
83
-
84
- before(:example) { allow(matching_model).to receive(:matches?).and_return(true) }
180
+ include_context "one model matches"
85
181
 
86
182
  it "returns the model" do
87
183
  expect(subject).to eql(matching_model)
@@ -100,11 +196,10 @@ describe HttpStub::Server::Registry do
100
196
  end
101
197
 
102
198
  describe "and multiple registered models satisfy the criteria" do
103
-
104
- before(:example) { [0, 2].each { |i| allow(models[i]).to receive(:matches?).and_return(true) } }
199
+ include_context "many models match"
105
200
 
106
201
  it "supports model overrides by returning the last model registered" do
107
- expect(subject).to eql(models[2])
202
+ expect(subject).to eql(matching_models.last)
108
203
  end
109
204
 
110
205
  end
@@ -127,7 +222,7 @@ describe HttpStub::Server::Registry do
127
222
 
128
223
  end
129
224
 
130
- it "it should log model discovery diagnostics that includes the complete details of the criteria" do
225
+ it "logs model discovery diagnostics that include the complete details of the criteria" do
131
226
  expect(logger).to receive(:info).with(/Criteria inspect result/)
132
227
 
133
228
  subject
@@ -166,7 +261,7 @@ describe HttpStub::Server::Registry do
166
261
  include_context "register multiple models"
167
262
 
168
263
  it "returns the registered models in the order they were added" do
169
- expect(registry.all).to eql(models.reverse)
264
+ expect_registry_to_contain(models)
170
265
  end
171
266
 
172
267
  end
@@ -174,58 +269,78 @@ describe HttpStub::Server::Registry do
174
269
  context "when no model has been registered" do
175
270
 
176
271
  it "returns an empty list" do
177
- expect(registry.all).to eql([])
272
+ expect_registry_to_contain([])
178
273
  end
179
274
 
180
275
  end
181
276
 
182
277
  end
183
278
 
184
- describe "#rollback_to" do
279
+ describe "#delete" do
185
280
 
186
- subject { registry.rollback_to(model) }
281
+ let(:criteria) { double("Criteria", inspect: "Criteria inspect result") }
187
282
 
188
- context "when models have been added" do
283
+ subject { registry.delete(criteria, logger) }
284
+
285
+ context "when multiple models have been registered" do
189
286
  include_context "register multiple models"
190
287
 
191
- context "and the rollback is to one of those models" do
288
+ it "determines if the models satisfy the provided criteria" do
289
+ models.each { |model| expect(model).to receive(:matches?).with(criteria, logger).and_return(false) }
192
290
 
193
- let(:model) { models[1] }
291
+ subject
292
+ end
293
+
294
+ context "when the criteria matches a model" do
295
+ include_context "one model matches"
194
296
 
195
- it "the models remaining are those added up to and including the provided model" do
297
+ it "deletes the matched model from the registry" do
196
298
  subject
197
299
 
198
- expect(registry.all).to eql(models[0, 2].reverse)
300
+ expect_registry_to_contain(models - [ matching_model ])
199
301
  end
200
302
 
201
303
  end
202
304
 
203
- context "and the rollback is to a model that has not been added" do
305
+ context "when the criteria matches many models" do
306
+ include_context "many models match"
307
+
308
+ it "deletes all matching models" do
309
+ subject
204
310
 
205
- let(:model) { double("HttpStub::Server::Model") }
311
+ expect_registry_to_contain(models - matching_models)
312
+ end
206
313
 
207
- it "does not remove any models" do
314
+ end
315
+
316
+ context "when the criteria does not match any model" do
317
+
318
+ it "does not delete any models" do
208
319
  subject
209
320
 
210
- expect(registry.all).to eql(models.reverse)
321
+ expect_registry_to_contain(models)
211
322
  end
212
323
 
213
324
  end
214
325
 
215
326
  end
216
327
 
217
- context "when no models have been added" do
218
-
219
- let(:model) { double("HttpStub::Server::Model") }
328
+ context "when no model has been registered" do
220
329
 
221
- it "does not effect the known models" do
330
+ it "does not delete any models" do
222
331
  subject
223
332
 
224
- expect(registry.all).to be_empty
333
+ expect_registry_to_contain([])
225
334
  end
226
335
 
227
336
  end
228
337
 
338
+ it "logs model deletion diagnostics that include the complete details of the criteria" do
339
+ expect(logger).to receive(:info).with(/Criteria inspect result/)
340
+
341
+ subject
342
+ end
343
+
229
344
  end
230
345
 
231
346
  describe "#clear" do
@@ -244,11 +359,15 @@ describe HttpStub::Server::Registry do
244
359
  it "releases all knowledge of the models" do
245
360
  subject
246
361
 
247
- expect(registry.all).to be_empty
362
+ expect_registry_to_contain([])
248
363
  end
249
364
 
250
365
  end
251
366
 
252
367
  end
253
368
 
369
+ def expect_registry_to_contain(models)
370
+ expect(registry.all).to eql(models.reverse)
371
+ end
372
+
254
373
  end