shoulda-matchers 4.4.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +22 -0
- data/README.md +18 -18
- data/lib/shoulda/matchers.rb +12 -13
- data/lib/shoulda/matchers/action_controller.rb +13 -13
- data/lib/shoulda/matchers/action_controller/callback_matcher.rb +4 -89
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +3 -2
- data/lib/shoulda/matchers/action_controller/flash_store.rb +2 -4
- data/lib/shoulda/matchers/action_controller/permit_matcher.rb +29 -27
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +6 -8
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +6 -8
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +16 -13
- data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +2 -1
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +5 -6
- data/lib/shoulda/matchers/action_controller/route_params.rb +1 -1
- data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +19 -13
- data/lib/shoulda/matchers/active_model.rb +25 -15
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +29 -36
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb +5 -5
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb +2 -2
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb +1 -1
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +51 -25
- data/lib/shoulda/matchers/active_model/helpers.rb +2 -2
- data/lib/shoulda/matchers/active_model/numericality_matchers.rb +0 -5
- data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +32 -34
- data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb +1 -1
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +10 -2
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +2 -2
- data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +8 -7
- data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +26 -25
- data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +6 -6
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +40 -27
- data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +6 -8
- data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +2 -4
- data/lib/shoulda/matchers/active_model/validation_message_finder.rb +2 -4
- data/lib/shoulda/matchers/active_model/validator.rb +4 -9
- data/lib/shoulda/matchers/active_record.rb +26 -14
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +6 -3
- data/lib/shoulda/matchers/active_record/association_matcher.rb +101 -48
- data/lib/shoulda/matchers/active_record/association_matchers.rb +0 -12
- data/lib/shoulda/matchers/active_record/association_matchers/counter_cache_matcher.rb +5 -2
- data/lib/shoulda/matchers/active_record/association_matchers/dependent_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_record/association_matchers/inverse_of_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +11 -6
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +2 -9
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +12 -7
- data/lib/shoulda/matchers/active_record/association_matchers/option_verifier.rb +23 -5
- data/lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_record/association_matchers/order_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb +3 -2
- data/lib/shoulda/matchers/active_record/association_matchers/through_matcher.rb +7 -5
- data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +18 -9
- data/lib/shoulda/matchers/active_record/have_attached_matcher.rb +46 -8
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +39 -17
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +1 -1
- data/lib/shoulda/matchers/active_record/have_implicit_order_column.rb +7 -7
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +12 -10
- data/lib/shoulda/matchers/active_record/have_rich_text_matcher.rb +11 -7
- data/lib/shoulda/matchers/active_record/have_secure_token_matcher.rb +2 -0
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +13 -9
- data/lib/shoulda/matchers/active_record/uniqueness.rb +4 -4
- data/lib/shoulda/matchers/active_record/uniqueness/test_model_creator.rb +1 -3
- data/lib/shoulda/matchers/active_record/uniqueness/test_models.rb +0 -2
- data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +78 -71
- data/lib/shoulda/matchers/doublespeak.rb +9 -9
- data/lib/shoulda/matchers/doublespeak/double.rb +1 -1
- data/lib/shoulda/matchers/doublespeak/double_collection.rb +3 -3
- data/lib/shoulda/matchers/doublespeak/double_implementation_registry.rb +8 -5
- data/lib/shoulda/matchers/doublespeak/object_double.rb +1 -1
- data/lib/shoulda/matchers/doublespeak/stub_implementation.rb +1 -5
- data/lib/shoulda/matchers/doublespeak/world.rb +2 -2
- data/lib/shoulda/matchers/error.rb +1 -1
- data/lib/shoulda/matchers/independent.rb +1 -0
- data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +14 -16
- data/lib/shoulda/matchers/integrations.rb +6 -6
- data/lib/shoulda/matchers/integrations/configuration.rb +1 -1
- data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +1 -1
- data/lib/shoulda/matchers/integrations/libraries/rails.rb +2 -2
- data/lib/shoulda/matchers/integrations/test_frameworks.rb +2 -4
- data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +1 -1
- data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +1 -1
- data/lib/shoulda/matchers/rails_shim.rb +5 -42
- data/lib/shoulda/matchers/util.rb +9 -2
- data/lib/shoulda/matchers/util/word_wrap.rb +7 -7
- data/lib/shoulda/matchers/version.rb +1 -1
- data/lib/shoulda/matchers/warn.rb +3 -3
- data/shoulda-matchers.gemspec +12 -9
- metadata +14 -14
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +0 -159
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 319b0cb3944a37309b11169bd71ffddde2d6af35b262795e7c16466d6d2c497c
|
4
|
+
data.tar.gz: 22ac49d578766e24a18826bcde86443a09afa41c1cfc9ee7932f94f214623a36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05a067ef5aa288661855f6257a55ce887bdf19f6684cd965c145669815a3d432a236cd7fb88e21647d0251e4e971b6c45b03af04def19b5cefbef26279276d81
|
7
|
+
data.tar.gz: f06e9c331d39d82fd450332cb0b81e108852c7fac2a28927ada2fbccc11b31226206023f69eb6ecccd7dceaaca4c9b3410b818ed86babd3f7f37bb4c778013df
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2006-2021 Tammer Saleh and thoughtbot, inc.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
# Shoulda Matchers [![Gem Version][version-badge]][rubygems] [![Build Status][
|
1
|
+
# Shoulda Matchers [![Gem Version][version-badge]][rubygems] [![Build Status][github-actions-badge]][github-actions] [![Total Downloads][downloads-total]][rubygems] [![Downloads][downloads-badge]][rubygems]
|
2
2
|
|
3
3
|
[version-badge]: https://img.shields.io/gem/v/shoulda-matchers.svg
|
4
4
|
[rubygems]: https://rubygems.org/gems/shoulda-matchers
|
5
|
-
[
|
6
|
-
[
|
5
|
+
[github-actions-badge]: https://img.shields.io/github/workflow/status/thoughtbot/shoulda-matchers/Test
|
6
|
+
[github-actions]: https://github.com/thoughtbot/shoulda-matchers/actions
|
7
7
|
[downloads-total]: https://img.shields.io/gem/dt/shoulda-matchers.svg
|
8
8
|
[downloads-badge]: https://img.shields.io/gem/dtv/shoulda-matchers.svg
|
9
9
|
[downloads-badge]: https://img.shields.io/gem/dtv/shoulda-matchers.svg
|
10
|
-
[hound-badge]: https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg
|
11
|
-
[hound]: https://houndci.com
|
12
10
|
|
13
11
|
[![shoulda-matchers][logo]][website]
|
14
12
|
|
@@ -24,7 +22,7 @@ complex, and error-prone.
|
|
24
22
|
📖 **[Read the documentation for the latest version][rubydocs].**
|
25
23
|
📢 **[See what's changed in recent versions][changelog].**
|
26
24
|
|
27
|
-
[rubydocs]:
|
25
|
+
[rubydocs]: https://matchers.shoulda.io/docs
|
28
26
|
[changelog]: CHANGELOG.md
|
29
27
|
|
30
28
|
## Table of contents
|
@@ -57,7 +55,7 @@ Start by including `shoulda-matchers` in your Gemfile:
|
|
57
55
|
|
58
56
|
```ruby
|
59
57
|
group :test do
|
60
|
-
gem 'shoulda-matchers', '~>
|
58
|
+
gem 'shoulda-matchers', '~> 5.0'
|
61
59
|
end
|
62
60
|
```
|
63
61
|
|
@@ -385,7 +383,7 @@ about any of them, make sure to [consult the documentation][rubydocs]!
|
|
385
383
|
tests your `belongs_to` associations.
|
386
384
|
* **[define_enum_for](lib/shoulda/matchers/active_record/define_enum_for_matcher.rb)**
|
387
385
|
tests usage of the `enum` macro.
|
388
|
-
* **[have_and_belong_to_many](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
386
|
+
* **[have_and_belong_to_many](lib/shoulda/matchers/active_record/association_matcher.rb#L827)**
|
389
387
|
tests your `has_and_belongs_to_many` associations.
|
390
388
|
* **[have_db_column](lib/shoulda/matchers/active_record/have_db_column_matcher.rb)**
|
391
389
|
tests that the table that backs your model has a specific column.
|
@@ -393,11 +391,11 @@ about any of them, make sure to [consult the documentation][rubydocs]!
|
|
393
391
|
tests that the table that backs your model has an index on a specific column.
|
394
392
|
* **[have_implicit_order_column](lib/shoulda/matchers/active_record/have_implicit_order_column.rb)**
|
395
393
|
tests usage of `implicit_order_column`.
|
396
|
-
* **[have_many](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
394
|
+
* **[have_many](lib/shoulda/matchers/active_record/association_matcher.rb#L328)**
|
397
395
|
tests your `has_many` associations.
|
398
396
|
* **[have_many_attached](lib/shoulda/matchers/active_record/have_attached_matcher.rb)**
|
399
397
|
tests your `has_many_attached` associations.
|
400
|
-
* **[have_one](lib/shoulda/matchers/active_record/association_matcher.rb)**
|
398
|
+
* **[have_one](lib/shoulda/matchers/active_record/association_matcher.rb#L598)**
|
401
399
|
tests your `has_one` associations.
|
402
400
|
* **[have_one_attached](lib/shoulda/matchers/active_record/have_attached_matcher.rb)**
|
403
401
|
tests your `has_one_attached` associations.
|
@@ -432,11 +430,11 @@ about any of them, make sure to [consult the documentation][rubydocs]!
|
|
432
430
|
makes assertions on the `session` hash.
|
433
431
|
* **[set_flash](lib/shoulda/matchers/action_controller/set_flash_matcher.rb)**
|
434
432
|
makes assertions on the `flash` hash.
|
435
|
-
* **[use_after_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#
|
433
|
+
* **[use_after_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L29)**
|
436
434
|
tests that an `after_action` callback is defined in your controller.
|
437
|
-
* **[use_around_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#
|
435
|
+
* **[use_around_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L75)**
|
438
436
|
tests that an `around_action` callback is defined in your controller.
|
439
|
-
* **[use_before_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#
|
437
|
+
* **[use_before_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L4)**
|
440
438
|
tests that a `before_action` callback is defined in your controller.
|
441
439
|
|
442
440
|
### Routing matchers
|
@@ -470,17 +468,19 @@ machine, understanding the codebase, and creating a good pull request.
|
|
470
468
|
|
471
469
|
## Compatibility
|
472
470
|
|
473
|
-
Shoulda Matchers is
|
474
|
-
|
471
|
+
Shoulda Matchers is tested and supported against Ruby 2.6+, Rails
|
472
|
+
5.2+, RSpec 3.x, and Minitest 5.x.
|
475
473
|
|
476
|
-
For Ruby < 2.4 and Rails < 4.1 compatibility, please use [v3.1.3][v3.1.3].
|
474
|
+
- For Ruby < 2.4 and Rails < 4.1 compatibility, please use [v3.1.3][v3.1.3].
|
475
|
+
- For Ruby < 3.0 and Rails < 6.1 compatibility, please use [v4.5.1][v4.5.1].
|
477
476
|
|
478
477
|
[v3.1.3]: https://github.com/thoughtbot/shoulda-matchers/tree/v3.1.3
|
478
|
+
[v4.5.1]: https://github.com/thoughtbot/shoulda-matchers/tree/v4.5.1
|
479
479
|
|
480
480
|
## Versioning
|
481
481
|
|
482
482
|
Shoulda Matchers follows Semantic Versioning 2.0 as defined at
|
483
|
-
<
|
483
|
+
<https://semver.org>.
|
484
484
|
|
485
485
|
## Team
|
486
486
|
|
@@ -492,7 +492,7 @@ Albuk][guialbuk].
|
|
492
492
|
|
493
493
|
## Copyright/License
|
494
494
|
|
495
|
-
Shoulda Matchers is copyright © 2006-
|
495
|
+
Shoulda Matchers is copyright © 2006-2021 Tammer Saleh and [thoughtbot,
|
496
496
|
inc][thoughtbot-website]. It is free and opensource software and may be
|
497
497
|
redistributed under the terms specified in the [LICENSE](LICENSE) file.
|
498
498
|
|
data/lib/shoulda/matchers.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
require 'shoulda/matchers/configuration'
|
2
|
+
require 'shoulda/matchers/doublespeak'
|
3
|
+
require 'shoulda/matchers/error'
|
4
|
+
require 'shoulda/matchers/independent'
|
5
|
+
require 'shoulda/matchers/integrations'
|
6
|
+
require 'shoulda/matchers/matcher_context'
|
7
|
+
require 'shoulda/matchers/rails_shim'
|
8
|
+
require 'shoulda/matchers/util'
|
2
9
|
require 'shoulda/matchers/version'
|
3
10
|
require 'shoulda/matchers/warn'
|
4
11
|
|
12
|
+
require 'shoulda/matchers/action_controller'
|
13
|
+
require 'shoulda/matchers/active_model'
|
14
|
+
require 'shoulda/matchers/active_record'
|
15
|
+
require 'shoulda/matchers/routing'
|
16
|
+
|
5
17
|
module Shoulda
|
6
18
|
module Matchers
|
7
|
-
autoload :ActionController, 'shoulda/matchers/action_controller'
|
8
|
-
autoload :ActiveModel, 'shoulda/matchers/active_model'
|
9
|
-
autoload :ActiveRecord, 'shoulda/matchers/active_record'
|
10
|
-
autoload :Doublespeak, 'shoulda/matchers/doublespeak'
|
11
|
-
autoload :Error, 'shoulda/matchers/error'
|
12
|
-
autoload :Independent, 'shoulda/matchers/independent'
|
13
|
-
autoload :Integrations, 'shoulda/matchers/integrations'
|
14
|
-
autoload :MatcherContext, 'shoulda/matchers/matcher_context'
|
15
|
-
autoload :RailsShim, 'shoulda/matchers/rails_shim'
|
16
|
-
autoload :Routing, 'shoulda/matchers/routing'
|
17
|
-
autoload :Util, 'shoulda/matchers/util'
|
18
|
-
autoload :WordWrap, 'shoulda/matchers/util/word_wrap'
|
19
|
-
|
20
19
|
class << self
|
21
20
|
# @private
|
22
21
|
attr_accessor :assertion_exception_class
|
@@ -1,24 +1,24 @@
|
|
1
|
+
require 'shoulda/matchers/action_controller/filter_param_matcher'
|
2
|
+
require 'shoulda/matchers/action_controller/route_params'
|
3
|
+
require 'shoulda/matchers/action_controller/set_flash_matcher'
|
4
|
+
require 'shoulda/matchers/action_controller/render_with_layout_matcher'
|
1
5
|
require 'shoulda/matchers/action_controller/respond_with_matcher'
|
6
|
+
require 'shoulda/matchers/action_controller/set_session_matcher'
|
2
7
|
require 'shoulda/matchers/action_controller/route_matcher'
|
8
|
+
require 'shoulda/matchers/action_controller/redirect_to_matcher'
|
9
|
+
require 'shoulda/matchers/action_controller/render_template_matcher'
|
10
|
+
require 'shoulda/matchers/action_controller/rescue_from_matcher'
|
11
|
+
require 'shoulda/matchers/action_controller/callback_matcher'
|
12
|
+
require 'shoulda/matchers/action_controller/permit_matcher'
|
13
|
+
require 'shoulda/matchers/action_controller/set_session_or_flash_matcher'
|
14
|
+
require 'shoulda/matchers/action_controller/flash_store'
|
15
|
+
require 'shoulda/matchers/action_controller/session_store'
|
3
16
|
|
4
17
|
module Shoulda
|
5
18
|
module Matchers
|
6
19
|
# This module provides matchers that are used to test behavior within
|
7
20
|
# controllers.
|
8
21
|
module ActionController
|
9
|
-
autoload :CallbackMatcher, 'shoulda/matchers/action_controller/callback_matcher'
|
10
|
-
autoload :FlashStore, 'shoulda/matchers/action_controller/flash_store'
|
11
|
-
autoload :FilterParamMatcher, 'shoulda/matchers/action_controller/filter_param_matcher'
|
12
|
-
autoload :PermitMatcher, 'shoulda/matchers/action_controller/permit_matcher'
|
13
|
-
autoload :RedirectToMatcher, 'shoulda/matchers/action_controller/redirect_to_matcher'
|
14
|
-
autoload :RenderTemplateMatcher, 'shoulda/matchers/action_controller/render_template_matcher'
|
15
|
-
autoload :RenderWithLayoutMatcher, 'shoulda/matchers/action_controller/render_with_layout_matcher'
|
16
|
-
autoload :RescueFromMatcher, 'shoulda/matchers/action_controller/rescue_from_matcher'
|
17
|
-
autoload :RouteParams, 'shoulda/matchers/action_controller/route_params'
|
18
|
-
autoload :SessionStore, 'shoulda/matchers/action_controller/session_store'
|
19
|
-
autoload :SetFlashMatcher, 'shoulda/matchers/action_controller/set_flash_matcher'
|
20
|
-
autoload :SetSessionMatcher, 'shoulda/matchers/action_controller/set_session_matcher'
|
21
|
-
autoload :SetSessionOrFlashMatcher, 'shoulda/matchers/action_controller/set_session_or_flash_matcher'
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -1,64 +1,6 @@
|
|
1
1
|
module Shoulda
|
2
2
|
module Matchers
|
3
3
|
module ActionController
|
4
|
-
# The `use_before_filter` matcher is used to test that a before_filter
|
5
|
-
# callback is defined within your controller.
|
6
|
-
#
|
7
|
-
# class UsersController < ApplicationController
|
8
|
-
# before_filter :authenticate_user!
|
9
|
-
# end
|
10
|
-
#
|
11
|
-
# # RSpec
|
12
|
-
# RSpec.describe UsersController, type: :controller do
|
13
|
-
# it { should use_before_filter(:authenticate_user!) }
|
14
|
-
# it { should_not use_before_filter(:prevent_ssl) }
|
15
|
-
# end
|
16
|
-
#
|
17
|
-
# # Minitest (Shoulda)
|
18
|
-
# class UsersControllerTest < ActionController::TestCase
|
19
|
-
# should use_before_filter(:authenticate_user!)
|
20
|
-
# should_not use_before_filter(:prevent_ssl)
|
21
|
-
# end
|
22
|
-
#
|
23
|
-
# @note This method is only available when using shoulda-matchers under
|
24
|
-
# Rails 4.x.
|
25
|
-
# @return [CallbackMatcher]
|
26
|
-
#
|
27
|
-
if RailsShim.action_pack_lt_5?
|
28
|
-
def use_before_filter(callback)
|
29
|
-
CallbackMatcher.new(callback, :before, :filter)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
# The `use_after_filter` matcher is used to test that an after_filter
|
34
|
-
# callback is defined within your controller.
|
35
|
-
#
|
36
|
-
# class IssuesController < ApplicationController
|
37
|
-
# after_filter :log_activity
|
38
|
-
# end
|
39
|
-
#
|
40
|
-
# # RSpec
|
41
|
-
# RSpec.describe IssuesController, type: :controller do
|
42
|
-
# it { should use_after_filter(:log_activity) }
|
43
|
-
# it { should_not use_after_filter(:destroy_user) }
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# # Minitest (Shoulda)
|
47
|
-
# class IssuesControllerTest < ActionController::TestCase
|
48
|
-
# should use_after_filter(:log_activity)
|
49
|
-
# should_not use_after_filter(:destroy_user)
|
50
|
-
# end
|
51
|
-
#
|
52
|
-
# @note This method is only available when using shoulda-matchers under
|
53
|
-
# Rails 4.x.
|
54
|
-
# @return [CallbackMatcher]
|
55
|
-
#
|
56
|
-
if RailsShim.action_pack_lt_5?
|
57
|
-
def use_after_filter(callback)
|
58
|
-
CallbackMatcher.new(callback, :after, :filter)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
4
|
# The `use_before_action` matcher is used to test that a before_action
|
63
5
|
# callback is defined within your controller.
|
64
6
|
#
|
@@ -109,35 +51,6 @@ module Shoulda
|
|
109
51
|
CallbackMatcher.new(callback, :after, :action)
|
110
52
|
end
|
111
53
|
|
112
|
-
# The `use_around_filter` matcher is used to test that an around_filter
|
113
|
-
# callback is defined within your controller.
|
114
|
-
#
|
115
|
-
# class ChangesController < ApplicationController
|
116
|
-
# around_filter :wrap_in_transaction
|
117
|
-
# end
|
118
|
-
#
|
119
|
-
# # RSpec
|
120
|
-
# RSpec.describe ChangesController, type: :controller do
|
121
|
-
# it { should use_around_filter(:wrap_in_transaction) }
|
122
|
-
# it { should_not use_around_filter(:save_view_context) }
|
123
|
-
# end
|
124
|
-
#
|
125
|
-
# # Minitest (Shoulda)
|
126
|
-
# class ChangesControllerTest < ActionController::TestCase
|
127
|
-
# should use_around_filter(:wrap_in_transaction)
|
128
|
-
# should_not use_around_filter(:save_view_context)
|
129
|
-
# end
|
130
|
-
#
|
131
|
-
# @note This method is only available when using shoulda-matchers under
|
132
|
-
# Rails 4.x.
|
133
|
-
# @return [CallbackMatcher]
|
134
|
-
#
|
135
|
-
if RailsShim.action_pack_lt_5?
|
136
|
-
def use_around_filter(callback)
|
137
|
-
CallbackMatcher.new(callback, :around, :filter)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
54
|
# The `use_around_action` matcher is used to test that an around_action
|
142
55
|
# callback is defined within your controller.
|
143
56
|
#
|
@@ -179,11 +92,13 @@ module Shoulda
|
|
179
92
|
end
|
180
93
|
|
181
94
|
def failure_message
|
182
|
-
"Expected that #{controller_class.name} would have :#{method_name}
|
95
|
+
"Expected that #{controller_class.name} would have :#{method_name}"\
|
96
|
+
" as a #{kind}_#{callback_type}"
|
183
97
|
end
|
184
98
|
|
185
99
|
def failure_message_when_negated
|
186
|
-
"Expected that #{controller_class.name} would not have
|
100
|
+
"Expected that #{controller_class.name} would not have"\
|
101
|
+
" :#{method_name} as a #{kind}_#{callback_type}"
|
187
102
|
end
|
188
103
|
|
189
104
|
def description
|
@@ -31,12 +31,13 @@ module Shoulda
|
|
31
31
|
@key = key
|
32
32
|
end
|
33
33
|
|
34
|
-
def matches?(
|
34
|
+
def matches?(_controller)
|
35
35
|
filters_key?
|
36
36
|
end
|
37
37
|
|
38
38
|
def failure_message
|
39
|
-
"Expected #{@key} to be filtered; filtered keys:
|
39
|
+
"Expected #{@key} to be filtered; filtered keys:"\
|
40
|
+
" #{filtered_keys.join(', ')}"
|
40
41
|
end
|
41
42
|
|
42
43
|
def failure_message_when_negated
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'active_support/core_ext/module/delegation'
|
1
2
|
module Shoulda
|
2
3
|
module Matchers
|
3
4
|
module ActionController
|
@@ -34,10 +35,7 @@ module Shoulda
|
|
34
35
|
expected_value === actual_value
|
35
36
|
end
|
36
37
|
end
|
37
|
-
|
38
|
-
def empty?
|
39
|
-
flash.empty?
|
40
|
-
end
|
38
|
+
delegate :empty?, to: :flash
|
41
39
|
|
42
40
|
def use_now!
|
43
41
|
@use_now = true
|
@@ -209,7 +209,8 @@ module Shoulda
|
|
209
209
|
attr_writer :stubbed_params
|
210
210
|
|
211
211
|
def initialize(expected_permitted_parameter_names)
|
212
|
-
@expected_permitted_parameter_names =
|
212
|
+
@expected_permitted_parameter_names =
|
213
|
+
expected_permitted_parameter_names
|
213
214
|
@action = nil
|
214
215
|
@verb = nil
|
215
216
|
@request_params = {}
|
@@ -250,30 +251,29 @@ module Shoulda
|
|
250
251
|
parameters_double_registry.register
|
251
252
|
|
252
253
|
Doublespeak.with_doubles_activated do
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
action,
|
257
|
-
request_params,
|
258
|
-
)
|
254
|
+
params = { params: request_params }
|
255
|
+
|
256
|
+
context.__send__(verb, action, **params)
|
259
257
|
end
|
260
258
|
|
261
259
|
unpermitted_parameter_names.empty?
|
262
260
|
end
|
263
261
|
|
264
262
|
def failure_message
|
265
|
-
"Expected #{verb.upcase} ##{action} to #{expectation}
|
263
|
+
"Expected #{verb.upcase} ##{action} to #{expectation},"\
|
264
|
+
"\nbut #{reality}."
|
266
265
|
end
|
267
266
|
|
268
267
|
def failure_message_when_negated
|
269
|
-
"Expected #{verb.upcase} ##{action} not to #{expectation}
|
268
|
+
"Expected #{verb.upcase} ##{action} not to #{expectation},"\
|
269
|
+
"\nbut it did."
|
270
270
|
end
|
271
271
|
|
272
272
|
protected
|
273
273
|
|
274
|
-
attr_reader :controller, :double_collections_by_parameter_name, :action,
|
275
|
-
:
|
276
|
-
:parameters_double_registry
|
274
|
+
attr_reader :controller, :double_collections_by_parameter_name, :action,
|
275
|
+
:verb, :request_params, :expected_permitted_parameter_names,
|
276
|
+
:context, :subparameter_name, :parameters_double_registry
|
277
277
|
|
278
278
|
def expectation
|
279
279
|
message = 'restrict parameters '
|
@@ -282,7 +282,8 @@ module Shoulda
|
|
282
282
|
message << "on #{subparameter_name.inspect} "
|
283
283
|
end
|
284
284
|
|
285
|
-
message << 'to '
|
285
|
+
message << 'to '\
|
286
|
+
"#{format_parameter_names(expected_permitted_parameter_names)}"
|
286
287
|
|
287
288
|
message
|
288
289
|
end
|
@@ -291,9 +292,9 @@ module Shoulda
|
|
291
292
|
if actual_permitted_parameter_names.empty?
|
292
293
|
'it did not restrict any parameters'
|
293
294
|
else
|
294
|
-
'the restricted parameters were '
|
295
|
-
|
296
|
-
|
295
|
+
'the restricted parameters were '\
|
296
|
+
"#{format_parameter_names(actual_permitted_parameter_names)}"\
|
297
|
+
' instead'
|
297
298
|
end
|
298
299
|
end
|
299
300
|
|
@@ -303,12 +304,12 @@ module Shoulda
|
|
303
304
|
|
304
305
|
def actual_permitted_parameter_names
|
305
306
|
@_actual_permitted_parameter_names ||= begin
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
307
|
+
options =
|
308
|
+
if subparameter_name
|
309
|
+
{ for: subparameter_name }
|
310
|
+
else
|
311
|
+
{}
|
312
|
+
end
|
312
313
|
parameters_double_registry.permitted_parameter_names(options)
|
313
314
|
end
|
314
315
|
end
|
@@ -329,8 +330,8 @@ module Shoulda
|
|
329
330
|
|
330
331
|
def default_verb
|
331
332
|
case action
|
332
|
-
|
333
|
-
|
333
|
+
when :create then :post
|
334
|
+
when :update then RailsShim.verb_for_update
|
334
335
|
end
|
335
336
|
end
|
336
337
|
|
@@ -346,7 +347,7 @@ module Shoulda
|
|
346
347
|
|
347
348
|
def register
|
348
349
|
double_collection = Doublespeak.double_collection_for(
|
349
|
-
::ActionController::Parameters.singleton_class
|
350
|
+
::ActionController::Parameters.singleton_class,
|
350
351
|
)
|
351
352
|
double_collection.register_proxy(:new).to_return do |call|
|
352
353
|
params = call.return_value
|
@@ -389,7 +390,7 @@ module Shoulda
|
|
389
390
|
|
390
391
|
if double_collections_by_parameter_name.key?(subparameter_name)
|
391
392
|
self.class.permitted_parameter_names_within(
|
392
|
-
double_collections_by_parameter_name[subparameter_name]
|
393
|
+
double_collections_by_parameter_name[subparameter_name],
|
393
394
|
)
|
394
395
|
else
|
395
396
|
[]
|
@@ -436,7 +437,8 @@ module Shoulda
|
|
436
437
|
# @private
|
437
438
|
class VerbNotDefinedError < StandardError
|
438
439
|
def message
|
439
|
-
'You must specify an HTTP verb when using a non-RESTful action.
|
440
|
+
'You must specify an HTTP verb when using a non-RESTful action.'\
|
441
|
+
' For example: for(:authorize, verb: :post)'
|
440
442
|
end
|
441
443
|
end
|
442
444
|
end
|