JonathanTron-rspec_sequel_matchers 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +29 -4
- data/VERSION +1 -1
- data/lib/rspec_sequel/association.rb +1 -1
- data/lib/rspec_sequel/base.rb +1 -1
- data/lib/rspec_sequel/matchers/validate_exact_length.rb +2 -2
- data/lib/rspec_sequel/matchers/validate_format.rb +25 -0
- data/lib/rspec_sequel/matchers/validate_includes.rb +25 -0
- data/lib/rspec_sequel/matchers/validate_integer.rb +21 -0
- data/lib/rspec_sequel/matchers/validate_length_range.rb +25 -0
- data/lib/rspec_sequel/matchers/validate_max_length.rb +25 -0
- data/lib/rspec_sequel/matchers/validate_min_length.rb +25 -0
- data/lib/rspec_sequel/matchers/validate_not_string.rb +21 -0
- data/lib/rspec_sequel/matchers/validate_numeric.rb +21 -0
- data/lib/rspec_sequel/matchers/validate_presence.rb +1 -1
- data/lib/rspec_sequel/matchers/validate_unique.rb +33 -0
- data/lib/rspec_sequel/validation.rb +5 -1
- data/rspec_sequel_matchers.gemspec +30 -3
- data/spec/have_column_matcher_spec.rb +15 -14
- data/spec/have_many_to_many_matcher_spec.rb +8 -7
- data/spec/have_many_to_one_matcher_spec.rb +8 -7
- data/spec/have_one_to_many_matcher_spec.rb +8 -7
- data/spec/validate_exact_length_matcher_spec.rb +12 -10
- data/spec/validate_format_matcher_spec.rb +88 -0
- data/spec/validate_includes_matcher_spec.rb +88 -0
- data/spec/validate_integer_matcher_spec.rb +77 -0
- data/spec/validate_length_range_matcher_spec.rb +88 -0
- data/spec/validate_max_length_matcher_spec.rb +88 -0
- data/spec/validate_min_length_matcher_spec.rb +88 -0
- data/spec/validate_not_string_matcher_spec.rb +77 -0
- data/spec/validate_numeric_matcher_spec.rb +77 -0
- data/spec/validate_presence_matcher_spec.rb +11 -9
- data/spec/validate_unique_matcher_spec.rb +79 -0
- metadata +28 -1
@@ -20,26 +20,27 @@ describe "have_many_to_many_matcher" do
|
|
20
20
|
it "should set failure messages" do
|
21
21
|
@matcher = have_many_to_many :items
|
22
22
|
@matcher.matches? subject
|
23
|
-
@matcher.failure_message.should == "expected Comment to
|
24
|
-
@matcher.negative_failure_message.should ==
|
23
|
+
@matcher.failure_message.should == "expected Comment to " + @matcher.description
|
24
|
+
@matcher.negative_failure_message.should == "expected Comment to not " + @matcher.description
|
25
25
|
end
|
26
26
|
end
|
27
27
|
describe "with options" do
|
28
28
|
it "should contain a description" do
|
29
29
|
@matcher = have_many_to_many :items, :class_name => "Item"
|
30
|
-
@matcher.description.should == 'have a many_to_many association :items with :class_name => "Item"'
|
30
|
+
@matcher.description.should == 'have a many_to_many association :items with option(s) :class_name => "Item"'
|
31
31
|
end
|
32
32
|
it "should set failure messages" do
|
33
33
|
@matcher = have_many_to_many :items, :class_name => "Item"
|
34
34
|
@matcher.matches? subject
|
35
|
-
@matcher.failure_message.should ==
|
36
|
-
@matcher.negative_failure_message.should ==
|
35
|
+
@matcher.failure_message.should == "expected Comment to " + @matcher.description
|
36
|
+
@matcher.negative_failure_message.should == "expected Comment to not " + @matcher.description
|
37
37
|
end
|
38
38
|
it "should explicit used options if different than expected" do
|
39
39
|
@matcher = have_many_to_many :items, :class_name => "Price"
|
40
40
|
@matcher.matches? subject
|
41
|
-
|
42
|
-
@matcher.
|
41
|
+
explanation = ' expected :class_name == "Price" but found "Item" instead'
|
42
|
+
@matcher.failure_message.should == "expected Comment to " + @matcher.description + explanation
|
43
|
+
@matcher.negative_failure_message.should == "expected Comment to not " + @matcher.description + explanation
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
@@ -20,26 +20,27 @@ describe "have_many_to_one_matcher" do
|
|
20
20
|
it "should set failure messages" do
|
21
21
|
@matcher = have_many_to_one :item
|
22
22
|
@matcher.matches? subject
|
23
|
-
@matcher.failure_message.should == "expected Comment to
|
24
|
-
@matcher.negative_failure_message.should ==
|
23
|
+
@matcher.failure_message.should == "expected Comment to " + @matcher.description
|
24
|
+
@matcher.negative_failure_message.should == "expected Comment to not " + @matcher.description
|
25
25
|
end
|
26
26
|
end
|
27
27
|
describe "with options" do
|
28
28
|
it "should contain a description" do
|
29
29
|
@matcher = have_many_to_one :item, :class_name => "Item"
|
30
|
-
@matcher.description.should == 'have a many_to_one association :item with :class_name => "Item"'
|
30
|
+
@matcher.description.should == 'have a many_to_one association :item with option(s) :class_name => "Item"'
|
31
31
|
end
|
32
32
|
it "should set failure messages" do
|
33
33
|
@matcher = have_many_to_one :item, :class_name => "Item"
|
34
34
|
@matcher.matches? subject
|
35
|
-
@matcher.failure_message.should ==
|
36
|
-
@matcher.negative_failure_message.should ==
|
35
|
+
@matcher.failure_message.should == "expected Comment to " + @matcher.description
|
36
|
+
@matcher.negative_failure_message.should == "expected Comment to not " + @matcher.description
|
37
37
|
end
|
38
38
|
it "should explicit used options if different than expected" do
|
39
39
|
@matcher = have_many_to_one :item, :class_name => "Price"
|
40
40
|
@matcher.matches? subject
|
41
|
-
|
42
|
-
@matcher.
|
41
|
+
explanation = ' expected :class_name == "Price" but found "Item" instead'
|
42
|
+
@matcher.failure_message.should == "expected Comment to " + @matcher.description + explanation
|
43
|
+
@matcher.negative_failure_message.should == "expected Comment to not " + @matcher.description + explanation
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
@@ -20,26 +20,27 @@ describe "have_one_to_many_matcher" do
|
|
20
20
|
it "should set failure messages" do
|
21
21
|
@matcher = have_one_to_many :comments
|
22
22
|
@matcher.matches? subject
|
23
|
-
@matcher.failure_message.should == "expected Item to
|
24
|
-
@matcher.negative_failure_message.should ==
|
23
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
24
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
25
25
|
end
|
26
26
|
end
|
27
27
|
describe "with options" do
|
28
28
|
it "should contain a description" do
|
29
29
|
@matcher = have_one_to_many :comments, :class_name => "Comment"
|
30
|
-
@matcher.description.should == 'have a one_to_many association :comments with :class_name => "Comment"'
|
30
|
+
@matcher.description.should == 'have a one_to_many association :comments with option(s) :class_name => "Comment"'
|
31
31
|
end
|
32
32
|
it "should set failure messages" do
|
33
33
|
@matcher = have_one_to_many :comments, :class_name => "Comment"
|
34
34
|
@matcher.matches? subject
|
35
|
-
@matcher.failure_message.should ==
|
36
|
-
@matcher.negative_failure_message.should ==
|
35
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
36
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
37
37
|
end
|
38
38
|
it "should explicit used options if different than expected" do
|
39
39
|
@matcher = have_one_to_many :comments, :class_name => "Price"
|
40
40
|
@matcher.matches? subject
|
41
|
-
|
42
|
-
@matcher.
|
41
|
+
explanation = ' expected :class_name == "Price" but found "Comment" instead'
|
42
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
43
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
@@ -40,37 +40,39 @@ describe "validate_exact_length_matcher" do
|
|
40
40
|
describe "without option" do
|
41
41
|
it "should contain a description" do
|
42
42
|
@matcher = validate_exact_length 4, :name
|
43
|
-
@matcher.description.should == "validate
|
43
|
+
@matcher.description.should == "validate length of :name is exactly 4"
|
44
44
|
end
|
45
45
|
it "should set failure messages" do
|
46
46
|
@matcher = validate_exact_length 4, :name
|
47
47
|
@matcher.matches? subject
|
48
|
-
@matcher.failure_message.should == "expected Item to
|
49
|
-
@matcher.negative_failure_message.should ==
|
48
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
49
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
50
50
|
end
|
51
51
|
end
|
52
52
|
describe "with options" do
|
53
53
|
it "should contain a description" do
|
54
54
|
@matcher = validate_exact_length 4, :name, :allow_nil => true
|
55
|
-
@matcher.description.should == "validate
|
55
|
+
@matcher.description.should == "validate length of :name is exactly 4 with option(s) :allow_nil => true"
|
56
56
|
end
|
57
57
|
it "should set failure messages" do
|
58
58
|
@matcher = validate_exact_length 4, :price, :allow_nil => true
|
59
59
|
@matcher.matches? subject
|
60
|
-
@matcher.failure_message.should == "expected Item to
|
61
|
-
@matcher.negative_failure_message.should ==
|
60
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
61
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
62
62
|
end
|
63
63
|
it "should explicit used options if different than expected" do
|
64
64
|
@matcher = validate_exact_length 4, :name, :allow_blank => true
|
65
65
|
@matcher.matches? subject
|
66
|
-
|
67
|
-
@matcher.
|
66
|
+
explanation = " but called with option(s) :allow_nil => true instead"
|
67
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
68
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
68
69
|
end
|
69
70
|
it "should warn if invalid options are used" do
|
70
71
|
@matcher = validate_exact_length 4, :name, :allow_anything => true
|
71
72
|
@matcher.matches? subject
|
72
|
-
|
73
|
-
@matcher.
|
73
|
+
explanation = " but option :allow_anything is not valid"
|
74
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
75
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
74
76
|
end
|
75
77
|
end
|
76
78
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe "validate_format_matcher" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
define_model :item do
|
7
|
+
plugin :validation_helpers
|
8
|
+
def validate
|
9
|
+
validates_format /[abc]+/, :name, :allow_nil => true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject{ Item }
|
15
|
+
|
16
|
+
describe "arguments" do
|
17
|
+
it "should require attribute" do
|
18
|
+
lambda{
|
19
|
+
@matcher = validate_format
|
20
|
+
}.should raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
it "should require additionnal parameters" do
|
23
|
+
lambda{
|
24
|
+
@matcher = validate_format :name
|
25
|
+
}.should raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
it "should refuse invalid additionnal parameters" do
|
28
|
+
lambda{
|
29
|
+
@matcher = validate_format :id, :name
|
30
|
+
}.should raise_error(ArgumentError)
|
31
|
+
end
|
32
|
+
it "should accept valid additionnal parameters" do
|
33
|
+
lambda{
|
34
|
+
@matcher = validate_format /[abc]+/, :name
|
35
|
+
}.should_not raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "messages" do
|
40
|
+
describe "without option" do
|
41
|
+
it "should contain a description" do
|
42
|
+
@matcher = validate_format /[abc]+/, :name
|
43
|
+
@matcher.description.should == "validate format of :name against /[abc]+/"
|
44
|
+
end
|
45
|
+
it "should set failure messages" do
|
46
|
+
@matcher = validate_format /[abc]+/, :name
|
47
|
+
@matcher.matches? subject
|
48
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
49
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
50
|
+
end
|
51
|
+
end
|
52
|
+
describe "with options" do
|
53
|
+
it "should contain a description" do
|
54
|
+
@matcher = validate_format /[abc]+/, :name, :allow_nil => true
|
55
|
+
@matcher.description.should == "validate format of :name against /[abc]+/ with option(s) :allow_nil => true"
|
56
|
+
end
|
57
|
+
it "should set failure messages" do
|
58
|
+
@matcher = validate_format /[abc]+/, :price, :allow_nil => true
|
59
|
+
@matcher.matches? subject
|
60
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
61
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
62
|
+
end
|
63
|
+
it "should explicit used options if different than expected" do
|
64
|
+
@matcher = validate_format /[abc]+/, :name, :allow_blank => true
|
65
|
+
@matcher.matches? subject
|
66
|
+
explanation = " but called with option(s) :allow_nil => true instead"
|
67
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
68
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
69
|
+
end
|
70
|
+
it "should warn if invalid options are used" do
|
71
|
+
@matcher = validate_format /[abc]+/, :name, :allow_anything => true
|
72
|
+
@matcher.matches? subject
|
73
|
+
explanation = " but option :allow_anything is not valid"
|
74
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
75
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "matchers" do
|
81
|
+
it{ should validate_format(/[abc]+/, :name) }
|
82
|
+
it{ should validate_format(/[abc]+/, :name, :allow_nil => true) }
|
83
|
+
it{ should_not validate_format(/[abc]+/, :price) }
|
84
|
+
it{ should_not validate_format(/[abc]/, :name) }
|
85
|
+
it{ should_not validate_format(/[abc]+/, :name, :allow_blank => true) }
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe "validate_includes_matcher" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
define_model :item do
|
7
|
+
plugin :validation_helpers
|
8
|
+
def validate
|
9
|
+
validates_includes ["Joseph", "Jonathan"], :name, :allow_nil => true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject{ Item }
|
15
|
+
|
16
|
+
describe "arguments" do
|
17
|
+
it "should require attribute" do
|
18
|
+
lambda{
|
19
|
+
@matcher = validate_includes
|
20
|
+
}.should raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
it "should require additionnal parameters" do
|
23
|
+
lambda{
|
24
|
+
@matcher = validate_includes :name
|
25
|
+
}.should raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
it "should refuse invalid additionnal parameters" do
|
28
|
+
lambda{
|
29
|
+
@matcher = validate_includes :id, :name
|
30
|
+
}.should raise_error(ArgumentError)
|
31
|
+
end
|
32
|
+
it "should accept valid additionnal parameters" do
|
33
|
+
lambda{
|
34
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :name
|
35
|
+
}.should_not raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "messages" do
|
40
|
+
describe "without option" do
|
41
|
+
it "should contain a description" do
|
42
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :name
|
43
|
+
@matcher.description.should == 'validate that :name is included in ["Joseph", "Jonathan"]'
|
44
|
+
end
|
45
|
+
it "should set failure messages" do
|
46
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :name
|
47
|
+
@matcher.matches? subject
|
48
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
49
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
50
|
+
end
|
51
|
+
end
|
52
|
+
describe "with options" do
|
53
|
+
it "should contain a description" do
|
54
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :name, :allow_nil => true
|
55
|
+
@matcher.description.should == 'validate that :name is included in ["Joseph", "Jonathan"] with option(s) :allow_nil => true'
|
56
|
+
end
|
57
|
+
it "should set failure messages" do
|
58
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :price, :allow_nil => true
|
59
|
+
@matcher.matches? subject
|
60
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
61
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
62
|
+
end
|
63
|
+
it "should explicit used options if different than expected" do
|
64
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :name, :allow_blank => true
|
65
|
+
@matcher.matches? subject
|
66
|
+
explanation = " but called with option(s) :allow_nil => true instead"
|
67
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
68
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
69
|
+
end
|
70
|
+
it "should warn if invalid options are used" do
|
71
|
+
@matcher = validate_includes ["Joseph", "Jonathan"], :name, :allow_anything => true
|
72
|
+
@matcher.matches? subject
|
73
|
+
explanation = " but option :allow_anything is not valid"
|
74
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
75
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "matchers" do
|
81
|
+
it{ should validate_includes(["Joseph", "Jonathan"], :name) }
|
82
|
+
it{ should validate_includes(["Joseph", "Jonathan"], :name, :allow_nil => true) }
|
83
|
+
it{ should_not validate_includes(["Joseph", "Jonathan"], :price) }
|
84
|
+
it{ should_not validate_includes(["Joseph", "Jonathan", "Alice"], :name) }
|
85
|
+
it{ should_not validate_includes(["Joseph", "Jonathan"], :name, :allow_blank => true) }
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe "validate_integer_matcher" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
define_model :item do
|
7
|
+
plugin :validation_helpers
|
8
|
+
def validate
|
9
|
+
validates_integer [:id, :name], :allow_nil => true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject{ Item }
|
15
|
+
|
16
|
+
describe "arguments" do
|
17
|
+
it "should require attribute" do
|
18
|
+
lambda{
|
19
|
+
@matcher = validate_integer
|
20
|
+
}.should raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
it "should refuse additionnal parameters" do
|
23
|
+
lambda{
|
24
|
+
@matcher = validate_integer :name, :id
|
25
|
+
}.should raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "messages" do
|
30
|
+
describe "without option" do
|
31
|
+
it "should contain a description" do
|
32
|
+
@matcher = validate_integer :name
|
33
|
+
@matcher.description.should == "validate that :name is a valid integer"
|
34
|
+
end
|
35
|
+
it "should set failure messages" do
|
36
|
+
@matcher = validate_integer :name
|
37
|
+
@matcher.matches? subject
|
38
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
39
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
40
|
+
end
|
41
|
+
end
|
42
|
+
describe "with options" do
|
43
|
+
it "should contain a description" do
|
44
|
+
@matcher = validate_integer :name, :allow_nil => true
|
45
|
+
@matcher.description.should == "validate that :name is a valid integer with option(s) :allow_nil => true"
|
46
|
+
end
|
47
|
+
it "should set failure messages" do
|
48
|
+
@matcher = validate_integer :price, :allow_nil => true
|
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
|
+
it "should explicit used options if different than expected" do
|
54
|
+
@matcher = validate_integer :name, :allow_blank => true
|
55
|
+
@matcher.matches? subject
|
56
|
+
explanation = " but called with option(s) :allow_nil => true instead"
|
57
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
58
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
59
|
+
end
|
60
|
+
it "should warn if invalid options are used" do
|
61
|
+
@matcher = validate_integer :name, :allow_anything => true
|
62
|
+
@matcher.matches? subject
|
63
|
+
explanation = " but option :allow_anything is not valid"
|
64
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
65
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "matchers" do
|
71
|
+
it{ should validate_integer(:name) }
|
72
|
+
it{ should validate_integer(:name, :allow_nil => true) }
|
73
|
+
it{ should_not validate_integer(:price) }
|
74
|
+
it{ should_not validate_integer(:name, :allow_blank => true) }
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
describe "validate_length_range_matcher" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
define_model :item do
|
7
|
+
plugin :validation_helpers
|
8
|
+
def validate
|
9
|
+
validates_length_range 1..10, :name, :allow_nil => true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject{ Item }
|
15
|
+
|
16
|
+
describe "arguments" do
|
17
|
+
it "should require attribute" do
|
18
|
+
lambda{
|
19
|
+
@matcher = validate_length_range
|
20
|
+
}.should raise_error(ArgumentError)
|
21
|
+
end
|
22
|
+
it "should require additionnal parameters" do
|
23
|
+
lambda{
|
24
|
+
@matcher = validate_length_range :name
|
25
|
+
}.should raise_error(ArgumentError)
|
26
|
+
end
|
27
|
+
it "should refuse invalid additionnal parameters" do
|
28
|
+
lambda{
|
29
|
+
@matcher = validate_length_range :id, :name
|
30
|
+
}.should raise_error(ArgumentError)
|
31
|
+
end
|
32
|
+
it "should accept valid additionnal parameters" do
|
33
|
+
lambda{
|
34
|
+
@matcher = validate_length_range 1..10, :name
|
35
|
+
}.should_not raise_error(ArgumentError)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "messages" do
|
40
|
+
describe "without option" do
|
41
|
+
it "should contain a description" do
|
42
|
+
@matcher = validate_length_range 1..10, :name
|
43
|
+
@matcher.description.should == "validate length of :name is included in 1..10"
|
44
|
+
end
|
45
|
+
it "should set failure messages" do
|
46
|
+
@matcher = validate_length_range 1..10, :name
|
47
|
+
@matcher.matches? subject
|
48
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
49
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
50
|
+
end
|
51
|
+
end
|
52
|
+
describe "with options" do
|
53
|
+
it "should contain a description" do
|
54
|
+
@matcher = validate_length_range 1..10, :name, :allow_nil => true
|
55
|
+
@matcher.description.should == "validate length of :name is included in 1..10 with option(s) :allow_nil => true"
|
56
|
+
end
|
57
|
+
it "should set failure messages" do
|
58
|
+
@matcher = validate_length_range 1..10, :price, :allow_nil => true
|
59
|
+
@matcher.matches? subject
|
60
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description
|
61
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
|
62
|
+
end
|
63
|
+
it "should explicit used options if different than expected" do
|
64
|
+
@matcher = validate_length_range 1..10, :name, :allow_blank => true
|
65
|
+
@matcher.matches? subject
|
66
|
+
explanation = " but called with option(s) :allow_nil => true instead"
|
67
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
68
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
69
|
+
end
|
70
|
+
it "should warn if invalid options are used" do
|
71
|
+
@matcher = validate_length_range 1..10, :name, :allow_anything => true
|
72
|
+
@matcher.matches? subject
|
73
|
+
explanation = " but option :allow_anything is not valid"
|
74
|
+
@matcher.failure_message.should == "expected Item to " + @matcher.description + explanation
|
75
|
+
@matcher.negative_failure_message.should == "expected Item to not " + @matcher.description + explanation
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "matchers" do
|
81
|
+
it{ should validate_length_range(1..10, :name) }
|
82
|
+
it{ should validate_length_range(1..10, :name, :allow_nil => true) }
|
83
|
+
it{ should_not validate_length_range(1..10, :price) }
|
84
|
+
it{ should_not validate_length_range(0..10, :name) }
|
85
|
+
it{ should_not validate_length_range(1..10, :name, :allow_blank => true) }
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|