remarkable_activerecord 3.1.9 → 3.1.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,84 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'validate_presence_of' do
4
- include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :product, :title => :string, :size => :string, :category => :string do
9
- validates_presence_of :title, :size, options
10
- end
11
-
12
- validate_presence_of(:title, :size)
13
- end
14
-
15
- describe 'messages' do
16
- before(:each){ @matcher = define_and_validate }
17
-
18
- it 'should contain a description' do
19
- @matcher.description.should == 'require title and size to be set'
20
- end
21
-
22
- it 'should set allow_nil? message' do
23
- @matcher = validate_presence_of(:category)
24
- @matcher.matches?(@model)
25
- @matcher.failure_message.should == 'Expected Product to require category to be set'
26
- @matcher.negative_failure_message.should == 'Did not expect Product to require category to be set'
27
- end
28
- end
29
-
30
- describe 'matchers' do
31
- describe 'without options' do
32
- before(:each){ define_and_validate }
33
-
34
- it { should validate_presence_of(:size) }
35
- it { should validate_presence_of(:title) }
36
- it { should validate_presence_of(:title, :size) }
37
- it { should_not validate_presence_of(:category) }
38
- end
39
-
40
- create_message_specs(self)
41
-
42
- describe 'with belongs to' do
43
- def define_and_validate(validation)
44
- define_model :category
45
-
46
- define_model :product, :category_id => :integer do
47
- belongs_to :category
48
- validates_presence_of :category if validation
49
- end
50
-
51
- validate_presence_of(:category)
52
- end
53
-
54
- it { should define_and_validate(true) }
55
- it { should_not define_and_validate(false) }
56
- end
57
-
58
- describe 'with has many' do
59
- def define_and_validate(validation)
60
- define_model :stocks, :product_id => :integer
61
-
62
- define_model :product do
63
- has_many :stocks
64
- validates_presence_of :stocks if validation
65
- end
66
-
67
- validate_presence_of :stocks
68
- end
69
-
70
- it { should define_and_validate(true) }
71
- it { should_not define_and_validate(false) }
72
- end
73
- end
74
-
75
- describe 'macros' do
76
- before(:each){ define_and_validate }
77
-
78
- should_validate_presence_of(:size)
79
- should_validate_presence_of(:title)
80
- should_validate_presence_of(:size, :title)
81
- should_not_validate_presence_of(:category)
82
- end
83
- end
84
-
@@ -1,182 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe 'validate_uniqueness_of' do
4
- include ModelBuilder
5
-
6
- # Defines a model, create a validation and returns a raw matcher
7
- def define_and_validate(options={})
8
- @model = define_model :user, :username => :string, :email => :string, :public => :boolean, :deleted_at => :timestamp do
9
- validates_uniqueness_of :username, options
10
- end
11
-
12
- # Create a model
13
- User.create(:username => 'jose', :deleted_at => 1.day.ago, :public => false)
14
-
15
- validate_uniqueness_of(:username)
16
- end
17
-
18
- describe 'messages' do
19
- before(:each){ @matcher = define_and_validate }
20
-
21
- it 'should contain a description' do
22
- @matcher.description.should == 'require unique values for username'
23
-
24
- @matcher.case_sensitive
25
- @matcher.description.should == 'require unique values for username case sensitive'
26
-
27
- @matcher.case_sensitive(false)
28
- @matcher.description.should == 'require unique values for username case insensitive'
29
-
30
- @matcher.allow_nil
31
- @matcher.description.should == 'require unique values for username case insensitive and allowing nil values'
32
-
33
- @matcher.allow_blank(false)
34
- @matcher.description.should == 'require unique values for username case insensitive, allowing nil values, and not allowing blank values'
35
-
36
- @matcher = validate_uniqueness_of(:username, :scope => :email)
37
- @matcher.description.should == 'require unique values for username scoped to :email'
38
-
39
- @matcher = validate_uniqueness_of(:username)
40
- @matcher.scope(:email)
41
- @matcher.scope(:public)
42
- @matcher.description.should == 'require unique values for username scoped to :email and :public'
43
- end
44
-
45
- it 'should set responds_to_scope? message' do
46
- @matcher.scope(:title).matches?(@model)
47
- @matcher.failure_message.should == 'Expected User instance responds to title='
48
- end
49
-
50
- it 'should set is_unique? message' do
51
- @matcher = validate_uniqueness_of(:email)
52
- @matcher.matches?(@model)
53
- @matcher.failure_message.should == 'Expected User to require unique values for email'
54
- end
55
-
56
- it 'should set case_sensitive? message' do
57
- @matcher.case_sensitive(false).matches?(@model)
58
- @matcher.failure_message.should == 'Expected User to not be case sensitive on username validation'
59
- end
60
-
61
- it 'should valid with new scope' do
62
- @matcher.scope(:email).matches?(@model)
63
- @matcher.failure_message.should == 'Expected User to be valid when username scope (email) change'
64
- end
65
- end
66
-
67
- describe 'matcher' do
68
-
69
- describe 'without options' do
70
- before(:each){ define_and_validate }
71
-
72
- it { should validate_uniqueness_of(:username) }
73
- it { should_not validate_uniqueness_of(:email) }
74
- end
75
-
76
- describe 'scoped to' do
77
- it { should define_and_validate(:scope => :email).scope(:email) }
78
- it { should define_and_validate(:scope => :public).scope(:public) }
79
- it { should define_and_validate(:scope => :deleted_at).scope(:deleted_at) }
80
- it { should define_and_validate(:scope => [:email, :public]).scope(:email, :public) }
81
- it { should define_and_validate(:scope => [:email, :public, :deleted_at]).scope(:email, :public, :deleted_at) }
82
- it { should_not define_and_validate(:scope => :email).scope(:title) }
83
- it { should_not define_and_validate(:scope => :email).scope(:public) }
84
- end
85
-
86
- create_message_specs(self)
87
-
88
- # Those are macros to test optionals which accept only boolean values
89
- create_optional_boolean_specs(:allow_nil, self)
90
- create_optional_boolean_specs(:allow_blank, self)
91
- create_optional_boolean_specs(:case_sensitive, self)
92
- end
93
-
94
- describe 'errors' do
95
- it 'should raise an error if no object is found' do
96
- @matcher = define_and_validate
97
- User.destroy_all
98
-
99
- proc { @matcher.matches?(@model) }.should raise_error(ScriptError)
100
- end
101
-
102
- it 'should raise an error if no object with not nil attribute is found' do
103
- @matcher = define_and_validate.allow_nil
104
- User.destroy_all
105
-
106
- User.create(:username => nil)
107
- proc { @matcher.matches?(@model) }.should raise_error(ScriptError)
108
-
109
- User.create(:username => 'jose')
110
- proc { @matcher.matches?(@model) }.should_not raise_error(ScriptError)
111
- end
112
-
113
- it 'should raise an error if no object with not blank attribute is found' do
114
- @matcher = define_and_validate.allow_blank
115
- User.destroy_all
116
-
117
- User.create(:username => '')
118
- proc { @matcher.matches?(@model) }.should raise_error(ScriptError)
119
-
120
- User.create(:username => 'jose')
121
- proc { @matcher.matches?(@model) }.should_not raise_error(ScriptError)
122
- end
123
-
124
- it 'should raise an error if @existing record is the same as @subject' do
125
- @matcher = define_and_validate
126
- proc { @matcher.matches?(User.first) }.should raise_error(ScriptError, /which is different from the subject record/)
127
- end
128
-
129
- it 'should raise an error if cannot find a new scope value' do
130
- @matcher = define_and_validate(:scope => :email).scope(:email)
131
-
132
- User.stub!(:find).and_return do |many, conditions|
133
- if many == :all
134
- 1000.upto(1100).map{|i| User.new(:email => i) }
135
- else
136
- User.new(:username => 'jose')
137
- end
138
- end
139
- lambda { @matcher.matches?(@model) }.should raise_error(ScriptError)
140
-
141
- User.stub!(:find).and_return do |many, conditions|
142
- if many == :all
143
- 1000.upto(1099).map{|i| User.new(:email => i) }
144
- else
145
- User.new(:username => 'jose')
146
- end
147
- end
148
- lambda { @matcher.matches?(@model) }.should_not raise_error(ScriptError)
149
- end
150
-
151
- describe 'when null or blank values are not allowed' do
152
- def define_and_validate(options={})
153
- @model = define_model :user, :username => [:string, {:null => false}] do
154
- validates_uniqueness_of :username, options
155
- end
156
-
157
- User.create(:username => 'jose')
158
- validate_uniqueness_of(:username)
159
- end
160
-
161
- it { should define_and_validate }
162
- it { should define_and_validate(:allow_nil => false).allow_nil(false) }
163
-
164
- it 'should raise an error if allow nil is true but we cannot save nil values in the database'do
165
- lambda { should define_and_validate.allow_nil }.should raise_error(ScriptError, /You declared that username accepts nil values in validate_uniqueness_of, but I cannot save nil values in the database, got/)
166
- end
167
- end
168
- end
169
-
170
- describe 'macros' do
171
- before(:each){ define_and_validate(:scope => :email) }
172
-
173
- should_validate_uniqueness_of :username
174
- should_validate_uniqueness_of :username, :scope => :email
175
- should_not_validate_uniqueness_of :email
176
- should_not_validate_uniqueness_of :username, :scope => :access_code
177
-
178
- should_validate_uniqueness_of :username do |m|
179
- m.scope :email
180
- end
181
- end
182
- end