lita 3.3.1 → 4.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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