sequel_spec 0.1.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.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +22 -0
  6. data/README.md +91 -0
  7. data/Rakefile +1 -0
  8. data/lib/sequel_spec.rb +8 -0
  9. data/lib/sequel_spec/association.rb +13 -0
  10. data/lib/sequel_spec/association/association_matcher.rb +32 -0
  11. data/lib/sequel_spec/association/have_many_to_many_matcher.rb +15 -0
  12. data/lib/sequel_spec/association/have_many_to_one_matcher.rb +15 -0
  13. data/lib/sequel_spec/association/have_one_through_one_matcher.rb +15 -0
  14. data/lib/sequel_spec/association/have_one_to_many_matcher.rb +15 -0
  15. data/lib/sequel_spec/association/have_one_to_one_matcher.rb +15 -0
  16. data/lib/sequel_spec/base.rb +45 -0
  17. data/lib/sequel_spec/integration/rspec.rb +6 -0
  18. data/lib/sequel_spec/validation.rb +18 -0
  19. data/lib/sequel_spec/validation/validate_format_matcher.rb +42 -0
  20. data/lib/sequel_spec/validation/validate_includes_matcher.rb +43 -0
  21. data/lib/sequel_spec/validation/validate_integer_matcher.rb +23 -0
  22. data/lib/sequel_spec/validation/validate_length_matcher.rb +81 -0
  23. data/lib/sequel_spec/validation/validate_matcher.rb +67 -0
  24. data/lib/sequel_spec/validation/validate_not_null_matcher.rb +21 -0
  25. data/lib/sequel_spec/validation/validate_numeric_matcher.rb +23 -0
  26. data/lib/sequel_spec/validation/validate_presence_matcher.rb +23 -0
  27. data/lib/sequel_spec/validation/validate_schema_types_matcher.rb +23 -0
  28. data/lib/sequel_spec/validation/validate_type_matcher.rb +42 -0
  29. data/lib/sequel_spec/validation/validate_unique_matcher.rb +31 -0
  30. data/lib/sequel_spec/version.rb +3 -0
  31. data/sequel_spec.gemspec +25 -0
  32. data/spec/migrations/001_create_tables.rb +26 -0
  33. data/spec/sequel_spec/association/have_many_to_many_matcher_spec.rb +57 -0
  34. data/spec/sequel_spec/association/have_many_to_one_matcher_spec.rb +57 -0
  35. data/spec/sequel_spec/association/have_one_through_one_matcher_spec.rb +57 -0
  36. data/spec/sequel_spec/association/have_one_to_many_matcher_spec.rb +57 -0
  37. data/spec/sequel_spec/association/have_one_to_one_matcher_spec.rb +57 -0
  38. data/spec/sequel_spec/validation/validate_format_matcher_spec.rb +88 -0
  39. data/spec/sequel_spec/validation/validate_includes_matcher_spec.rb +88 -0
  40. data/spec/sequel_spec/validation/validate_integer_matcher_spec.rb +76 -0
  41. data/spec/sequel_spec/validation/validate_length_matcher_spec.rb +252 -0
  42. data/spec/sequel_spec/validation/validate_not_null_matcher_spec.rb +83 -0
  43. data/spec/sequel_spec/validation/validate_numeric_matcher_spec.rb +76 -0
  44. data/spec/sequel_spec/validation/validate_presence_matcher_spec.rb +77 -0
  45. data/spec/sequel_spec/validation/validate_schema_types_matcher_spec.rb +83 -0
  46. data/spec/sequel_spec/validation/validate_type_matcher_spec.rb +88 -0
  47. data/spec/sequel_spec/validation/validate_unique_matcher_spec.rb +83 -0
  48. data/spec/spec_helper.rb +33 -0
  49. data/spec/support/test_helpers.rb +19 -0
  50. metadata +164 -0
@@ -0,0 +1,252 @@
1
+ require 'spec_helper'
2
+
3
+ describe "validate_length_matcher" do
4
+ before :all do
5
+ define_model :item do
6
+ plugin :validation_helpers
7
+
8
+ def validate
9
+ validates_length_range 1..10, :manufacturer, :allow_nil => true
10
+ validates_exact_length 4, :name, :allow_nil => true
11
+ validates_min_length 4, :owner, :allow_nil => true
12
+ validates_max_length 4, :origin, :allow_nil => true
13
+ end
14
+ end
15
+ end
16
+
17
+ subject{ Item }
18
+
19
+ it "should require an attribute" do
20
+ expect {
21
+ subject.should validate_length_of
22
+ }.to raise_error(ArgumentError)
23
+ end
24
+
25
+ it "should require additionnal parameters" do
26
+ expect {
27
+ subject.should validate_length_of(:name)
28
+ }.to raise_error(ArgumentError)
29
+ end
30
+
31
+ it "should accept with valid parameters and options" do
32
+ expect {
33
+ subject.should validate_length_of(:name).is(4).allowing_nil
34
+ }.not_to raise_error
35
+ end
36
+
37
+ it "should reject with valid parameters but invalid options" do
38
+ expect {
39
+ subject.should validate_length_of(:name).is(4).allowing_blank
40
+ }.to raise_error
41
+ end
42
+
43
+ context "with exact length" do
44
+ it "should accept with valid parameters" do
45
+ expect {
46
+ subject.should validate_length_of(:name).is(4)
47
+ }.not_to raise_error
48
+ end
49
+
50
+ it "should reject with invalid parameters" do
51
+ expect {
52
+ subject.should validate_length_of(:name).is(5)
53
+ }.to raise_error
54
+ end
55
+ end
56
+
57
+ context "with length range" do
58
+ it "should accept with valid parameters" do
59
+ expect {
60
+ subject.should validate_length_of(:manufacturer).is_between(1..10)
61
+ }.not_to raise_error
62
+ end
63
+
64
+ it "should reject with invalid parameters" do
65
+ expect {
66
+ subject.should validate_length_of(:manufacturer).is_between(1..20)
67
+ }.to raise_error
68
+ end
69
+ end
70
+
71
+ context "with minimum length" do
72
+ it "should accept with valid parameters" do
73
+ expect {
74
+ subject.should validate_length_of(:owner).is_at_least(4)
75
+ }.not_to raise_error
76
+ end
77
+
78
+ it "should reject with invalid parameters" do
79
+ expect {
80
+ subject.should validate_length_of(:owner).is_at_least(8)
81
+ }.to raise_error
82
+ end
83
+ end
84
+
85
+ context "with maximum length" do
86
+ it "should accept with valid parameters" do
87
+ expect {
88
+ subject.should validate_length_of(:origin).is_at_most(4)
89
+ }.not_to raise_error
90
+ end
91
+
92
+ it "should reject with invalid parameters" do
93
+ expect {
94
+ subject.should validate_length_of(:origin).is_at_most(8)
95
+ }.to raise_error
96
+ end
97
+ end
98
+
99
+ describe "messages" do
100
+ context "with exact length" do
101
+ describe "without option" do
102
+ it "should contain a description" do
103
+ @matcher = validate_length_of(:name).is(4)
104
+ @matcher.description.should == "validate that length of :name is exactly 4"
105
+ end
106
+
107
+ it "should set failure messages" do
108
+ @matcher = validate_length_of(:name).is(4)
109
+ @matcher.matches? subject
110
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
111
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
112
+ end
113
+ end
114
+
115
+ describe "with options" do
116
+ it "should contain a description" do
117
+ @matcher = validate_length_of(:name).is(4).allowing_nil
118
+ @matcher.description.should == "validate that length of :name is exactly 4 with option(s) :allow_nil => true"
119
+ end
120
+
121
+ it "should set failure messages" do
122
+ @matcher = validate_length_of(:price).is(4).allowing_nil
123
+ @matcher.matches? subject
124
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
125
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
126
+ end
127
+
128
+ it "should explicit used options if different than expected" do
129
+ @matcher = validate_length_of(:name).is(4).allowing_blank
130
+ @matcher.matches? subject
131
+ explanation = " but called with option(s) :allow_nil => true instead"
132
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
133
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
134
+ end
135
+ end
136
+ end
137
+
138
+ context "with length range" do
139
+ describe "without option" do
140
+ it "should contain a description" do
141
+ @matcher = validate_length_of(:manufacturer).is_between(1..10)
142
+ @matcher.description.should == "validate that length of :manufacturer is included in 1..10"
143
+ end
144
+
145
+ it "should set failure messages" do
146
+ @matcher = validate_length_of(:manufacturer).is_between(1..10)
147
+ @matcher.matches? subject
148
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
149
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
150
+ end
151
+ end
152
+
153
+ describe "with options" do
154
+ it "should contain a description" do
155
+ @matcher = validate_length_of(:manufacturer).is_between(1..10).allowing_nil
156
+ @matcher.description.should == "validate that length of :manufacturer is included in 1..10 with option(s) :allow_nil => true"
157
+ end
158
+
159
+ it "should set failure messages" do
160
+ @matcher = validate_length_of(:price).is_between(1..10).allowing_nil
161
+ @matcher.matches? subject
162
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
163
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
164
+ end
165
+
166
+ it "should explicit used options if different than expected" do
167
+ @matcher = validate_length_of(:manufacturer).is_between(1..10).allowing_blank
168
+ @matcher.matches? subject
169
+ explanation = " but called with option(s) :allow_nil => true instead"
170
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
171
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
172
+ end
173
+ end
174
+ end
175
+
176
+ context "with minimum range" do
177
+ describe "without option" do
178
+ it "should contain a description" do
179
+ @matcher = validate_length_of(:owner).is_at_least(4)
180
+ @matcher.description.should == "validate that length of :owner is greater than or equal to 4"
181
+ end
182
+
183
+ it "should set failure messages" do
184
+ @matcher = validate_length_of(:owner).is_at_least(4)
185
+ @matcher.matches? subject
186
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
187
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
188
+ end
189
+ end
190
+
191
+ describe "with options" do
192
+ it "should contain a description" do
193
+ @matcher = validate_length_of(:owner).is_at_least(4).allowing_nil
194
+ @matcher.description.should == "validate that length of :owner is greater than or equal to 4 with option(s) :allow_nil => true"
195
+ end
196
+
197
+ it "should set failure messages" do
198
+ @matcher = validate_length_of(:price).is_at_least(4).allowing_nil
199
+ @matcher.matches? subject
200
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
201
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
202
+ end
203
+
204
+ it "should explicit used options if different than expected" do
205
+ @matcher = validate_length_of(:owner).is_at_least(4).allowing_blank
206
+ @matcher.matches? subject
207
+ explanation = " but called with option(s) :allow_nil => true instead"
208
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
209
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
210
+ end
211
+ end
212
+ end
213
+
214
+ context "with maximum range" do
215
+ describe "without option" do
216
+ it "should contain a description" do
217
+ @matcher = validate_length_of(:origin).is_at_most(4)
218
+ @matcher.description.should == "validate that length of :origin is less than or equal to 4"
219
+ end
220
+
221
+ it "should set failure messages" do
222
+ @matcher = validate_length_of(:origin).is_at_most(4)
223
+ @matcher.matches? subject
224
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
225
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
226
+ end
227
+ end
228
+
229
+ describe "with options" do
230
+ it "should contain a description" do
231
+ @matcher = validate_length_of(:origin).is_at_most(4).allowing_nil
232
+ @matcher.description.should == "validate that length of :origin is less than or equal to 4 with option(s) :allow_nil => true"
233
+ end
234
+
235
+ it "should set failure messages" do
236
+ @matcher = validate_length_of(:price).is_at_most(4).allowing_nil
237
+ @matcher.matches? subject
238
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
239
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
240
+ end
241
+
242
+ it "should explicit used options if different than expected" do
243
+ @matcher = validate_length_of(:origin).is_at_most(4).allowing_blank
244
+ @matcher.matches? subject
245
+ explanation = " but called with option(s) :allow_nil => true instead"
246
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
247
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
248
+ end
249
+ end
250
+ end
251
+ end
252
+ end
@@ -0,0 +1,83 @@
1
+ require 'spec_helper'
2
+
3
+ describe "validate_not_null_matcher" do
4
+ before do
5
+ define_model :item do
6
+ plugin :validation_helpers
7
+
8
+ def validate
9
+ validates_not_null :name, :message => "Hello"
10
+ end
11
+ end
12
+ end
13
+
14
+ subject{ Item }
15
+
16
+ it "should require an attribute" do
17
+ expect {
18
+ subject.should validate_not_null
19
+ }.to raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should accept with an attribute" do
23
+ expect {
24
+ subject.should validate_not_null(:name)
25
+ }.not_to raise_error
26
+ end
27
+
28
+ it "should accept with valid options" do
29
+ expect {
30
+ subject.should validate_not_null(:name).with_message "Hello"
31
+ }.not_to raise_error
32
+ end
33
+
34
+ it "should reject with options with invalid values" do
35
+ expect {
36
+ subject.should validate_not_null(:name).with_message "Bye"
37
+ }.to raise_error
38
+ end
39
+
40
+ it "should reject with invalid options" do
41
+ expect {
42
+ subject.should validate_not_null(:name).allowing_nil
43
+ }.to raise_error
44
+ end
45
+
46
+ describe "messages" do
47
+ describe "without option" do
48
+ it "should contain a description" do
49
+ @matcher = validate_not_null :name
50
+ @matcher.description.should == "validate that :name is not null"
51
+ end
52
+
53
+ it "should set failure messages" do
54
+ @matcher = validate_not_null :name
55
+ @matcher.matches? subject
56
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
57
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
58
+ end
59
+ end
60
+
61
+ describe "with options" do
62
+ it "should contain a description" do
63
+ @matcher = validate_not_null(:name).with_message("Hello")
64
+ @matcher.description.should == 'validate that :name is not null with option(s) :message => "Hello"'
65
+ end
66
+
67
+ it "should set failure messages" do
68
+ @matcher = validate_not_null(:price).with_message("Hello")
69
+ @matcher.matches? subject
70
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
71
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
72
+ end
73
+
74
+ it "should explicit used options if different than expected" do
75
+ @matcher = validate_not_null(:name).with_message("Hello world")
76
+ @matcher.matches? subject
77
+ explanation = ' but called with option(s) :message => "Hello" instead'
78
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
79
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe "validate_numeric_matcher" do
4
+ before :all do
5
+ define_model :item do
6
+ plugin :validation_helpers
7
+
8
+ def validate
9
+ validates_numeric [:id, :name], :allow_nil => true
10
+ end
11
+ end
12
+ end
13
+
14
+ subject{ Item }
15
+
16
+ it "should require an attribute" do
17
+ expect {
18
+ subject.should validate_numeric
19
+ }.to raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should accept with an attribute" do
23
+ expect {
24
+ subject.should validate_numeric(:name)
25
+ }.not_to raise_error
26
+ end
27
+
28
+ it "should accept with valid options" do
29
+ expect {
30
+ subject.should validate_numeric(:name).allowing_nil
31
+ }.not_to raise_error
32
+ end
33
+
34
+ it "should reject with invalid options" do
35
+ expect {
36
+ subject.should validate_numeric(:name).allowing_blank
37
+ }.to raise_error
38
+ end
39
+
40
+ describe "messages" do
41
+ describe "without option" do
42
+ it "should contain a description" do
43
+ @matcher = validate_numeric :name
44
+ @matcher.description.should == "validate that :name is a valid float"
45
+ end
46
+
47
+ it "should set failure messages" do
48
+ @matcher = validate_numeric :name
49
+ @matcher.matches? subject
50
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
51
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
52
+ end
53
+ end
54
+ describe "with options" do
55
+ it "should contain a description" do
56
+ @matcher = validate_numeric(:name).allowing_nil
57
+ @matcher.description.should == "validate that :name is a valid float with option(s) :allow_nil => true"
58
+ end
59
+
60
+ it "should set failure messages" do
61
+ @matcher = validate_numeric(:price).allowing_nil
62
+ @matcher.matches? subject
63
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
64
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
65
+ end
66
+
67
+ it "should explicit used options if different than expected" do
68
+ @matcher = validate_numeric(:name).allowing_blank
69
+ @matcher.matches? subject
70
+ explanation = " but called with option(s) :allow_nil => true instead"
71
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
72
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ describe "validate_presence_matcher" do
4
+ before :all do
5
+ define_model :item do
6
+ plugin :validation_helpers
7
+
8
+ def validate
9
+ validates_presence [:id, :name], :allow_nil => true
10
+ end
11
+ end
12
+ end
13
+
14
+ subject{ Item }
15
+
16
+ it "should require an attribute" do
17
+ expect {
18
+ subject.should validate_presence
19
+ }.to raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should accept with an attribute" do
23
+ expect {
24
+ subject.should validate_presence(:name)
25
+ }.not_to raise_error
26
+ end
27
+
28
+ it "should accept with valid options" do
29
+ expect {
30
+ subject.should validate_presence(:name).allowing_nil
31
+ }.not_to raise_error
32
+ end
33
+
34
+ it "should reject with invalid options" do
35
+ expect {
36
+ subject.should validate_presence(:name).allowing_blank
37
+ }.to raise_error
38
+ end
39
+
40
+ describe "messages" do
41
+ describe "without option" do
42
+ it "should contain a description" do
43
+ @matcher = validate_presence :name
44
+ @matcher.description.should == "validate presence of :name"
45
+ end
46
+
47
+ it "should set failure messages" do
48
+ @matcher = validate_presence :name
49
+ @matcher.matches? subject
50
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
51
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
52
+ end
53
+ end
54
+
55
+ describe "with options" do
56
+ it "should contain a description" do
57
+ @matcher = validate_presence(:name).allowing_nil
58
+ @matcher.description.should == "validate presence of :name with option(s) :allow_nil => true"
59
+ end
60
+
61
+ it "should set failure messages" do
62
+ @matcher = validate_presence(:price).allowing_nil
63
+ @matcher.matches? subject
64
+ @matcher.failure_message.should == "expected Item to " + @matcher.description
65
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
66
+ end
67
+
68
+ it "should explicit used options if different than expected" do
69
+ @matcher = validate_presence(:name).allowing_blank
70
+ @matcher.matches? subject
71
+ explanation = " but called with option(s) :allow_nil => true instead"
72
+ @matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
73
+ @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
74
+ end
75
+ end
76
+ end
77
+ end