shoulda-matchers 2.8.0 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.hound_config/ruby.yml +7 -0
- data/.travis.yml +11 -54
- data/Appraisals +45 -100
- data/CONTRIBUTING.md +51 -7
- data/Gemfile +7 -19
- data/Gemfile.lock +60 -134
- data/Guardfile +5 -0
- data/NEWS.md +203 -0
- data/README.md +95 -50
- data/Rakefile +1 -0
- data/doc_config/yard/templates/default/layout/html/setup.rb +1 -1
- data/gemfiles/4.0.0.gemfile +10 -7
- data/gemfiles/4.0.0.gemfile.lock +103 -79
- data/gemfiles/4.0.1.gemfile +10 -7
- data/gemfiles/4.0.1.gemfile.lock +109 -83
- data/gemfiles/4.1.gemfile +10 -7
- data/gemfiles/4.1.gemfile.lock +109 -85
- data/gemfiles/4.2.gemfile +10 -9
- data/gemfiles/4.2.gemfile.lock +86 -78
- data/lib/shoulda/matchers.rb +13 -18
- data/lib/shoulda/matchers/action_controller.rb +4 -1
- data/lib/shoulda/matchers/action_controller/flash_store.rb +95 -0
- data/lib/shoulda/matchers/action_controller/{strong_parameters_matcher.rb → permit_matcher.rb} +147 -30
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +1 -1
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +5 -1
- data/lib/shoulda/matchers/action_controller/route_params.rb +15 -6
- data/lib/shoulda/matchers/action_controller/session_store.rb +34 -0
- data/lib/shoulda/matchers/action_controller/set_flash_matcher.rb +30 -136
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +28 -109
- data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +103 -0
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +1 -12
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +79 -10
- data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +10 -0
- data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +21 -0
- data/lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb +24 -0
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +22 -5
- data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +29 -10
- data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +27 -10
- data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +27 -12
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +56 -20
- data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +3 -11
- data/lib/shoulda/matchers/active_model/validation_message_finder.rb +65 -0
- data/lib/shoulda/matchers/active_record/association_matcher.rb +40 -6
- data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +21 -7
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +11 -40
- data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +1 -1
- data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +2 -6
- data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +137 -22
- data/lib/shoulda/matchers/configuration.rb +20 -0
- data/lib/shoulda/matchers/doublespeak.rb +11 -1
- data/lib/shoulda/matchers/doublespeak/double.rb +29 -11
- data/lib/shoulda/matchers/doublespeak/double_collection.rb +4 -3
- data/lib/shoulda/matchers/doublespeak/method_call.rb +35 -0
- data/lib/shoulda/matchers/doublespeak/object_double.rb +7 -2
- data/lib/shoulda/matchers/doublespeak/proxy_implementation.rb +4 -3
- data/lib/shoulda/matchers/doublespeak/stub_implementation.rb +3 -3
- data/lib/shoulda/matchers/doublespeak/world.rb +21 -1
- data/lib/shoulda/matchers/integrations.rb +43 -0
- data/lib/shoulda/matchers/integrations/configuration.rb +68 -0
- data/lib/shoulda/matchers/integrations/configuration_error.rb +9 -0
- data/lib/shoulda/matchers/integrations/inclusion.rb +20 -0
- data/lib/shoulda/matchers/integrations/libraries.rb +15 -0
- data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +31 -0
- data/lib/shoulda/matchers/integrations/libraries/active_model.rb +26 -0
- data/lib/shoulda/matchers/integrations/libraries/active_record.rb +26 -0
- data/lib/shoulda/matchers/integrations/libraries/missing_library.rb +19 -0
- data/lib/shoulda/matchers/integrations/libraries/rails.rb +30 -0
- data/lib/shoulda/matchers/integrations/rails.rb +12 -0
- data/lib/shoulda/matchers/integrations/registry.rb +28 -0
- data/lib/shoulda/matchers/integrations/test_frameworks.rb +16 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +37 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +36 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +37 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +40 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/rspec.rb +29 -0
- data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +36 -0
- data/lib/shoulda/matchers/rails_shim.rb +0 -40
- data/lib/shoulda/matchers/version.rb +1 -1
- data/script/SUPPORTED_VERSIONS +1 -1
- data/script/update_gems_in_all_appraisals +14 -0
- data/shoulda-matchers.gemspec +2 -2
- data/spec/acceptance/active_model_integration_spec.rb +4 -1
- data/spec/acceptance/independent_matchers_spec.rb +6 -6
- data/spec/acceptance/multiple_libraries_integration_spec.rb +52 -0
- data/spec/acceptance/rails_integration_spec.rb +15 -5
- data/spec/acceptance_spec_helper.rb +8 -0
- data/spec/doublespeak_spec_helper.rb +14 -0
- data/spec/support/acceptance/adds_shoulda_matchers_to_project.rb +110 -0
- data/spec/support/acceptance/helpers.rb +2 -0
- data/spec/support/acceptance/helpers/base_helpers.rb +6 -1
- data/spec/support/acceptance/helpers/command_helpers.rb +6 -2
- data/spec/support/acceptance/helpers/minitest_helpers.rb +0 -8
- data/spec/support/acceptance/helpers/n_unit_helpers.rb +25 -0
- data/spec/support/acceptance/helpers/rspec_helpers.rb +2 -0
- data/spec/support/acceptance/helpers/step_helpers.rb +13 -19
- data/spec/support/acceptance/matchers/have_output.rb +1 -1
- data/spec/support/tests/bundle.rb +1 -1
- data/spec/support/tests/command_runner.rb +25 -13
- data/spec/support/tests/current_bundle.rb +47 -0
- data/spec/support/tests/database.rb +28 -0
- data/spec/support/tests/database_adapters/postgresql.rb +25 -0
- data/spec/support/tests/database_adapters/sqlite3.rb +26 -0
- data/spec/support/tests/database_configuration.rb +33 -0
- data/spec/support/tests/database_configuration_registry.rb +28 -0
- data/spec/support/tests/filesystem.rb +25 -2
- data/spec/support/unit/helpers/active_record_versions.rb +12 -0
- data/spec/support/unit/helpers/class_builder.rb +6 -2
- data/spec/support/unit/helpers/column_type_helpers.rb +26 -0
- data/spec/support/unit/helpers/controller_builder.rb +0 -28
- data/spec/support/unit/helpers/database_helpers.rb +18 -0
- data/spec/support/unit/helpers/model_builder.rb +38 -6
- data/spec/support/unit/helpers/rails_versions.rb +2 -2
- data/spec/support/unit/matchers/fail_with_message_including_matcher.rb +9 -8
- data/spec/support/unit/matchers/fail_with_message_matcher.rb +1 -1
- data/spec/support/unit/rails_application.rb +29 -13
- data/spec/support/unit/record_validating_confirmation_builder.rb +1 -2
- data/spec/support/unit/shared_examples/set_session_or_flash.rb +355 -0
- data/spec/unit/shoulda/matchers/action_controller/permit_matcher_spec.rb +433 -0
- data/spec/unit/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +1 -5
- data/spec/unit/shoulda/matchers/action_controller/route_matcher_spec.rb +37 -0
- data/spec/unit/shoulda/matchers/action_controller/set_flash_matcher_spec.rb +23 -147
- data/spec/unit/shoulda/matchers/action_controller/set_session_matcher_spec.rb +8 -285
- data/spec/unit/shoulda/matchers/action_controller/set_session_or_flash_matcher_spec.rb +562 -0
- data/spec/unit/shoulda/matchers/active_model/allow_value_matcher_spec.rb +81 -14
- data/spec/unit/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +16 -8
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/comparison_matcher_spec.rb +101 -9
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/even_number_matcher_spec.rb +39 -1
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/odd_number_matcher_spec.rb +39 -1
- data/spec/unit/shoulda/matchers/active_model/numericality_matchers/only_integer_matcher_spec.rb +39 -0
- data/spec/unit/shoulda/matchers/active_model/validate_exclusion_of_matcher_spec.rb +0 -17
- data/spec/unit/shoulda/matchers/active_model/validate_inclusion_of_matcher_spec.rb +0 -17
- data/spec/unit/shoulda/matchers/active_model/validate_length_of_matcher_spec.rb +0 -17
- data/spec/unit/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +838 -271
- data/spec/unit/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +0 -19
- data/spec/unit/shoulda/matchers/active_record/association_matcher_spec.rb +93 -0
- data/spec/unit/shoulda/matchers/active_record/association_matchers/model_reflection_spec.rb +3 -3
- data/spec/unit/shoulda/matchers/active_record/define_enum_for_matcher_spec.rb +25 -0
- data/spec/unit/shoulda/matchers/active_record/validate_uniqueness_of_matcher_spec.rb +905 -0
- data/spec/unit/shoulda/matchers/doublespeak/double_collection_spec.rb +17 -11
- data/spec/unit/shoulda/matchers/doublespeak/double_implementation_registry_spec.rb +1 -1
- data/spec/unit/shoulda/matchers/doublespeak/double_spec.rb +144 -43
- data/spec/unit/shoulda/matchers/doublespeak/object_double_spec.rb +1 -1
- data/spec/unit/shoulda/matchers/doublespeak/proxy_implementation_spec.rb +36 -11
- data/spec/unit/shoulda/matchers/doublespeak/stub_implementation_spec.rb +29 -16
- data/spec/unit/shoulda/matchers/doublespeak/world_spec.rb +8 -5
- data/spec/unit/shoulda/matchers/doublespeak_spec.rb +1 -1
- data/spec/unit_spec_helper.rb +15 -14
- data/spec/warnings_spy.rb +1 -1
- metadata +68 -29
- data/docs.watchr +0 -5
- data/gemfiles/3.0.gemfile +0 -26
- data/gemfiles/3.0.gemfile.lock +0 -173
- data/gemfiles/3.1.gemfile +0 -32
- data/gemfiles/3.1.gemfile.lock +0 -212
- data/gemfiles/3.1_1.9.2.gemfile +0 -32
- data/gemfiles/3.1_1.9.2.gemfile.lock +0 -212
- data/gemfiles/3.2.gemfile +0 -33
- data/gemfiles/3.2.gemfile.lock +0 -212
- data/gemfiles/3.2_1.9.2.gemfile +0 -31
- data/gemfiles/3.2_1.9.2.gemfile.lock +0 -207
- data/lib/shoulda/matchers/assertion_error.rb +0 -27
- data/lib/shoulda/matchers/doublespeak/structs.rb +0 -10
- data/lib/shoulda/matchers/integrations/nunit_test_case_detection.rb +0 -39
- data/lib/shoulda/matchers/integrations/rspec.rb +0 -19
- data/lib/shoulda/matchers/integrations/test_unit.rb +0 -34
- data/spec/unit/shoulda/matchers/action_controller/strong_parameters_matcher_spec.rb +0 -331
- data/spec/unit/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +0 -564
data/Guardfile
ADDED
data/NEWS.md
CHANGED
@@ -1,3 +1,206 @@
|
|
1
|
+
# HEAD
|
2
|
+
|
3
|
+
### Backward-incompatible changes
|
4
|
+
|
5
|
+
* We've dropped support for Rails 3.x, Ruby 1.9.2, and Ruby 1.9.3, and RSpec 2.
|
6
|
+
All of these things have been end-of-lifed. This doesn't mean that the gem
|
7
|
+
will stop working immediately, but we won't accept any pull requests to fix
|
8
|
+
any compatibility issues, so you're encouraged to upgrade.
|
9
|
+
([a4045a1], [b7fe87a])
|
10
|
+
|
11
|
+
* The gem no longer detects the test framework you're using or mixes itself into
|
12
|
+
that framework automatically. [History][no-auto-integration-1] has
|
13
|
+
[shown][no-auto-integration-2] that performing any kind of detection is prone
|
14
|
+
to bugs and more complicated than it should be.
|
15
|
+
|
16
|
+
Here are the updated instructions:
|
17
|
+
|
18
|
+
* You no longer need to say `require: false` in your Gemfile; you can
|
19
|
+
include the gem as normal.
|
20
|
+
* You'll need to add the following somewhere in your `rails_helper` (for
|
21
|
+
RSpec) or `test_helper` (for Minitest / Test::Unit):
|
22
|
+
|
23
|
+
``` ruby
|
24
|
+
Shoulda::Matchers.configure do |config|
|
25
|
+
config.integrate do |with|
|
26
|
+
# Choose a test framework:
|
27
|
+
with.test_framework :rspec
|
28
|
+
with.test_framework :minitest
|
29
|
+
with.test_framework :minitest_4
|
30
|
+
with.test_framework :test_unit
|
31
|
+
|
32
|
+
# Choose one or more libraries:
|
33
|
+
with.library :active_record
|
34
|
+
with.library :active_model
|
35
|
+
with.library :action_controller
|
36
|
+
# Or, choose the following (which implies all of the above):
|
37
|
+
with.library :rails
|
38
|
+
end
|
39
|
+
end
|
40
|
+
```
|
41
|
+
|
42
|
+
([1900071])
|
43
|
+
|
44
|
+
* There are two changes to `allow_value`:
|
45
|
+
|
46
|
+
* The negative form of the matcher has been changed so that instead of
|
47
|
+
asserting that any of the given values is an invalid value (allowing good
|
48
|
+
values to pass through), assert that *all* values are invalid values
|
49
|
+
(allowing good values not to pass through). This means that this test which
|
50
|
+
formerly passed will now fail:
|
51
|
+
|
52
|
+
expect(record).not_to allow_value('good value', *bad_values)
|
53
|
+
|
54
|
+
([19ce8a6])
|
55
|
+
|
56
|
+
* The matcher may raise an error if the attribute in question contains
|
57
|
+
custom logic to ignore certain values, resulting in a discrepancy between
|
58
|
+
the value you provide and the value that the attribute is actually set to.
|
59
|
+
Specifically, if the attribute cannot be changed from a non-nil value to a
|
60
|
+
nil value, or vice versa, then you'll get a CouldNotSetAttributeError. The
|
61
|
+
current behavior (which is to permit this) is misleading, as the test that
|
62
|
+
you're writing under the hood by using `allow_value` could be different from
|
63
|
+
the test that actually ends up getting run. ([eaaa2d8])
|
64
|
+
|
65
|
+
* `validate_uniqueness_of` is now properly case-insensitive by default, to match
|
66
|
+
the default behavior of the validation itself. This is a backward-incompatible
|
67
|
+
change because this test which incorrectly passed before will now fail:
|
68
|
+
|
69
|
+
``` ruby
|
70
|
+
class Product < ActiveRecord::Base
|
71
|
+
validates_uniqueness_of :name, case_sensitive: false
|
72
|
+
end
|
73
|
+
|
74
|
+
describe Product do
|
75
|
+
it { is_expected.to validate_uniqueness_of(:name) }
|
76
|
+
end
|
77
|
+
```
|
78
|
+
|
79
|
+
([57a1922])
|
80
|
+
|
81
|
+
* `ensure_inclusion_of`, `ensure_exclusion_of`, and `ensure_length_of` have been
|
82
|
+
removed in favor of their `validate_*` counterparts. ([55c8d09])
|
83
|
+
|
84
|
+
* `set_the_flash` and `set_session` have been changed to more closely align with
|
85
|
+
each other:
|
86
|
+
* `set_the_flash` has been removed in favor of `set_flash`. ([801f2c7])
|
87
|
+
* `set_session('foo')` is no longer valid syntax, please use
|
88
|
+
`set_session['foo']` instead. ([535fe05])
|
89
|
+
* `set_session['key'].to(nil)` will no longer pass when the key in question
|
90
|
+
has not been set yet. ([535fe05])
|
91
|
+
|
92
|
+
* Change behavior of `validate_uniqueness_of` when the matcher is not
|
93
|
+
qualified with any scopes, but your validation is. Previously the following
|
94
|
+
test would pass when it now fails:
|
95
|
+
|
96
|
+
``` ruby
|
97
|
+
class Post < ActiveRecord::Base
|
98
|
+
validate :slug, uniqueness: { scope: :user_id }
|
99
|
+
end
|
100
|
+
|
101
|
+
describe Post do
|
102
|
+
it { should validate_uniqueness_of(:slug) }
|
103
|
+
end
|
104
|
+
```
|
105
|
+
|
106
|
+
([6ac7b81])
|
107
|
+
|
108
|
+
[no-auto-integration-1]: https://github.com/freerange/mocha/commit/049080c673ee3f76e76adc1e1a6122c7869f1648
|
109
|
+
[no-auto-integration-2]: https://github.com/rr/rr/issues/29
|
110
|
+
[1900071]: https://github.com/thoughtbot/shoulda-matchers/commit/190007155e0676aae84d08d8ed8eed3beebc3a06
|
111
|
+
[b7fe87a]: https://github.com/thoughtbot/shoulda-matchers/commit/b7fe87ae915f6b1f99d64e847fea536ad0f78024
|
112
|
+
[a4045a1]: https://github.com/thoughtbot/shoulda-matchers/commit/a4045a1f9bc454e618a7c55960942eb030f02fdd
|
113
|
+
[57a1922]: https://github.com/thoughtbot/shoulda-matchers/commit/57a19228b6a85f12ba7a79a26dae5869c1499c6d
|
114
|
+
[19ce8a6]: https://github.com/thoughtbot/shoulda-matchers/commit/19c38a642a2ae1316ef12540a0185cd026901e74
|
115
|
+
[eaaa2d8]: https://github.com/thoughtbot/shoulda-matchers/commit/eaaa2d83e5cd31a3ca0a1aaa65441ea1a4fffa49
|
116
|
+
[55c8d09]: https://github.com/thoughtbot/shoulda-matchers/commit/55c8d09bf2af886540924efa83c3b518d926a770
|
117
|
+
[801f2c7]: https://github.com/thoughtbot/shoulda-matchers/commit/801f2c7c1eab3b2053244485c9800f850959cfef
|
118
|
+
[535fe05]: https://github.com/thoughtbot/shoulda-matchers/commit/535fe05be8686fdafd8b22f2ed5c4192bd565d50
|
119
|
+
[eaaa2d8]: https://github.com/thoughtbot/shoulda-matchers/commit/eaaa2d83e5cd31a3ca0a1aaa65441ea1a4fffa49
|
120
|
+
[6ac7b81]: https://github.com/thoughtbot/shoulda-matchers/commit/6ac7b8158cfba3b518eb3da3c24345e4473b416f
|
121
|
+
|
122
|
+
### Bug fixes
|
123
|
+
|
124
|
+
* So far the tests for the gem have been running against only SQLite. Now they
|
125
|
+
run against PostgreSQL, too. As a result we were able to fix some
|
126
|
+
Postgres-related bugs, specifically around `validate_uniqueness_of`:
|
127
|
+
|
128
|
+
* When scoped to a UUID column that ends in an "f", the matcher is able to
|
129
|
+
generate a proper "next" value without erroring. ([#402], [#587], [#662])
|
130
|
+
|
131
|
+
* Support scopes that are PostgreSQL array columns. Please note that this is
|
132
|
+
only supported for Rails 4.2 and greater, as versions before this cannot
|
133
|
+
handle array columns correctly, particularly in conjunction with the
|
134
|
+
uniqueness validator. ([#554])
|
135
|
+
|
136
|
+
* Fix so that when scoped to a text column and the scope is set to nil before
|
137
|
+
running it through the matcher, the matcher does not fail. ([#521], [#607])
|
138
|
+
|
139
|
+
* Fix `define_enum_for` so that it actually tests that the attribute is present
|
140
|
+
in the list of defined enums, as you could fool it by merely defining a class
|
141
|
+
method that was the pluralized version of the attribute name. In the same
|
142
|
+
vein, passing a pluralized version of the attribute name to `define_enum_for`
|
143
|
+
would erroneously pass, and now it fails. ([#641])
|
144
|
+
|
145
|
+
* Fix `permit` so that it does not break the functionality of
|
146
|
+
ActionController::Parameters#require. ([#648], [#675])
|
147
|
+
|
148
|
+
* Fix `validate_uniqueness_of` + `scoped_to` so that it does not raise an error
|
149
|
+
if a record exists where the scoped attribute is nil. ([#677])
|
150
|
+
|
151
|
+
* Fix `route` matcher so if your route includes a default `format`, you can
|
152
|
+
specify this as a symbol or string. ([#693])
|
153
|
+
|
154
|
+
* Fix `validate_uniqueness_of` so that it allows you to test against scoped
|
155
|
+
attributes that are boolean columns. ([#457], [#694])
|
156
|
+
|
157
|
+
* Fix failure message for `validate_numericality_of` as it sometimes didn't
|
158
|
+
provide the reason for failure. ([#699])
|
159
|
+
|
160
|
+
### Features
|
161
|
+
|
162
|
+
* Add `on` qualifier to `permit`. This allows you to make an assertion that
|
163
|
+
a restriction was placed on a slice of the `params` hash and not the entire
|
164
|
+
`params` hash. Although we don't require you to use this qualifier, we do
|
165
|
+
recommend it, as it's a more precise check. ([#675])
|
166
|
+
|
167
|
+
* Add `strict` qualifier to `validate_numericality_of`. ([#620])
|
168
|
+
|
169
|
+
* Add `on` qualifier to `validate_numericality_of`. ([9748869]; h/t [#356],
|
170
|
+
[#358])
|
171
|
+
|
172
|
+
* Add `join_table` qualifier to `have_and_belong_to_many`. ([#556])
|
173
|
+
|
174
|
+
* `allow_values` is now an alias for `allow_value`. This makes more sense when
|
175
|
+
checking against multiple values:
|
176
|
+
|
177
|
+
``` ruby
|
178
|
+
it { should allow_values('this', 'and', 'that') }
|
179
|
+
```
|
180
|
+
|
181
|
+
([#692])
|
182
|
+
|
183
|
+
[9748869]: https://github.com/thoughtbot/shoulda-matchers/commit/97488690910520ed8e1f2e164b1982eff5ef1f19
|
184
|
+
[#402]: https://github.com/thoughtbot/shoulda-matchers/pull/402
|
185
|
+
[#587]: https://github.com/thoughtbot/shoulda-matchers/pull/587
|
186
|
+
[#662]: https://github.com/thoughtbot/shoulda-matchers/pull/662
|
187
|
+
[#554]: https://github.com/thoughtbot/shoulda-matchers/pull/554
|
188
|
+
[#641]: https://github.com/thoughtbot/shoulda-matchers/pull/641
|
189
|
+
[#521]: https://github.com/thoughtbot/shoulda-matchers/pull/521
|
190
|
+
[#607]: https://github.com/thoughtbot/shoulda-matchers/pull/607
|
191
|
+
[#648]: https://github.com/thoughtbot/shoulda-matchers/pull/648
|
192
|
+
[#675]: https://github.com/thoughtbot/shoulda-matchers/pull/675
|
193
|
+
[#677]: https://github.com/thoughtbot/shoulda-matchers/pull/677
|
194
|
+
[#620]: https://github.com/thoughtbot/shoulda-matchers/pull/620
|
195
|
+
[#693]: https://github.com/thoughtbot/shoulda-matchers/pull/693
|
196
|
+
[#356]: https://github.com/thoughtbot/shoulda-matchers/pull/356
|
197
|
+
[#358]: https://github.com/thoughtbot/shoulda-matchers/pull/358
|
198
|
+
[#556]: https://github.com/thoughtbot/shoulda-matchers/pull/556
|
199
|
+
[#457]: https://github.com/thoughtbot/shoulda-matchers/pull/457
|
200
|
+
[#694]: https://github.com/thoughtbot/shoulda-matchers/pull/694
|
201
|
+
[#692]: https://github.com/thoughtbot/shoulda-matchers/pull/692
|
202
|
+
[#699]: https://github.com/thoughtbot/shoulda-matchers/pull/699
|
203
|
+
|
1
204
|
# 2.8.0
|
2
205
|
|
3
206
|
### Deprecations
|
data/README.md
CHANGED
@@ -1,12 +1,17 @@
|
|
1
|
-
#
|
1
|
+
# Shoulda Matchers [![Gem Version][version-badge]][rubygems] [![Build Status][travis-badge]][travis] ![Downloads][downloads-badge]
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
shoulda-matchers provides Test::Unit- and RSpec-compatible one-liners that test
|
3
|
+
Shoulda Matchers provides RSpec- and Minitest-compatible one-liners that test
|
6
4
|
common Rails functionality. These tests would otherwise be much longer, more
|
7
5
|
complex, and error-prone.
|
8
6
|
|
9
|
-
|
7
|
+
[View the official documentation for the latest version (2.8.0).][rubydocs]
|
8
|
+
|
9
|
+
**Heads up! This is the README for the master branch. [You might be more
|
10
|
+
interested in the README for 2.8.0 instead.][2.8.0-README]**
|
11
|
+
|
12
|
+
----
|
13
|
+
|
14
|
+
### ActiveModel matchers
|
10
15
|
|
11
16
|
* **[allow_mass_assignment_of](lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb)**
|
12
17
|
tests usage of Rails 3's `attr_accessible` and `attr_protected` macros.
|
@@ -27,7 +32,7 @@ complex, and error-prone.
|
|
27
32
|
* **[validate_presence_of](lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb)**
|
28
33
|
tests usage of `validates_presence_of`.
|
29
34
|
|
30
|
-
### ActiveRecord
|
35
|
+
### ActiveRecord matchers
|
31
36
|
|
32
37
|
* **[accept_nested_attributes_for](lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb)**
|
33
38
|
tests usage of the `accepts_nested_attributes_for` macro.
|
@@ -52,10 +57,12 @@ complex, and error-prone.
|
|
52
57
|
* **[validate_uniqueness_of](lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb)**
|
53
58
|
tests usage of `validates_uniqueness_of`.
|
54
59
|
|
55
|
-
### ActionController
|
60
|
+
### ActionController matchers
|
56
61
|
|
57
62
|
* **[filter_param](lib/shoulda/matchers/action_controller/filter_param_matcher.rb)**
|
58
63
|
tests parameter filtering configuration.
|
64
|
+
* **[permit](lib/shoulda/matchers/action_controller/permit_matcher.rb)** tests
|
65
|
+
that an action places a restriction on the `params` hash.
|
59
66
|
* **[redirect_to](lib/shoulda/matchers/action_controller/redirect_to_matcher.rb)**
|
60
67
|
tests that an action redirects to a certain location.
|
61
68
|
* **[render_template](lib/shoulda/matchers/action_controller/render_template_matcher.rb)**
|
@@ -72,17 +79,17 @@ complex, and error-prone.
|
|
72
79
|
makes assertions on the `session` hash.
|
73
80
|
* **[set_flash](lib/shoulda/matchers/action_controller/set_flash_matcher.rb)**
|
74
81
|
makes assertions on the `flash` hash.
|
75
|
-
* **[use_after_action](lib/shoulda/matchers/action_controller/
|
82
|
+
* **[use_after_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L79)**
|
76
83
|
tests that a `after_action` callback is defined in your controller. (Aliased
|
77
84
|
as *use_after_filter*.)
|
78
|
-
* **[use_around_action](lib/shoulda/matchers/action_controller/
|
85
|
+
* **[use_around_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L129)**
|
79
86
|
tests that a `around_action` callback is defined in your controller. (Aliased
|
80
87
|
as *use_around_filter*.)
|
81
|
-
* **[use_before_action](lib/shoulda/matchers/action_controller/
|
88
|
+
* **[use_before_action](lib/shoulda/matchers/action_controller/callback_matcher.rb#L54)**
|
82
89
|
tests that a `before_action` callback is defined in your controller. (Aliased
|
83
90
|
as *use_before_filter*.)
|
84
91
|
|
85
|
-
### Independent
|
92
|
+
### Independent matchers
|
86
93
|
|
87
94
|
* **[delegate_method](lib/shoulda/matchers/independent/delegate_method_matcher.rb)**
|
88
95
|
tests that an object forwards messages to other, internal objects by way of
|
@@ -92,27 +99,30 @@ complex, and error-prone.
|
|
92
99
|
|
93
100
|
### RSpec
|
94
101
|
|
95
|
-
Include
|
102
|
+
Include `shoulda-matchers` in your Gemfile:
|
96
103
|
|
97
104
|
``` ruby
|
98
105
|
group :test do
|
99
|
-
gem 'shoulda-matchers'
|
106
|
+
gem 'shoulda-matchers'
|
100
107
|
end
|
101
108
|
```
|
102
109
|
|
103
|
-
Then
|
104
|
-
|
110
|
+
[Then, configure the gem to integrate with RSpec](#configuration).
|
111
|
+
|
112
|
+
Now you can use matchers in your tests. For instance a model test might look
|
113
|
+
like this:
|
105
114
|
|
106
115
|
``` ruby
|
107
|
-
|
108
|
-
|
116
|
+
describe Person do
|
117
|
+
it { should validate_presence_of(:name) }
|
118
|
+
end
|
109
119
|
```
|
110
120
|
|
111
|
-
### Test::Unit
|
121
|
+
### Minitest / Test::Unit
|
112
122
|
|
113
|
-
|
114
|
-
|
115
|
-
[shoulda-context][shoulda-context]. For this reason you'll want to include this
|
123
|
+
Shoulda Matchers was originally a component of [Shoulda][shoulda], a gem that
|
124
|
+
also provides `should` and `context` syntax via
|
125
|
+
[`shoulda-context`][shoulda-context]. For this reason you'll want to include this
|
116
126
|
gem in your Gemfile instead:
|
117
127
|
|
118
128
|
```ruby
|
@@ -121,31 +131,48 @@ group :test do
|
|
121
131
|
end
|
122
132
|
```
|
123
133
|
|
124
|
-
|
125
|
-
|
126
|
-
Once it is loaded, shoulda-matchers automatically includes itself into your test
|
127
|
-
framework. It will mix in the appropriate matchers for ActiveRecord,
|
128
|
-
ActiveModel, and ActionController depending on the modules that are available at
|
129
|
-
runtime. For instance, in order to use the ActiveRecord matchers, ActiveRecord
|
130
|
-
must be present beforehand.
|
134
|
+
[Then, configure the gem to integrate with Minitest](#configuration).
|
131
135
|
|
132
|
-
|
133
|
-
|
134
|
-
your application is written against another framework such as Sinatra or
|
135
|
-
Padrino, you may have a different setup, so you will want to ensure that you are
|
136
|
-
requiring shoulda-matchers after the components of Rails you are using. For
|
137
|
-
instance, if you wanted to use and test against ActiveModel, you'd say:
|
136
|
+
Now you can use matchers in your tests. For instance a model test might look
|
137
|
+
like this:
|
138
138
|
|
139
|
-
```ruby
|
140
|
-
|
141
|
-
|
139
|
+
``` ruby
|
140
|
+
class PersonTest < ActiveSupport::TestCase
|
141
|
+
should validate_presence_of(:name)
|
142
|
+
end
|
142
143
|
```
|
143
144
|
|
144
|
-
|
145
|
+
### Configuration
|
145
146
|
|
146
|
-
|
147
|
-
|
148
|
-
|
147
|
+
**NOTE: The new configuration syntax isn't available in a public release just
|
148
|
+
yet -- please refer to the [README for 2.8.0][2.8.0-README] for the current
|
149
|
+
installation instructions.**
|
150
|
+
|
151
|
+
Before you can use Shoulda Matchers, you'll need to tell it a couple of things:
|
152
|
+
|
153
|
+
* Which test framework you're using
|
154
|
+
* Which portion of the matchers you want to use
|
155
|
+
|
156
|
+
You can supply this information by using a configuration block. Place the
|
157
|
+
following in your test or spec helper:
|
158
|
+
|
159
|
+
``` ruby
|
160
|
+
Shoulda::Matchers.configure do |config|
|
161
|
+
config.integrate do |with|
|
162
|
+
# Choose a test framework:
|
163
|
+
with.test_framework :rspec
|
164
|
+
with.test_framework :minitest
|
165
|
+
with.test_framework :minitest_4
|
166
|
+
with.test_framework :test_unit
|
167
|
+
|
168
|
+
# Choose one or more libraries:
|
169
|
+
with.library :active_record
|
170
|
+
with.library :active_model
|
171
|
+
with.library :action_controller
|
172
|
+
# Or, choose the following (which implies all of the above):
|
173
|
+
with.library :rails
|
174
|
+
end
|
175
|
+
end
|
149
176
|
```
|
150
177
|
|
151
178
|
## Generating documentation
|
@@ -160,31 +187,49 @@ from this directory. Then, open `doc/index.html` in your browser.
|
|
160
187
|
If you want to see a live preview as you work without having to run `yard` over
|
161
188
|
and over again, keep this command running in a separate terminal session:
|
162
189
|
|
163
|
-
|
190
|
+
bundle exec guard
|
164
191
|
|
165
|
-
##
|
192
|
+
## Contributing
|
166
193
|
|
167
|
-
|
168
|
-
|
194
|
+
Shoulda Matchers is open source, and we are grateful for
|
195
|
+
[everyone][contributors] who's contributed so far.
|
169
196
|
|
170
|
-
|
197
|
+
If you'd like to contribute, please take a look at the
|
198
|
+
[instructions](CONTRIBUTING.md) for installing dependencies and crafting a good
|
199
|
+
pull request.
|
171
200
|
|
172
|
-
|
173
|
-
|
201
|
+
## Versioning
|
202
|
+
|
203
|
+
Shoulda Matchers follows Semantic Versioning 2.0 as defined at
|
204
|
+
<http://semver.org>.
|
174
205
|
|
175
206
|
## License
|
176
207
|
|
177
|
-
|
208
|
+
Shoulda Matchers is copyright © 2006-2015
|
209
|
+
[thoughtbot, inc](https://thoughtbot.com/). It is free software,
|
178
210
|
and may be redistributed under the terms specified in the
|
179
211
|
[MIT-LICENSE](MIT-LICENSE) file.
|
180
212
|
|
213
|
+
## About thoughtbot
|
214
|
+
|
215
|
+
![thoughtbot](https://thoughtbot.com/logo.png)
|
216
|
+
|
217
|
+
Shoulda Matchers is maintained and funded by thoughtbot, inc.
|
218
|
+
The names and logos for thoughtbot are trademarks of thoughtbot, inc.
|
219
|
+
|
220
|
+
We are passionate about open source software.
|
221
|
+
See [our other projects][community].
|
222
|
+
We are [available for hire][hire].
|
223
|
+
|
224
|
+
[community]: https://thoughtbot.com/community?utm_source=github
|
225
|
+
[hire]: https://thoughtbot.com?utm_source=github
|
181
226
|
[version-badge]: http://img.shields.io/gem/v/shoulda-matchers.svg
|
182
227
|
[rubygems]: http://rubygems.org/gems/shoulda-matchers
|
183
228
|
[travis-badge]: http://img.shields.io/travis/thoughtbot/shoulda-matchers/master.svg
|
184
229
|
[travis]: http://travis-ci.org/thoughtbot/shoulda-matchers
|
185
230
|
[downloads-badge]: http://img.shields.io/gem/dtv/shoulda-matchers.svg
|
186
231
|
[rubydocs]: http://matchers.shoulda.io/docs
|
187
|
-
[community]: http://thoughtbot.com/community
|
188
232
|
[contributors]: https://github.com/thoughtbot/shoulda-matchers/contributors
|
189
233
|
[shoulda]: http://github.com/thoughtbot/shoulda
|
190
234
|
[shoulda-context]: http://github.com/thoughtbot/shoulda-context
|
235
|
+
[2.8.0-README]: https://github.com/thoughtbot/shoulda-matchers/tree/v2.8.0#shoulda-matchers---
|
data/Rakefile
CHANGED