JonathanTron-rspec_sequel_matchers 0.0.2 → 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.
- 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
|