shoulda-matchers 2.8.0 → 3.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.
- 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
@@ -1,167 +1,43 @@
|
|
1
1
|
require 'unit_spec_helper'
|
2
2
|
|
3
|
-
describe Shoulda::Matchers::ActionController, type: :controller do
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
describe Shoulda::Matchers::ActionController::SetFlashMatcher, type: :controller do
|
4
|
+
it_behaves_like 'set session or flash matcher' do
|
5
|
+
def store_name
|
6
|
+
'flash'
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
expect(controller_with_flash(notice: 'hi')).to set_the_flash
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '#set_flash' do
|
17
|
-
it 'fails with unmatchable #to' do
|
18
|
-
expect { set_flash.to(1) }.to raise_error('cannot match against 1')
|
9
|
+
def set_store
|
10
|
+
set_flash
|
19
11
|
end
|
20
12
|
|
21
|
-
|
22
|
-
|
23
|
-
expect(controller_with_flash(notice: 'hi')).to set_flash
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'accepts setting the exact flash message' do
|
27
|
-
expect(controller_with_flash(notice: 'hi')).to set_flash.to('hi')
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'accepts setting a matched flash message' do
|
31
|
-
expect(controller_with_flash(notice: 'hello')).to set_flash.to(/he/)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'rejects setting a different flash message' do
|
35
|
-
expect(controller_with_flash(notice: 'hi')).
|
36
|
-
not_to set_flash.to('other')
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'rejects setting a different pattern' do
|
40
|
-
expect(controller_with_flash(notice: 'hi')).
|
41
|
-
not_to set_flash.to(/other/)
|
42
|
-
end
|
13
|
+
def store_within(controller)
|
14
|
+
controller.flash
|
43
15
|
end
|
16
|
+
end
|
44
17
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
|
50
|
-
it 'accepts setting any flash.now message' do
|
51
|
-
expect(controller_with_flash_now).to set_flash.now
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'accepts setting the exact flash.now message' do
|
55
|
-
expect(controller_with_flash_now(notice: 'hi')).
|
56
|
-
to set_flash.now.to('hi')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'accepts setting a matched flash.now message' do
|
60
|
-
expect(controller_with_flash_now(notice: 'flasher')).
|
61
|
-
to set_flash.now.to(/lash/)
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'rejects setting a different flash.now message' do
|
65
|
-
expect(controller_with_flash_now(notice: 'hi')).
|
66
|
-
not_to set_flash.now.to('other')
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'rejects setting a different flash.now pattern' do
|
70
|
-
expect(controller_with_flash_now(notice: 'hi')).
|
71
|
-
not_to set_flash.now.to(/other/)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
context 'a controller that sets flash messages for multiple keys' do
|
76
|
-
it 'accepts flash message for either key' do
|
77
|
-
controller = controller_with_flash(notice: 'one', alert: 'two')
|
78
|
-
|
79
|
-
expect(controller).to set_flash[:notice]
|
80
|
-
expect(controller).to set_flash[:alert]
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'rejects a flash message that is not one of the set keys' do
|
84
|
-
expect(controller_with_flash(notice: 'one', alert: 'two')).
|
85
|
-
not_to set_flash[:warning]
|
86
|
-
end
|
87
|
-
|
88
|
-
it 'accepts exact flash message of notice' do
|
89
|
-
expect(controller_with_flash(notice: 'one', alert: 'two')).
|
90
|
-
to set_flash[:notice].to('one')
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'accepts setting a matched flash message of notice' do
|
94
|
-
expect(controller_with_flash(notice: 'one', alert: 'two')).
|
95
|
-
to set_flash[:notice].to(/on/)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'rejects setting a different flash message of notice' do
|
99
|
-
expect(controller_with_flash(notice: 'one', alert: 'two')).
|
100
|
-
not_to set_flash[:notice].to('other')
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'rejects setting a different pattern' do
|
104
|
-
expect(controller_with_flash(notice: 'one', alert: 'two')).
|
105
|
-
not_to set_flash[:notice].to(/other/)
|
106
|
-
end
|
18
|
+
it_behaves_like 'set session or flash matcher' do
|
19
|
+
def store_name
|
20
|
+
'flash.now'
|
107
21
|
end
|
108
22
|
|
109
|
-
|
110
|
-
|
111
|
-
controller = build_fake_response do
|
112
|
-
flash.now[:notice] = 'value'
|
113
|
-
flash[:success] = 'great job'
|
114
|
-
end
|
115
|
-
|
116
|
-
expect(controller).to set_flash.now
|
117
|
-
expect(controller).to set_flash
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'accepts setting a matched flash.now message' do
|
121
|
-
controller = build_fake_response do
|
122
|
-
flash.now[:notice] = 'value'
|
123
|
-
flash[:success] = 'great job'
|
124
|
-
end
|
125
|
-
|
126
|
-
expect(controller).to set_flash.now.to(/value/)
|
127
|
-
expect(controller).to set_flash.to(/great/)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'rejects setting a different flash.now message' do
|
131
|
-
controller = build_fake_response do
|
132
|
-
flash.now[:notice] = 'value'
|
133
|
-
flash[:success] = 'great job'
|
134
|
-
end
|
135
|
-
|
136
|
-
expect(controller).not_to set_flash.now.to('other')
|
137
|
-
expect(controller).not_to set_flash.to('other')
|
138
|
-
end
|
23
|
+
def set_store
|
24
|
+
set_flash.now
|
139
25
|
end
|
140
26
|
|
141
|
-
|
142
|
-
|
143
|
-
expect(controller_with_no_flashes).not_to set_flash
|
144
|
-
end
|
27
|
+
def store_within(controller)
|
28
|
+
controller.flash.now
|
145
29
|
end
|
146
30
|
end
|
147
31
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
build_fake_response do
|
154
|
-
flash_hash.each do |key, value|
|
155
|
-
flash[key] = value
|
32
|
+
context 'when the controller sets both flash and flash.now' do
|
33
|
+
it 'does not mix flash and flash.now' do
|
34
|
+
controller = build_fake_response do
|
35
|
+
flash['key for flash'] = 'value for flash'
|
36
|
+
flash.now['key for flash.now'] = 'value for flash.now'
|
156
37
|
end
|
157
|
-
end
|
158
|
-
end
|
159
38
|
|
160
|
-
|
161
|
-
|
162
|
-
flash_hash.each do |key, value|
|
163
|
-
flash.now[key] = value
|
164
|
-
end
|
39
|
+
expect(controller).not_to set_flash['key for flash.now']
|
40
|
+
expect(controller).not_to set_flash.now['key for flash']
|
165
41
|
end
|
166
42
|
end
|
167
43
|
end
|
@@ -1,294 +1,17 @@
|
|
1
1
|
require 'unit_spec_helper'
|
2
2
|
|
3
|
-
describe Shoulda::Matchers::ActionController,
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
expect(&expectation).to print_warning_including(
|
9
|
-
'Passing a key to set_session is deprecated'
|
10
|
-
)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'still works regardless' do
|
14
|
-
silence_warnings do
|
15
|
-
expect(controller_with_session(var: 'hi')).to set_session(:var)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
context 'a controller that sets a session variable' do
|
21
|
-
context 'without any qualifiers' do
|
22
|
-
it 'accepts' do
|
23
|
-
expect(controller_with_session(var: 'hi')).to set_session
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context 'with #to' do
|
28
|
-
context 'given a static value' do
|
29
|
-
context 'when any key in session has the given value' do
|
30
|
-
it 'accepts' do
|
31
|
-
expect(controller_with_session(var: 'hi')).
|
32
|
-
to set_session.to('hi')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'accepts given nil' do
|
36
|
-
silence_warnings do
|
37
|
-
expect(controller_with_session(var: nil)).
|
38
|
-
to set_session.to(nil)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'accepts given false' do
|
43
|
-
expect(controller_with_session(var: false)).
|
44
|
-
to set_session.to(false)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'when no key in session has the given value' do
|
49
|
-
it 'rejects' do
|
50
|
-
expect(controller_with_session(var: 'hi')).
|
51
|
-
not_to set_session.to('different')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'given a dynamic value' do
|
57
|
-
context 'when any key in session has the given value' do
|
58
|
-
it 'accepts' do
|
59
|
-
context = double(expected: 'hi')
|
60
|
-
expect(controller_with_session(var: 'hi')).
|
61
|
-
to set_session.in_context(context).to { expected }
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'accepts given nil' do
|
65
|
-
silence_warnings do
|
66
|
-
context = double(expected: nil)
|
67
|
-
expect(controller_with_session(var: nil)).
|
68
|
-
to set_session.in_context(context).to { expected }
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'accepts given false' do
|
73
|
-
context = double(expected: false)
|
74
|
-
expect(controller_with_session(var: false)).
|
75
|
-
to set_session.in_context(context).to { expected }
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'when no key in session has the given value' do
|
80
|
-
it 'rejects' do
|
81
|
-
context = double(expected: 'different')
|
82
|
-
expect(controller_with_session(var: 'hi')).
|
83
|
-
not_to set_session.in_context(context).to { expected }
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
context 'given a regexp' do
|
89
|
-
context 'when any value in session matches the regexp' do
|
90
|
-
it 'accepts' do
|
91
|
-
expect(controller_with_session(var: 'hello')).
|
92
|
-
to set_session.to(/ello/)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context 'when no value in session matches the regexp' do
|
97
|
-
it 'rejects' do
|
98
|
-
expect(controller_with_session(var: 'hello')).
|
99
|
-
not_to set_session.to(/different/)
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context 'with #[]' do
|
106
|
-
context 'when the given key is present in session' do
|
107
|
-
it 'accepts' do
|
108
|
-
expect(controller_with_session(var: 'hi')).to set_session[:var]
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'accepts when expected key is a string' do
|
112
|
-
expect(controller_with_session(var: 'hi')).to set_session['var']
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
context 'when the given key is not present in session' do
|
117
|
-
it 'rejects' do
|
118
|
-
expect(controller_with_session(var: 'hi')).not_to set_session[:other]
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
context 'with #[] + #to' do
|
124
|
-
context 'given a static value' do
|
125
|
-
context 'when the given key and value are present in session' do
|
126
|
-
it 'accepts' do
|
127
|
-
expect(controller_with_session(var: 'hi')).
|
128
|
-
to set_session[:var].to('hi')
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'accepts given nil' do
|
132
|
-
silence_warnings do
|
133
|
-
expect(controller_with_session(var: nil)).
|
134
|
-
to set_session[:var].to(nil)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
it 'accepts given false' do
|
139
|
-
expect(controller_with_session(var: false)).
|
140
|
-
to set_session[:var].to(false)
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
context 'when the given key is present in session but not the given value' do
|
145
|
-
it 'rejects' do
|
146
|
-
expect(controller_with_session(var: 'hi')).
|
147
|
-
not_to set_session[:var].to('other')
|
148
|
-
end
|
149
|
-
|
150
|
-
it 'rejects given nil' do
|
151
|
-
expect(controller_with_session(var: 'hi')).
|
152
|
-
not_to set_session[:var].to(nil)
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context 'when the given key is not present in session' do
|
157
|
-
it 'accepts given nil' do
|
158
|
-
silence_warnings do
|
159
|
-
expect(controller_with_session(var: 'hi')).
|
160
|
-
to set_session[:other].to(nil)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
it 'rejects given false' do
|
165
|
-
expect(controller_with_session(var: false)).
|
166
|
-
not_to set_session[:other].to(false)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
context 'given a dynamic value' do
|
172
|
-
context 'when the given key and value are present in session' do
|
173
|
-
it 'accepts' do
|
174
|
-
context = double(expected: 'value')
|
175
|
-
|
176
|
-
expect(controller_with_session(var: 'value')).
|
177
|
-
to set_session[:var].in_context(context).to { expected }
|
178
|
-
end
|
179
|
-
|
180
|
-
it 'accepts given nil' do
|
181
|
-
silence_warnings do
|
182
|
-
context = double(expected: nil)
|
183
|
-
|
184
|
-
expect(controller_with_session(var: nil)).
|
185
|
-
to set_session[:var].in_context(context).to { expected }
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'accepts given false' do
|
190
|
-
context = double(expected: false)
|
191
|
-
|
192
|
-
expect(controller_with_session(var: false)).
|
193
|
-
to set_session[:var].in_context(context).to { expected }
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
context 'when the given key is present in session but not the given value' do
|
198
|
-
it 'rejects given nil' do
|
199
|
-
context = double(expected: nil)
|
200
|
-
|
201
|
-
expect(controller_with_session(var: 'hi')).
|
202
|
-
not_to set_session[:var].in_context(context).to { expected }
|
203
|
-
end
|
204
|
-
|
205
|
-
it 'rejects given false' do
|
206
|
-
context = double(expected: false)
|
207
|
-
|
208
|
-
expect(controller_with_session(var: 'hi')).
|
209
|
-
not_to set_session[:var].in_context(context).to { expected }
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
context 'when the given key is not present in session' do
|
214
|
-
it 'rejects' do
|
215
|
-
context = double(expected: 'other')
|
216
|
-
|
217
|
-
expect(controller_with_session(var: 'unexpected')).
|
218
|
-
not_to set_session[:var].in_context(context).to { expected }
|
219
|
-
end
|
220
|
-
|
221
|
-
it 'accepts given nil' do
|
222
|
-
silence_warnings do
|
223
|
-
context = double(expected: nil)
|
224
|
-
|
225
|
-
expect(controller_with_session(var: 'hi')).
|
226
|
-
to set_session[:other].in_context(context).to { expected }
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'rejects given false' do
|
231
|
-
context = double(expected: false)
|
232
|
-
|
233
|
-
expect(controller_with_session(var: false)).
|
234
|
-
not_to set_session[:other].in_context(context).to { expected }
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
context 'a controller that does not set any session variables' do
|
242
|
-
context 'without any qualifiers' do
|
243
|
-
it 'rejects' do
|
244
|
-
expect(controller_without_session).not_to set_session
|
245
|
-
end
|
246
|
-
end
|
247
|
-
|
248
|
-
context 'with #[]' do
|
249
|
-
it 'rejects' do
|
250
|
-
expect(controller_without_session).
|
251
|
-
not_to set_session['any key']
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
context 'with #to' do
|
256
|
-
it 'rejects' do
|
257
|
-
expect(controller_without_session).
|
258
|
-
not_to set_session.to('any value')
|
259
|
-
end
|
3
|
+
describe Shoulda::Matchers::ActionController::SetSessionMatcher, type: :controller do
|
4
|
+
it_behaves_like 'set session or flash matcher' do
|
5
|
+
def store_name
|
6
|
+
'session'
|
260
7
|
end
|
261
8
|
|
262
|
-
|
263
|
-
|
264
|
-
expect(controller_without_session).
|
265
|
-
not_to set_session['any key'].to('any value')
|
266
|
-
end
|
267
|
-
|
268
|
-
it 'prints a warning when using .to(nil) to assert that a variable is unset' do
|
269
|
-
expectation = proc do
|
270
|
-
expect(controller_without_session).to set_session['any key'].to(nil)
|
271
|
-
end
|
272
|
-
|
273
|
-
expected_warning = <<EOT
|
274
|
-
Using `should set_session[...].to(nil)` to assert that a variable is unset is deprecated.
|
275
|
-
Please use `should_not set_session[...]` instead.
|
276
|
-
EOT
|
277
|
-
|
278
|
-
expect(&expectation).to print_warning_including(expected_warning)
|
279
|
-
end
|
9
|
+
def set_store
|
10
|
+
set_session
|
280
11
|
end
|
281
|
-
end
|
282
|
-
|
283
|
-
def controller_without_session
|
284
|
-
build_fake_response
|
285
|
-
end
|
286
12
|
|
287
|
-
|
288
|
-
|
289
|
-
session_hash.each do |key, value|
|
290
|
-
session[key] = value
|
291
|
-
end
|
13
|
+
def store_within(controller)
|
14
|
+
controller.session
|
292
15
|
end
|
293
16
|
end
|
294
17
|
end
|