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.
Files changed (33) hide show
  1. data/README.rdoc +29 -4
  2. data/VERSION +1 -1
  3. data/lib/rspec_sequel/association.rb +1 -1
  4. data/lib/rspec_sequel/base.rb +1 -1
  5. data/lib/rspec_sequel/matchers/validate_exact_length.rb +2 -2
  6. data/lib/rspec_sequel/matchers/validate_format.rb +25 -0
  7. data/lib/rspec_sequel/matchers/validate_includes.rb +25 -0
  8. data/lib/rspec_sequel/matchers/validate_integer.rb +21 -0
  9. data/lib/rspec_sequel/matchers/validate_length_range.rb +25 -0
  10. data/lib/rspec_sequel/matchers/validate_max_length.rb +25 -0
  11. data/lib/rspec_sequel/matchers/validate_min_length.rb +25 -0
  12. data/lib/rspec_sequel/matchers/validate_not_string.rb +21 -0
  13. data/lib/rspec_sequel/matchers/validate_numeric.rb +21 -0
  14. data/lib/rspec_sequel/matchers/validate_presence.rb +1 -1
  15. data/lib/rspec_sequel/matchers/validate_unique.rb +33 -0
  16. data/lib/rspec_sequel/validation.rb +5 -1
  17. data/rspec_sequel_matchers.gemspec +30 -3
  18. data/spec/have_column_matcher_spec.rb +15 -14
  19. data/spec/have_many_to_many_matcher_spec.rb +8 -7
  20. data/spec/have_many_to_one_matcher_spec.rb +8 -7
  21. data/spec/have_one_to_many_matcher_spec.rb +8 -7
  22. data/spec/validate_exact_length_matcher_spec.rb +12 -10
  23. data/spec/validate_format_matcher_spec.rb +88 -0
  24. data/spec/validate_includes_matcher_spec.rb +88 -0
  25. data/spec/validate_integer_matcher_spec.rb +77 -0
  26. data/spec/validate_length_range_matcher_spec.rb +88 -0
  27. data/spec/validate_max_length_matcher_spec.rb +88 -0
  28. data/spec/validate_min_length_matcher_spec.rb +88 -0
  29. data/spec/validate_not_string_matcher_spec.rb +77 -0
  30. data/spec/validate_numeric_matcher_spec.rb +77 -0
  31. data/spec/validate_presence_matcher_spec.rb +11 -9
  32. data/spec/validate_unique_matcher_spec.rb +79 -0
  33. 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 have a many_to_many association :items"
24
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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 == 'expected Comment to have a many_to_many association :items with :class_name => "Item"'
36
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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
- @matcher.failure_message.should == 'expected Comment to have a many_to_many association :items with :class_name => "Price" expected :class_name == "Price" but found "Item" instead'
42
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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 have a many_to_one association :item"
24
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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 == 'expected Comment to have a many_to_one association :item with :class_name => "Item"'
36
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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
- @matcher.failure_message.should == 'expected Comment to have a many_to_one association :item with :class_name => "Price" expected :class_name == "Price" but found "Item" instead'
42
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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 have a one_to_many association :comments"
24
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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 == 'expected Item to have a one_to_many association :comments with :class_name => "Comment"'
36
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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
- @matcher.failure_message.should == 'expected Item to have a one_to_many association :comments with :class_name => "Price" expected :class_name == "Price" but found "Comment" instead'
42
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to have", "to not have")
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 exact length of :name to 4"
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 validate exact length of :name to 4"
49
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to validate", "to not validate")
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 exact length of :name to 4 with :allow_nil => true"
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 validate exact length of :price to 4 with :allow_nil => true"
61
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to validate", "to not validate")
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
- @matcher.failure_message.should == "expected Item to validate exact length of :name to 4 with :allow_blank => true but called with option(s) :allow_nil => true instead"
67
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to validate", "to not validate")
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
- @matcher.failure_message.should == "expected Item to validate exact length of :name to 4 with :allow_anything => true but option :allow_anything is not valid"
73
- @matcher.negative_failure_message.should == @matcher.failure_message.gsub("to validate", "to not validate")
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