shoulda-matchers 1.4.2 → 1.5.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.
- data/.travis.yml +11 -3
- data/Appraisals +3 -3
- data/Gemfile +1 -1
- data/Gemfile.lock +69 -70
- data/MIT-LICENSE +1 -1
- data/NEWS.md +22 -4
- data/README.md +3 -1
- data/Rakefile +9 -5
- data/features/step_definitions/rails_steps.rb +7 -7
- data/features/support/env.rb +1 -1
- data/gemfiles/3.0.gemfile +1 -1
- data/gemfiles/3.0.gemfile.lock +25 -22
- data/gemfiles/3.1.gemfile +1 -1
- data/gemfiles/3.1.gemfile.lock +27 -24
- data/gemfiles/3.2.gemfile +1 -1
- data/gemfiles/3.2.gemfile.lock +56 -52
- data/lib/shoulda/matchers/action_controller.rb +3 -2
- data/lib/shoulda/matchers/action_controller/assign_to_matcher.rb +10 -8
- data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +2 -4
- data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +3 -4
- data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +3 -4
- data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +6 -6
- data/lib/shoulda/matchers/action_controller/respond_with_content_type_matcher.rb +5 -2
- data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +2 -2
- data/lib/shoulda/matchers/action_controller/route_matcher.rb +12 -12
- data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -4
- data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +10 -11
- data/lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb +121 -0
- data/lib/shoulda/matchers/action_mailer/have_sent_email_matcher.rb +7 -4
- data/lib/shoulda/matchers/active_model.rb +1 -1
- data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +8 -8
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +5 -4
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +2 -2
- data/lib/shoulda/matchers/active_model/exception_message_finder.rb +0 -1
- data/lib/shoulda/matchers/active_model/helpers.rb +16 -7
- data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +8 -6
- data/lib/shoulda/matchers/active_model/validate_format_of_matcher.rb +19 -10
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +4 -4
- data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +19 -21
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +7 -7
- data/lib/shoulda/matchers/active_model/validation_message_finder.rb +1 -1
- data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +5 -5
- data/lib/shoulda/matchers/active_record/association_matcher.rb +3 -3
- data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +11 -7
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +2 -2
- data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +5 -5
- data/lib/shoulda/matchers/active_record/query_the_database_matcher.rb +5 -2
- data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -3
- data/lib/shoulda/matchers/assertion_error.rb +4 -1
- data/lib/shoulda/matchers/independent/delegate_matcher.rb +17 -7
- data/lib/shoulda/matchers/integrations/rspec.rb +19 -33
- data/lib/shoulda/matchers/version.rb +1 -1
- data/shoulda-matchers.gemspec +6 -4
- data/spec/shoulda/matchers/action_controller/assign_to_matcher_spec.rb +66 -0
- data/spec/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +22 -0
- data/spec/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +42 -0
- data/spec/shoulda/matchers/action_controller/render_template_matcher_spec.rb +78 -0
- data/spec/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +58 -0
- data/spec/shoulda/matchers/action_controller/respond_with_content_type_matcher_spec.rb +31 -0
- data/spec/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +31 -0
- data/spec/shoulda/matchers/action_controller/route_matcher_spec.rb +65 -0
- data/spec/shoulda/matchers/action_controller/set_session_matcher_spec.rb +51 -0
- data/spec/shoulda/matchers/action_controller/set_the_flash_matcher_spec.rb +153 -0
- data/spec/shoulda/matchers/action_controller/strong_parameters_matcher_spec.rb +142 -0
- data/spec/shoulda/matchers/action_mailer/have_sent_email_spec.rb +324 -0
- data/spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +111 -0
- data/spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb +124 -0
- data/spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +43 -0
- data/spec/shoulda/matchers/active_model/ensure_exclusion_of_matcher_spec.rb +74 -0
- data/spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb +171 -0
- data/spec/shoulda/matchers/active_model/ensure_length_of_matcher_spec.rb +113 -0
- data/spec/shoulda/{active_model → matchers/active_model}/exception_message_finder_spec.rb +2 -2
- data/spec/shoulda/matchers/active_model/helpers_spec.rb +158 -0
- data/spec/shoulda/matchers/active_model/only_integer_matcher_spec.rb +52 -0
- data/spec/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +41 -0
- data/spec/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +41 -0
- data/spec/shoulda/matchers/active_model/validate_format_of_matcher_spec.rb +75 -0
- data/spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +73 -0
- data/spec/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +127 -0
- data/spec/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +175 -0
- data/spec/shoulda/{active_model → matchers/active_model}/validation_message_finder_spec.rb +0 -1
- data/spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +106 -0
- data/spec/shoulda/matchers/active_record/association_matcher_spec.rb +534 -0
- data/spec/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +111 -0
- data/spec/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +78 -0
- data/spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +41 -0
- data/spec/shoulda/{active_record → matchers/active_record}/query_the_database_matcher_spec.rb +10 -10
- data/spec/shoulda/matchers/active_record/serialize_matcher_spec.rb +86 -0
- data/spec/shoulda/{independent → matchers/independent}/delegate_matcher_spec.rb +55 -34
- data/spec/spec_helper.rb +1 -2
- data/spec/support/active_model_versions.rb +4 -0
- data/spec/support/activemodel_helpers.rb +19 -0
- data/spec/support/controller_builder.rb +38 -12
- data/spec/support/model_builder.rb +8 -2
- metadata +106 -98
- data/spec/fixtures/addresses.yml +0 -3
- data/spec/fixtures/friendships.yml +0 -0
- data/spec/fixtures/posts.yml +0 -5
- data/spec/fixtures/products.yml +0 -0
- data/spec/fixtures/taggings.yml +0 -0
- data/spec/fixtures/tags.yml +0 -9
- data/spec/fixtures/users.yml +0 -6
- data/spec/shoulda/action_controller/assign_to_matcher_spec.rb +0 -63
- data/spec/shoulda/action_controller/filter_param_matcher_spec.rb +0 -20
- data/spec/shoulda/action_controller/redirect_to_matcher_spec.rb +0 -40
- data/spec/shoulda/action_controller/render_template_matcher_spec.rb +0 -69
- data/spec/shoulda/action_controller/render_with_layout_matcher_spec.rb +0 -55
- data/spec/shoulda/action_controller/respond_with_content_type_matcher_spec.rb +0 -28
- data/spec/shoulda/action_controller/respond_with_matcher_spec.rb +0 -83
- data/spec/shoulda/action_controller/route_matcher_spec.rb +0 -65
- data/spec/shoulda/action_controller/set_session_matcher_spec.rb +0 -46
- data/spec/shoulda/action_controller/set_the_flash_matcher_spec.rb +0 -130
- data/spec/shoulda/action_mailer/have_sent_email_spec.rb +0 -333
- data/spec/shoulda/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -115
- data/spec/shoulda/active_model/allow_value_matcher_spec.rb +0 -131
- data/spec/shoulda/active_model/disallow_value_matcher_spec.rb +0 -65
- data/spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb +0 -79
- data/spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb +0 -181
- data/spec/shoulda/active_model/ensure_length_of_matcher_spec.rb +0 -138
- data/spec/shoulda/active_model/helpers_spec.rb +0 -129
- data/spec/shoulda/active_model/only_integer_matcher_spec.rb +0 -69
- data/spec/shoulda/active_model/validate_acceptance_of_matcher_spec.rb +0 -43
- data/spec/shoulda/active_model/validate_confirmation_of_matcher_spec.rb +0 -48
- data/spec/shoulda/active_model/validate_format_of_matcher_spec.rb +0 -79
- data/spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb +0 -112
- data/spec/shoulda/active_model/validate_presence_of_matcher_spec.rb +0 -135
- data/spec/shoulda/active_model/validate_uniqueness_of_matcher_spec.rb +0 -154
- data/spec/shoulda/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -84
- data/spec/shoulda/active_record/association_matcher_spec.rb +0 -642
- data/spec/shoulda/active_record/have_db_column_matcher_spec.rb +0 -185
- data/spec/shoulda/active_record/have_db_index_matcher_spec.rb +0 -105
- data/spec/shoulda/active_record/have_readonly_attributes_matcher_spec.rb +0 -46
- data/spec/shoulda/active_record/serialize_matcher_spec.rb +0 -81
@@ -1,185 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveRecord::HaveDbColumnMatcher do
|
4
|
-
context "have_db_column" do
|
5
|
-
before do
|
6
|
-
@matcher = have_db_column(:nickname)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should accept an existing database column" do
|
10
|
-
create_table 'superheros' do |table|
|
11
|
-
table.string :nickname
|
12
|
-
end
|
13
|
-
define_model_class 'Superhero'
|
14
|
-
Superhero.new.should @matcher
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should reject a nonexistent database column" do
|
18
|
-
define_model :superhero
|
19
|
-
Superhero.new.should_not @matcher
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
context "have_db_column of type string" do
|
24
|
-
before do
|
25
|
-
@matcher = have_db_column(:nickname).of_type(:string)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should accept a column of correct type" do
|
29
|
-
create_table 'superheros' do |table|
|
30
|
-
table.string :nickname
|
31
|
-
end
|
32
|
-
define_model_class 'Superhero'
|
33
|
-
Superhero.new.should @matcher
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should reject a nonexistent database column" do
|
37
|
-
define_model :superhero
|
38
|
-
Superhero.new.should_not @matcher
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should reject a column of wrong type" do
|
42
|
-
create_table 'superheros' do |table|
|
43
|
-
table.integer :nickname
|
44
|
-
end
|
45
|
-
define_model_class 'Superhero'
|
46
|
-
Superhero.new.should_not @matcher
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
context "have_db_column with precision option" do
|
51
|
-
before do
|
52
|
-
@matcher = have_db_column(:salary).with_options(:precision => 5)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should accept a column of correct precision" do
|
56
|
-
create_table 'superheros' do |table|
|
57
|
-
table.decimal :salary, :precision => 5
|
58
|
-
end
|
59
|
-
define_model_class 'Superhero'
|
60
|
-
Superhero.new.should @matcher
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should reject a column of wrong precision" do
|
64
|
-
create_table 'superheros' do |table|
|
65
|
-
table.decimal :salary, :precision => 15
|
66
|
-
end
|
67
|
-
define_model_class 'Superhero'
|
68
|
-
Superhero.new.should_not @matcher
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "have_db_column with limit option" do
|
73
|
-
before do
|
74
|
-
@matcher = have_db_column(:email).
|
75
|
-
of_type(:string).
|
76
|
-
with_options(:limit => 255)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should accept a column of correct limit" do
|
80
|
-
create_table 'superheros' do |table|
|
81
|
-
table.string :email, :limit => 255
|
82
|
-
end
|
83
|
-
define_model_class 'Superhero'
|
84
|
-
Superhero.new.should @matcher
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should reject a column of wrong limit" do
|
88
|
-
create_table 'superheros' do |table|
|
89
|
-
table.string :email, :limit => 500
|
90
|
-
end
|
91
|
-
define_model_class 'Superhero'
|
92
|
-
Superhero.new.should_not @matcher
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "have_db_column with default option" do
|
97
|
-
before do
|
98
|
-
@matcher = have_db_column(:admin).
|
99
|
-
of_type(:boolean).
|
100
|
-
with_options(:default => false)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should accept a column of correct default" do
|
104
|
-
create_table 'superheros' do |table|
|
105
|
-
table.boolean :admin, :default => false
|
106
|
-
end
|
107
|
-
define_model_class 'Superhero'
|
108
|
-
Superhero.new.should @matcher
|
109
|
-
end
|
110
|
-
|
111
|
-
it "should reject a column of wrong default" do
|
112
|
-
create_table 'superheros' do |table|
|
113
|
-
table.boolean :admin, :default => true
|
114
|
-
end
|
115
|
-
define_model_class 'Superhero'
|
116
|
-
Superhero.new.should_not @matcher
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context "have_db_column with null option" do
|
121
|
-
before do
|
122
|
-
@matcher = have_db_column(:admin).
|
123
|
-
of_type(:boolean).
|
124
|
-
with_options(:null => false)
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should accept a column of correct null" do
|
128
|
-
create_table 'superheros' do |table|
|
129
|
-
table.boolean :admin, :null => false
|
130
|
-
end
|
131
|
-
define_model_class 'Superhero'
|
132
|
-
Superhero.new.should @matcher
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should reject a column of wrong null" do
|
136
|
-
create_table 'superheros' do |table|
|
137
|
-
table.boolean :admin, :null => true
|
138
|
-
end
|
139
|
-
define_model_class 'Superhero'
|
140
|
-
Superhero.new.should_not @matcher
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
context "have_db_column with scale option" do
|
145
|
-
before do
|
146
|
-
@matcher = have_db_column(:salary).
|
147
|
-
of_type(:decimal).
|
148
|
-
with_options(:scale => 2)
|
149
|
-
end
|
150
|
-
|
151
|
-
it "should accept a column of correct scale" do
|
152
|
-
create_table 'superheros' do |table|
|
153
|
-
table.decimal :salary, :precision => 10, :scale => 2
|
154
|
-
end
|
155
|
-
define_model_class 'Superhero'
|
156
|
-
Superhero.new.should @matcher
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should reject a column of wrong scale" do
|
160
|
-
create_table 'superheros' do |table|
|
161
|
-
table.decimal :salary, :precision => 10, :scale => 4
|
162
|
-
end
|
163
|
-
define_model_class 'Superhero'
|
164
|
-
Superhero.new.should_not @matcher
|
165
|
-
end
|
166
|
-
end
|
167
|
-
|
168
|
-
context "have_db_column with primary option" do
|
169
|
-
it "should accept a column that is primary" do
|
170
|
-
create_table 'superheros' do |table|
|
171
|
-
table.integer :id, :primary => true
|
172
|
-
end
|
173
|
-
define_model_class 'Superhero'
|
174
|
-
Superhero.new.should have_db_column(:id).with_options(:primary => true)
|
175
|
-
end
|
176
|
-
|
177
|
-
it "should reject a column that is not primary" do
|
178
|
-
create_table 'superheros' do |table|
|
179
|
-
table.integer :primary
|
180
|
-
end
|
181
|
-
define_model_class 'Superhero'
|
182
|
-
Superhero.new.should_not have_db_column(:primary).with_options(:primary => true)
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
@@ -1,105 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveRecord::HaveDbIndexMatcher do
|
4
|
-
context "have_db_index" do
|
5
|
-
before do
|
6
|
-
@matcher = have_db_index(:age)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should accept an existing index" do
|
10
|
-
db_connection = create_table 'superheros' do |table|
|
11
|
-
table.integer :age
|
12
|
-
end
|
13
|
-
db_connection.add_index :superheros, :age
|
14
|
-
define_model_class 'Superhero'
|
15
|
-
Superhero.new.should @matcher
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should reject a nonexistent index" do
|
19
|
-
define_model :superhero
|
20
|
-
Superhero.new.should_not @matcher
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "have_db_index with unique option" do
|
25
|
-
before do
|
26
|
-
@matcher = have_db_index(:ssn).unique(true)
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should accept an index of correct unique" do
|
30
|
-
db_connection = create_table 'superheros' do |table|
|
31
|
-
table.integer :ssn
|
32
|
-
end
|
33
|
-
db_connection.add_index :superheros, :ssn, :unique => true
|
34
|
-
define_model_class 'Superhero'
|
35
|
-
Superhero.new.should @matcher
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should reject an index of wrong unique" do
|
39
|
-
db_connection = create_table 'superheros' do |table|
|
40
|
-
table.integer :ssn
|
41
|
-
end
|
42
|
-
db_connection.add_index :superheros, :ssn, :unique => false
|
43
|
-
define_model_class 'Superhero'
|
44
|
-
Superhero.new.should_not @matcher
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "have_db_index on multiple columns" do
|
49
|
-
before do
|
50
|
-
@matcher = have_db_index([:geocodable_type, :geocodable_id])
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should accept an existing index" do
|
54
|
-
db_connection = create_table 'geocodings' do |table|
|
55
|
-
table.integer :geocodable_id
|
56
|
-
table.string :geocodable_type
|
57
|
-
end
|
58
|
-
db_connection.add_index :geocodings, [:geocodable_type, :geocodable_id]
|
59
|
-
define_model_class 'Geocoding'
|
60
|
-
Geocoding.new.should @matcher
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should reject a nonexistant index" do
|
64
|
-
db_connection = create_table 'geocodings' do |table|
|
65
|
-
table.integer :geocodable_id
|
66
|
-
table.string :geocodable_type
|
67
|
-
end
|
68
|
-
define_model_class 'Geocoding'
|
69
|
-
Geocoding.new.should_not @matcher
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should join columns with and describing multiple columns" do
|
74
|
-
have_db_index([:user_id, :post_id]).description.should =~ /on columns user_id and post_id/
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should context a unique index as unique" do
|
78
|
-
have_db_index(:user_id).unique(true).description.should =~ /a unique index/
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should context a non-unique index as non-unique" do
|
82
|
-
have_db_index(:user_id).unique(false).description.should =~ /a non-unique index/
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should not context an index's uniqueness when it isn't important" do
|
86
|
-
have_db_index(:user_id).description.should_not =~ /unique/
|
87
|
-
end
|
88
|
-
|
89
|
-
it "allows an IndexDefinition to have a truthy value for unique" do
|
90
|
-
db_connection = create_table 'superheros' do |table|
|
91
|
-
table.integer :age
|
92
|
-
end
|
93
|
-
db_connection.add_index :superheros, :age
|
94
|
-
define_model_class 'Superhero'
|
95
|
-
|
96
|
-
@matcher = have_db_index(:age).unique(true)
|
97
|
-
|
98
|
-
index_definition = stub("ActiveRecord::ConnectionAdapters::IndexDefinition",
|
99
|
-
:unique => 7,
|
100
|
-
:name => :age)
|
101
|
-
@matcher.stubs(:matched_index => index_definition)
|
102
|
-
|
103
|
-
Superhero.new.should @matcher
|
104
|
-
end
|
105
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveRecord::HaveReadonlyAttributeMatcher do
|
4
|
-
context "an attribute that cannot be set after being saved" do
|
5
|
-
before do
|
6
|
-
define_model :example, :attr => :string do
|
7
|
-
attr_readonly :attr
|
8
|
-
end
|
9
|
-
@model = Example.new
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should accept being read-only" do
|
13
|
-
@model.should have_readonly_attribute(:attr)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "an attribute not included in the readonly set" do
|
18
|
-
before do
|
19
|
-
define_model :example, :attr => :string, :other => :string do
|
20
|
-
attr_readonly :other
|
21
|
-
end
|
22
|
-
@model = Example.new
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should not accept being read-only" do
|
26
|
-
@model.should_not have_readonly_attribute(:attr)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "an attribute on a class with no readonly attributes" do
|
31
|
-
before do
|
32
|
-
define_model :example, :attr => :string
|
33
|
-
@model = Example.new
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should not accept being read-only" do
|
37
|
-
@model.should_not have_readonly_attribute(:attr)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should assign a failure message" do
|
41
|
-
matcher = have_readonly_attribute(:attr)
|
42
|
-
matcher.matches?(@model).should == false
|
43
|
-
matcher.failure_message.should_not be_nil
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Shoulda::Matchers::ActiveRecord::SerializeMatcher do
|
4
|
-
context "an attribute that should be serialized" do
|
5
|
-
let(:model) do
|
6
|
-
define_model(:example, :attr => :string) do
|
7
|
-
serialize :attr
|
8
|
-
end.new
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should be serialized" do
|
12
|
-
model.should serialize(:attr)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "an attribute that should be serialized with a type of Hash" do
|
17
|
-
let(:model) do
|
18
|
-
define_model(:example, :attr => :string) do
|
19
|
-
serialize :attr, Hash
|
20
|
-
end.new
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should be serialized" do
|
24
|
-
model.should serialize(:attr).as(Hash)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should not match when using as_instance_of" do
|
28
|
-
model.should_not serialize(:attr).as_instance_of(Hash)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context "an attribute that should be serialized with a type of Array" do
|
33
|
-
let(:model) do
|
34
|
-
define_model(:example, :attr => :string, :attr2 => :string) do
|
35
|
-
serialize :attr, Array
|
36
|
-
serialize :attr2, Array
|
37
|
-
end.new
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should be serialized" do
|
41
|
-
model.should serialize(:attr).as(Array)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context "an attribute that should be serialized but isn't" do
|
46
|
-
let(:model) { define_model(:example, :attr => :string).new }
|
47
|
-
|
48
|
-
it "should assign a failure message" do
|
49
|
-
matcher = serialize(:attr)
|
50
|
-
matcher.matches?(model).should == false
|
51
|
-
matcher.failure_message.should_not be_nil
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should assign a failure message with 'as'" do
|
55
|
-
matcher = serialize(:attr).as(Hash)
|
56
|
-
matcher.matches?(model).should == false
|
57
|
-
matcher.failure_message.should_not be_nil
|
58
|
-
end
|
59
|
-
|
60
|
-
context "a serializer that is an instance of a class" do
|
61
|
-
before do
|
62
|
-
define_class(:ExampleSerializer) do
|
63
|
-
def load(*); end
|
64
|
-
def dump(*); end
|
65
|
-
end
|
66
|
-
define_model :example, :attr => :string do
|
67
|
-
serialize :attr, ExampleSerializer.new
|
68
|
-
end
|
69
|
-
@model = Example.new
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should match when using as_instance_of" do
|
73
|
-
@model.should serialize(:attr).as_instance_of(ExampleSerializer)
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should not match when using as" do
|
77
|
-
@model.should_not serialize(:attr).as(ExampleSerializer)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|