lita 3.3.1 → 4.0.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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.travis.yml +3 -0
  4. data/lib/lita.rb +45 -97
  5. data/lib/lita/adapter.rb +38 -17
  6. data/lib/lita/adapters/shell.rb +5 -3
  7. data/lib/lita/authorization.rb +109 -60
  8. data/lib/lita/builder.rb +38 -0
  9. data/lib/lita/callback.rb +37 -0
  10. data/lib/lita/cli.rb +2 -0
  11. data/lib/lita/config.rb +1 -18
  12. data/lib/lita/configurable.rb +29 -0
  13. data/lib/lita/configuration.rb +179 -0
  14. data/lib/lita/configuration_validator.rb +66 -0
  15. data/lib/lita/daemon.rb +4 -11
  16. data/lib/lita/default_configuration.rb +146 -0
  17. data/lib/lita/errors.rb +9 -0
  18. data/lib/lita/handler.rb +5 -264
  19. data/lib/lita/handler/chat_router.rb +130 -0
  20. data/lib/lita/handler/common.rb +114 -0
  21. data/lib/lita/handler/event_router.rb +77 -0
  22. data/lib/lita/handler/http_router.rb +26 -0
  23. data/lib/lita/handlers/authorization.rb +13 -18
  24. data/lib/lita/handlers/deprecation_check.rb +24 -0
  25. data/lib/lita/handlers/help.rb +5 -3
  26. data/lib/lita/handlers/info.rb +2 -2
  27. data/lib/lita/http_callback.rb +29 -0
  28. data/lib/lita/http_route.rb +41 -26
  29. data/lib/lita/namespace.rb +23 -0
  30. data/lib/lita/rack_app.rb +29 -2
  31. data/lib/lita/registry.rb +133 -0
  32. data/lib/lita/robot.rb +58 -20
  33. data/lib/lita/route_validator.rb +12 -4
  34. data/lib/lita/rspec.rb +23 -14
  35. data/lib/lita/rspec/handler.rb +93 -23
  36. data/lib/lita/rspec/matchers/chat_route_matcher.rb +48 -0
  37. data/lib/lita/rspec/matchers/deprecated.rb +36 -0
  38. data/lib/lita/rspec/matchers/event_route_matcher.rb +27 -0
  39. data/lib/lita/rspec/matchers/http_route_matcher.rb +18 -60
  40. data/lib/lita/user.rb +0 -6
  41. data/lib/lita/util.rb +1 -8
  42. data/lib/lita/version.rb +1 -1
  43. data/lita.gemspec +1 -0
  44. data/spec/lita/adapter_spec.rb +25 -7
  45. data/spec/lita/adapters/shell_spec.rb +24 -4
  46. data/spec/lita/authorization_spec.rb +57 -38
  47. data/spec/lita/builder_spec.rb +39 -0
  48. data/spec/lita/config_spec.rb +0 -24
  49. data/spec/lita/configuration_spec.rb +222 -0
  50. data/spec/lita/configuration_validator_spec.rb +112 -0
  51. data/spec/lita/daemon_spec.rb +2 -2
  52. data/spec/lita/default_configuration_spec.rb +254 -0
  53. data/spec/lita/handler/chat_router_spec.rb +192 -0
  54. data/spec/lita/handler/common_spec.rb +272 -0
  55. data/spec/lita/handler/event_router_spec.rb +54 -0
  56. data/spec/lita/handler/http_router_spec.rb +106 -0
  57. data/spec/lita/handler_spec.rb +20 -291
  58. data/spec/lita/handlers/authorization_spec.rb +9 -11
  59. data/spec/lita/handlers/deprecation_check_spec.rb +21 -0
  60. data/spec/lita/handlers/help_spec.rb +31 -9
  61. data/spec/lita/handlers/info_spec.rb +2 -2
  62. data/spec/lita/handlers/room_spec.rb +5 -3
  63. data/spec/lita/robot_spec.rb +30 -11
  64. data/spec/lita/rspec_spec.rb +71 -31
  65. data/spec/lita/user_spec.rb +2 -2
  66. data/spec/lita_spec.rb +62 -4
  67. data/spec/spec_helper.rb +7 -0
  68. data/templates/locales/en.yml +56 -4
  69. data/templates/plugin/gemspec.tt +1 -0
  70. data/templates/plugin/spec/spec_helper.tt +4 -0
  71. metadata +54 -8
  72. data/lib/lita/rspec/matchers/event_subscription_matcher.rb +0 -67
  73. data/lib/lita/rspec/matchers/route_matcher.rb +0 -69
  74. data/spec/lita/rack_app_spec.rb +0 -92
@@ -11,9 +11,16 @@ require "lita"
11
11
  require "lita/cli"
12
12
  require "lita/rspec"
13
13
 
14
+ Lita.version_3_compatibility_mode = false
15
+
14
16
  RSpec.configure do |config|
15
17
  config.mock_with :rspec do |mocks_config|
16
18
  mocks_config.verify_doubled_constant_names = true
17
19
  mocks_config.verify_partial_doubles = true
18
20
  end
21
+
22
+ config.before do
23
+ logger = double("Lita:Logger").as_null_object
24
+ allow(Lita).to receive(:logger).and_return(logger)
25
+ end
19
26
  end
@@ -3,6 +3,15 @@ en:
3
3
  adapters:
4
4
  shell:
5
5
  startup_message: Type "exit" or "quit" to end the session.
6
+ auth:
7
+ class_method_deprecated: >-
8
+ Lita::Authorization.%{method} will be removed in Lita 5.0. Use the version accessed via
9
+ Lita::Robot#auth instead.
10
+ core:
11
+ register_adapter:
12
+ block_or_class_required: Lita.register_adapter requires a class in its two argument form.
13
+ register_handler:
14
+ block_or_class_required: Lita.register_handler requires a class in its single argument form.
6
15
  handlers:
7
16
  authorization:
8
17
  help:
@@ -38,9 +47,14 @@ en:
38
47
  part_key: part ROOM_ID
39
48
  part_value: Makes the robot part from the room with room ID ROOM_ID.
40
49
  adapter:
41
- name_required: Adapters that are anonymous classes must define self.name.
42
50
  method_not_implemented: "This adapter has not implemented #%{method}."
43
51
  missing_configs: "The following keys are required on config.adapter: %{configs}"
52
+ require_config_deprecated: >-
53
+ Lita::Adapter.require_config is deprecated and will be removed in Lita 5.0.
54
+ Use Lita::Adapter.config instead.
55
+ required_configs_deprecated: >-
56
+ Lita::Adapter.required_configs is deprecated and will be removed in Lita 5.0.
57
+ Use Lita::Adapter.configuration instead.
44
58
  cli:
45
59
  no_gemfile_warning: >-
46
60
  The default command "start" must be run inside a Lita project. Try running `lita new` to
@@ -48,30 +62,68 @@ en:
48
62
  travis_question: Do you want to test your plugin on Travis CI?
49
63
  coveralls_question: |-
50
64
  Do you want to generate code coverage information with SimpleCov and Coveralls.io?
65
+ daemon_deprecated: >-
66
+ Lita's built-in daemonization is deprecated without replacement and will be removed in
67
+ Lita 5.0. Use your operating system's process manager instead.
51
68
  config:
69
+ adapter_deprecated:
70
+ config.adapter is deprecated and will be removed in Lita 5.0. Use config.adapters instead.
52
71
  exception: |
53
72
  Lita configuration file could not be processed. The exception was:
54
73
  %{message}
55
74
  Full backtrace:
56
75
  %{backtrace}
76
+ handler_default_config_deprecated: >-
77
+ Lita::Handler.default_config is deprecated and will be removed in Lita 5.0.
78
+ Use Lita::Handler.config instead. The method was found defined in the %{name} handler.
79
+ redis_struct_access_deprecated: >-
80
+ Struct-style access of config.redis is deprecated and will be removed in Lita 5.0.
81
+ config.redis is now a hash.
82
+ missing_required_adapter_attribute: >-
83
+ Configuration attribute "%{attribute}" is required for "%{adapter}" adapter.
84
+ missing_required_handler_attribute: >-
85
+ Configuration attribute "%{attribute}" is required for "%{handler}" handler.
57
86
  daemon:
58
87
  pid_exists: >-
59
88
  PID file exists at %{path}. Lita may already be running. Kill the existing process or
60
89
  remove the PID file and then start Lita.
61
90
  kill_failure: "Failed to kill existing Lita process %{pid}."
62
91
  handler:
63
- name_required: Handlers that are anonymous classes must define self.name.
64
92
  dispatch: "Dispatching message to %{handler}#%{method}."
65
93
  exception: |
66
94
  %{handler} crashed. The exception was:
67
95
  %{message}
68
96
  Full backtrace:
69
97
  %{backtrace}
98
+ http:
99
+ exception: |
100
+ Lita's built-in web server could not be started. The exception was:
101
+ %{message}
102
+ Full backtrace:
103
+ %{backtrace}
104
+ plugin:
105
+ name_required: Plugins that are anonymous classes must set a namespace or define self.name.
106
+ redis:
107
+ exception: |
108
+ Lita could not connect to Redis. The exception was:
109
+ %{message}
110
+ Full backtrace:
111
+ %{backtrace}
70
112
  robot:
71
113
  unknown_adapter: "Unknown adapter: :%{adapter}."
72
114
  rspec:
73
115
  full_suite_required: Lita::RSpec requires both RSpec::Mocks and RSpec::Expectations.
74
116
  version_3_required: RSpec::Core 3 or greater is required to use Lita::RSpec.
117
+ rack_test_required: Rack::Test is required to use the `http` method of Lita::RSpec.
118
+ lita_3_compatibility_mode: >-
119
+ WARNING: Lita 3 compatibility mode is currently enabled. It is recommended that you disable
120
+ it by adding the following code to spec/spec_helper.rb:
121
+
122
+ require "lita/rspec"
123
+ Lita.version_3_compatibility_mode = false
124
+
125
+ This will ensure that your test suite works with all the changes introduced in Lita 4. The
126
+ compatibility mode will be removed in Lita 5.
75
127
  route_failure: |-
76
128
  Expected message "%{message}" to route to :%{route}, but didn't.
77
129
  negative_route_failure: |-
@@ -84,7 +136,7 @@ en:
84
136
  Expected triggering event "%{event}" to invoke :%{route}, but didn't.
85
137
  negative_event_subscription_failure: |-
86
138
  Expected triggering event "%{event}" not to invoke :%{route}, but did.
139
+ matcher_deprecated: >-
140
+ `%{old_method}` is deprecated and will be removed in Lita 5.0. Use `%{new_method}` instead.
87
141
  source:
88
142
  user_or_room_required: Either a user or a room is required.
89
- user:
90
- find_deprecated: Lita::User.find will be removed in Lita 4.0. Use Lita::User.create instead.
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.add_development_dependency "bundler", "~> 1.3"
20
20
  spec.add_development_dependency "rake"
21
+ spec.add_development_dependency "rack-test"
21
22
  spec.add_development_dependency "rspec", ">= 3.0.0"
22
23
  <%- if config[:coveralls] -%>
23
24
  spec.add_development_dependency "simplecov"
@@ -10,3 +10,7 @@ SimpleCov.start { add_filter "/spec/" }
10
10
  <%- end -%>
11
11
  require "<%= config[:gem_name] %>"
12
12
  require "lita/rspec"
13
+
14
+ # A compatibility mode is provided for older plugins upgrading from Lita 3. Since this plugin
15
+ # was generated with Lita 4, the compatibility mode should be left disabled.
16
+ Lita.version_3_compatibility_mode = false
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1
4
+ version: 4.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Cuadra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2014-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rack-test
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: rspec
183
197
  requirement: !ruby/object:Gem::Requirement
@@ -269,27 +283,43 @@ files:
269
283
  - lib/lita/adapter.rb
270
284
  - lib/lita/adapters/shell.rb
271
285
  - lib/lita/authorization.rb
286
+ - lib/lita/builder.rb
287
+ - lib/lita/callback.rb
272
288
  - lib/lita/cli.rb
273
289
  - lib/lita/common.rb
274
290
  - lib/lita/config.rb
291
+ - lib/lita/configurable.rb
292
+ - lib/lita/configuration.rb
293
+ - lib/lita/configuration_validator.rb
275
294
  - lib/lita/daemon.rb
295
+ - lib/lita/default_configuration.rb
296
+ - lib/lita/errors.rb
276
297
  - lib/lita/handler.rb
298
+ - lib/lita/handler/chat_router.rb
299
+ - lib/lita/handler/common.rb
300
+ - lib/lita/handler/event_router.rb
301
+ - lib/lita/handler/http_router.rb
277
302
  - lib/lita/handlers/authorization.rb
303
+ - lib/lita/handlers/deprecation_check.rb
278
304
  - lib/lita/handlers/help.rb
279
305
  - lib/lita/handlers/info.rb
280
306
  - lib/lita/handlers/room.rb
307
+ - lib/lita/http_callback.rb
281
308
  - lib/lita/http_route.rb
282
309
  - lib/lita/logger.rb
283
310
  - lib/lita/message.rb
311
+ - lib/lita/namespace.rb
284
312
  - lib/lita/rack_app.rb
313
+ - lib/lita/registry.rb
285
314
  - lib/lita/response.rb
286
315
  - lib/lita/robot.rb
287
316
  - lib/lita/route_validator.rb
288
317
  - lib/lita/rspec.rb
289
318
  - lib/lita/rspec/handler.rb
290
- - lib/lita/rspec/matchers/event_subscription_matcher.rb
319
+ - lib/lita/rspec/matchers/chat_route_matcher.rb
320
+ - lib/lita/rspec/matchers/deprecated.rb
321
+ - lib/lita/rspec/matchers/event_route_matcher.rb
291
322
  - lib/lita/rspec/matchers/http_route_matcher.rb
292
- - lib/lita/rspec/matchers/route_matcher.rb
293
323
  - lib/lita/source.rb
294
324
  - lib/lita/timer.rb
295
325
  - lib/lita/user.rb
@@ -299,16 +329,24 @@ files:
299
329
  - spec/lita/adapter_spec.rb
300
330
  - spec/lita/adapters/shell_spec.rb
301
331
  - spec/lita/authorization_spec.rb
332
+ - spec/lita/builder_spec.rb
302
333
  - spec/lita/config_spec.rb
334
+ - spec/lita/configuration_spec.rb
335
+ - spec/lita/configuration_validator_spec.rb
303
336
  - spec/lita/daemon_spec.rb
337
+ - spec/lita/default_configuration_spec.rb
338
+ - spec/lita/handler/chat_router_spec.rb
339
+ - spec/lita/handler/common_spec.rb
340
+ - spec/lita/handler/event_router_spec.rb
341
+ - spec/lita/handler/http_router_spec.rb
304
342
  - spec/lita/handler_spec.rb
305
343
  - spec/lita/handlers/authorization_spec.rb
344
+ - spec/lita/handlers/deprecation_check_spec.rb
306
345
  - spec/lita/handlers/help_spec.rb
307
346
  - spec/lita/handlers/info_spec.rb
308
347
  - spec/lita/handlers/room_spec.rb
309
348
  - spec/lita/logger_spec.rb
310
349
  - spec/lita/message_spec.rb
311
- - spec/lita/rack_app_spec.rb
312
350
  - spec/lita/response_spec.rb
313
351
  - spec/lita/robot_spec.rb
314
352
  - spec/lita/rspec_spec.rb
@@ -348,9 +386,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
348
386
  version: 2.0.0
349
387
  required_rubygems_version: !ruby/object:Gem::Requirement
350
388
  requirements:
351
- - - ">="
389
+ - - ">"
352
390
  - !ruby/object:Gem::Version
353
- version: '0'
391
+ version: 1.3.1
354
392
  requirements: []
355
393
  rubyforge_project:
356
394
  rubygems_version: 2.2.2
@@ -361,16 +399,24 @@ test_files:
361
399
  - spec/lita/adapter_spec.rb
362
400
  - spec/lita/adapters/shell_spec.rb
363
401
  - spec/lita/authorization_spec.rb
402
+ - spec/lita/builder_spec.rb
364
403
  - spec/lita/config_spec.rb
404
+ - spec/lita/configuration_spec.rb
405
+ - spec/lita/configuration_validator_spec.rb
365
406
  - spec/lita/daemon_spec.rb
407
+ - spec/lita/default_configuration_spec.rb
408
+ - spec/lita/handler/chat_router_spec.rb
409
+ - spec/lita/handler/common_spec.rb
410
+ - spec/lita/handler/event_router_spec.rb
411
+ - spec/lita/handler/http_router_spec.rb
366
412
  - spec/lita/handler_spec.rb
367
413
  - spec/lita/handlers/authorization_spec.rb
414
+ - spec/lita/handlers/deprecation_check_spec.rb
368
415
  - spec/lita/handlers/help_spec.rb
369
416
  - spec/lita/handlers/info_spec.rb
370
417
  - spec/lita/handlers/room_spec.rb
371
418
  - spec/lita/logger_spec.rb
372
419
  - spec/lita/message_spec.rb
373
- - spec/lita/rack_app_spec.rb
374
420
  - spec/lita/response_spec.rb
375
421
  - spec/lita/robot_spec.rb
376
422
  - spec/lita/rspec_spec.rb
@@ -1,67 +0,0 @@
1
- module Lita
2
- module RSpec
3
- # A namespace to hold all of Lita's RSpec matchers.
4
- module Matchers
5
- # Used to complete an event subscription test chain.
6
- class EventSubscriptionMatcher
7
- attr_accessor :context, :event_name, :expectation
8
- attr_reader :expected_route
9
-
10
- def initialize(context, event_name, expectation: true)
11
- self.context = context
12
- self.event_name = event_name
13
- self.expectation = expectation
14
- end
15
-
16
- # Sets an expectation that a handler method will or will not be called in
17
- # response to a triggered event, then triggers the event.
18
- # @param target_method_name [String, Symbol] The name of the method that
19
- # should or should not be triggered.
20
- # @return [void]
21
- def to(target_method_name)
22
- self.expected_route = target_method_name
23
-
24
- e = expectation
25
- ev = event_name
26
- i = i18n_key
27
-
28
- context.instance_eval do
29
- called = false
30
- allow(subject).to receive(target_method_name) { called = true }
31
- robot.trigger(ev)
32
- expect(called).to be(e), I18n.t(i, event: ev, route: target_method_name)
33
- end
34
- end
35
-
36
- private
37
-
38
- def description_prefix
39
- if expectation
40
- "routes event"
41
- else
42
- "doesn't route event"
43
- end
44
- end
45
-
46
- def expected_route=(route)
47
- @expected_route = route
48
- set_description
49
- end
50
-
51
- def i18n_key
52
- if expectation
53
- "lita.rspec.event_subscription_failure"
54
- else
55
- "lita.rspec.negative_event_subscription_failure"
56
- end
57
- end
58
-
59
- def set_description
60
- description = %(#{description_prefix} "#{event_name}")
61
- description << " to :#{expected_route}" if expected_route
62
- ::RSpec.current_example.metadata[:description] = description
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,69 +0,0 @@
1
- module Lita
2
- module RSpec
3
- # A namespace to hold all of Lita's RSpec matchers.
4
- module Matchers
5
- # Used to complete a chat routing test chain.
6
- class RouteMatcher
7
- attr_accessor :context, :expectation, :message_body
8
- attr_reader :expected_route
9
-
10
- def initialize(context, message_body, expectation: true)
11
- self.context = context
12
- self.message_body = message_body
13
- self.expectation = expectation
14
- set_description
15
- end
16
-
17
- # Sets an expectation that a route will or will not be triggered, then
18
- # sends the message originally provided.
19
- # @param route [Symbol] The name of the method that should or should not
20
- # be triggered.
21
- # @return [void]
22
- def to(route)
23
- self.expected_route = route
24
-
25
- e = expectation
26
- b = message_body
27
- i = i18n_key
28
-
29
- context.instance_eval do
30
- allow(Authorization).to receive(:user_in_group?).and_return(true)
31
- called = false
32
- allow(subject).to receive(route) { called = true }
33
- send_message(b)
34
- expect(called).to be(e), I18n.t(i, message: b, route: route)
35
- end
36
- end
37
-
38
- private
39
-
40
- def description_prefix
41
- if expectation
42
- "routes"
43
- else
44
- "doesn't route"
45
- end
46
- end
47
-
48
- def expected_route=(route)
49
- @expected_route = route
50
- set_description
51
- end
52
-
53
- def i18n_key
54
- if expectation
55
- "lita.rspec.route_failure"
56
- else
57
- "lita.rspec.negative_route_failure"
58
- end
59
- end
60
-
61
- def set_description
62
- description = %(#{description_prefix} "#{message_body}")
63
- description << " to :#{expected_route}" if expected_route
64
- ::RSpec.current_example.metadata[:description] = description
65
- end
66
- end
67
- end
68
- end
69
- end
@@ -1,92 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Lita::RackApp do
4
- let(:handler_class) do
5
- Class.new(Lita::Handler) do
6
- http.get "web", :web
7
- http.post "path/with/:id", :variable
8
- http.link "foo", :foo
9
- http.get "heres/*a/glob/in/a/path", :glob
10
- http.get ":var/otherwise/identical/path", :constraint, var: /\d+/
11
- http.get ":var/otherwise/identical/path", :no_constraint
12
-
13
- def web(_request, response)
14
- response.write("it worked")
15
- end
16
-
17
- def variable(request, response)
18
- id = request.env["router.params"][:id]
19
- response.write("id is #{id}")
20
- end
21
-
22
- def glob(request, response)
23
- segments = request.env["router.params"][:a]
24
- response.write(segments.join("/"))
25
- end
26
-
27
- def constraint(_request, response)
28
- response.write("constraint")
29
- end
30
-
31
- def no_constraint(_request, response)
32
- response.write("no constraint")
33
- end
34
-
35
- def self.name
36
- "Lita::Handlers::Test"
37
- end
38
- end
39
- end
40
-
41
- let(:robot) { instance_double("Lita::Robot") }
42
-
43
- before { allow(Lita).to receive(:handlers).and_return([handler_class]) }
44
-
45
- subject { described_class.new(robot) }
46
-
47
- it "responds to requests for simple paths" do
48
- env = Rack::MockRequest.env_for("/web")
49
- status, _headers, body_proxy = subject.call(env)
50
- expect(status).to eq(200)
51
- expect(body_proxy.body.first).to eq("it worked")
52
- end
53
-
54
- it "responds to requests with variable paths" do
55
- env = Rack::MockRequest.env_for("/path/with/some_id", method: "POST")
56
- status, _headers, body_proxy = subject.call(env)
57
- expect(status).to eq(200)
58
- expect(body_proxy.body.first).to eq("id is some_id")
59
- end
60
-
61
- it "responds to requests with globs in their paths" do
62
- env = Rack::MockRequest.env_for("/heres/a/giant/glob/in/a/path")
63
- status, _headers, body_proxy = subject.call(env)
64
- expect(status).to eq(200)
65
- expect(body_proxy.body.first).to eq("a/giant")
66
- end
67
-
68
- it "responds to requests with variable path constraints" do
69
- env = Rack::MockRequest.env_for("/123/otherwise/identical/path")
70
- status, _headers, body_proxy = subject.call(env)
71
- expect(status).to eq(200)
72
- expect(body_proxy.body.first).to eq("constraint")
73
-
74
- env = Rack::MockRequest.env_for("/an/otherwise/identical/path")
75
- status, _headers, body_proxy = subject.call(env)
76
- expect(status).to eq(200)
77
- expect(body_proxy.body.first).to eq("no constraint")
78
- end
79
-
80
- it "responds to HEAD requests for GET routes" do
81
- env = Rack::MockRequest.env_for("/web", method: "HEAD")
82
- status, _headers, body = subject.call(env)
83
- expect(status).to eq(204)
84
- expect(body).to be_empty
85
- end
86
-
87
- it "doesn't respond to HEAD requests for non-GET routes" do
88
- env = Rack::MockRequest.env_for("/path/with/some_id", method: "HEAD")
89
- status, _headers, _body = subject.call(env)
90
- expect(status).to eq(405)
91
- end
92
- end