rspec_sequel_matchers 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe "have_one_to_one_matcher" do
4
+
5
+ before do
6
+ define_model :item do
7
+ one_to_one :profile
8
+ end
9
+ define_model :profile
10
+ end
11
+
12
+ subject { Item }
13
+
14
+ describe "messages" do
15
+ describe "without option" do
16
+ it "should contain a description" do
17
+ @matcher = have_one_to_one :profile
18
+ expect( @matcher.description ).to eq "have a one_to_one association :profile"
19
+ end
20
+ it "should set failure messages" do
21
+ @matcher = have_one_to_one :profile
22
+ @matcher.matches? subject
23
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
24
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description
25
+ end
26
+ end
27
+ describe "with options" do
28
+ it "should contain a description" do
29
+ @matcher = have_one_to_one :profile, :class_name => "Profile"
30
+ expect( @matcher.description ).to eq 'have a one_to_one association :profile with option(s) :class_name => "Profile"'
31
+ end
32
+ it "should set failure messages" do
33
+ @matcher = have_one_to_one :profile, :class_name => "Profile"
34
+ @matcher.matches? subject
35
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
36
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description
37
+ end
38
+ it "should explicit used options if different than expected" do
39
+ @matcher = have_one_to_one :profile, :class_name => "Price"
40
+ @matcher.matches? subject
41
+ explanation = ' expected :class_name == "Price" but found "Profile" instead'
42
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
43
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
44
+ end
45
+ end
46
+ end
47
+
48
+ end
@@ -12,4 +12,4 @@ class CreateItems < Sequel::Migration
12
12
  drop_table :items
13
13
  end
14
14
 
15
- end
15
+ end
@@ -0,0 +1,18 @@
1
+ class CreateProfile < Sequel::Migration
2
+ def up
3
+ create_table :profile do
4
+ primary_key :id
5
+ foreign_key :item_id, :items, :type => Fixnum
6
+ DateTime :created_at
7
+ index :item_id
8
+ end
9
+
10
+ alter_table :items do
11
+ add_foreign_key :profile_id, :profile, :type => Fixnum
12
+ end
13
+ end
14
+
15
+ def down
16
+ drop_table :profile
17
+ end
18
+ end
data/spec/spec_helper.rb CHANGED
@@ -5,11 +5,19 @@ require "sequel/extensions/inflector"
5
5
  require "sequel/extensions/migration"
6
6
  require "rspec_sequel_matchers"
7
7
 
8
+ def jruby?
9
+ (defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby') || defined?(JRUBY_VERSION)
10
+ end
11
+
8
12
  # connect to an in-memory database
9
13
  begin
10
- Sequel.sqlite
14
+ if jruby?
15
+ Sequel.connect "jdbc:sqlite::memory:"
16
+ else
17
+ Sequel.sqlite
18
+ end
11
19
  rescue Sequel::AdapterNotFound
12
- puts "sqlite not available. Install it with: sudo gem install sqlite3-ruby"
20
+ puts "sqlite not available."
13
21
  exit 1 # failure
14
22
  end
15
23
 
@@ -33,7 +41,6 @@ end
33
41
 
34
42
  RSpec.configure do |c|
35
43
  c.mock_framework = :rspec
36
- c.color_enabled = true
37
44
  c.include(RspecHelpers)
38
45
  c.include(RspecSequel::Matchers)
39
46
  # undefine models defined via define_model (if any)
@@ -15,24 +15,24 @@ describe "validate_exact_length_matcher" do
15
15
 
16
16
  describe "arguments" do
17
17
  it "should require attribute" do
18
- lambda{
18
+ expect do
19
19
  @matcher = validate_exact_length
20
- }.should raise_error
20
+ end.to raise_error
21
21
  end
22
22
  it "should require additionnal parameters" do
23
- lambda{
23
+ expect do
24
24
  @matcher = validate_exact_length :name
25
- }.should raise_error
25
+ end.to raise_error
26
26
  end
27
27
  it "should refuse invalid additionnal parameters" do
28
- lambda{
28
+ expect do
29
29
  @matcher = validate_exact_length :id, :name
30
- }.should raise_error
30
+ end.to raise_error
31
31
  end
32
32
  it "should accept valid additionnal parameters" do
33
- lambda{
33
+ expect do
34
34
  @matcher = validate_exact_length 4, :name
35
- }.should_not raise_error
35
+ end.not_to raise_error
36
36
  end
37
37
  end
38
38
 
@@ -40,49 +40,49 @@ 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 length of :name is exactly 4"
43
+ expect( @matcher.description ).to eq "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 " + @matcher.description
49
- @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
48
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
49
+ expect( @matcher.failure_message_when_negated ).to eq "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 length of :name is exactly 4 with option(s) :allow_nil => true"
55
+ expect( @matcher.description ).to eq "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 " + @matcher.description
61
- @matcher.negative_failure_message.should == "expected Item to not " + @matcher.description
60
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
61
+ expect( @matcher.failure_message_when_negated ).to eq "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
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
67
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
68
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
69
69
  end
70
70
  it "should warn if invalid options are used" do
71
71
  @matcher = validate_exact_length 4, :name, :allow_anything => true
72
72
  @matcher.matches? subject
73
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
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
75
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
76
76
  end
77
77
  end
78
78
  end
79
79
 
80
80
  describe "matchers" do
81
- it{ should validate_exact_length(4, :name) }
82
- it{ should validate_exact_length(4, :name, :allow_nil => true) }
83
- it{ should_not validate_exact_length(4, :price) }
84
- it{ should_not validate_exact_length(3, :name) }
85
- it{ should_not validate_exact_length(4, :name, :allow_blank => true) }
81
+ it{ is_expected.to validate_exact_length(4, :name) }
82
+ it{ is_expected.to validate_exact_length(4, :name, :allow_nil => true) }
83
+ it{ is_expected.not_to validate_exact_length(4, :price) }
84
+ it{ is_expected.not_to validate_exact_length(3, :name) }
85
+ it{ is_expected.not_to validate_exact_length(4, :name, :allow_blank => true) }
86
86
  end
87
87
 
88
88
  end
@@ -15,24 +15,24 @@ describe "validate_format_matcher" do
15
15
 
16
16
  describe "arguments" do
17
17
  it "should require attribute" do
18
- lambda{
18
+ expect do
19
19
  @matcher = validate_format
20
- }.should raise_error
20
+ end.to raise_error
21
21
  end
22
22
  it "should require additionnal parameters" do
23
- lambda{
23
+ expect do
24
24
  @matcher = validate_format :name
25
- }.should raise_error
25
+ end.to raise_error
26
26
  end
27
27
  it "should refuse invalid additionnal parameters" do
28
- lambda{
28
+ expect do
29
29
  @matcher = validate_format :id, :name
30
- }.should raise_error
30
+ end.to raise_error
31
31
  end
32
32
  it "should accept valid additionnal parameters" do
33
- lambda{
33
+ expect do
34
34
  @matcher = validate_format /[abc]+/, :name
35
- }.should_not raise_error
35
+ end.not_to raise_error
36
36
  end
37
37
  end
38
38
 
@@ -40,49 +40,49 @@ describe "validate_format_matcher" do
40
40
  describe "without option" do
41
41
  it "should contain a description" do
42
42
  @matcher = validate_format /[abc]+/, :name
43
- @matcher.description.should == "validate format of :name against /[abc]+/"
43
+ expect( @matcher.description ).to eq "validate format of :name against /[abc]+/"
44
44
  end
45
45
  it "should set failure messages" do
46
46
  @matcher = validate_format /[abc]+/, :name
47
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
48
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
49
+ expect( @matcher.failure_message_when_negated ).to eq "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_format /[abc]+/, :name, :allow_nil => true
55
- @matcher.description.should == "validate format of :name against /[abc]+/ with option(s) :allow_nil => true"
55
+ expect( @matcher.description ).to eq "validate format of :name against /[abc]+/ with option(s) :allow_nil => true"
56
56
  end
57
57
  it "should set failure messages" do
58
58
  @matcher = validate_format /[abc]+/, :price, :allow_nil => true
59
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
60
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
61
+ expect( @matcher.failure_message_when_negated ).to eq "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_format /[abc]+/, :name, :allow_blank => true
65
65
  @matcher.matches? subject
66
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
67
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
68
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
69
69
  end
70
70
  it "should warn if invalid options are used" do
71
71
  @matcher = validate_format /[abc]+/, :name, :allow_anything => true
72
72
  @matcher.matches? subject
73
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
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
75
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
76
76
  end
77
77
  end
78
78
  end
79
79
 
80
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) }
81
+ it{ is_expected.to validate_format(/[abc]+/, :name) }
82
+ it{ is_expected.to validate_format(/[abc]+/, :name, :allow_nil => true) }
83
+ it{ is_expected.not_to validate_format(/[abc]+/, :price) }
84
+ it{ is_expected.not_to validate_format(/[abc]/, :name) }
85
+ it{ is_expected.not_to validate_format(/[abc]+/, :name, :allow_blank => true) }
86
86
  end
87
87
 
88
88
  end
@@ -15,24 +15,24 @@ describe "validate_includes_matcher" do
15
15
 
16
16
  describe "arguments" do
17
17
  it "should require attribute" do
18
- lambda{
18
+ expect do
19
19
  @matcher = validate_includes
20
- }.should raise_error
20
+ end.to raise_error
21
21
  end
22
22
  it "should require additionnal parameters" do
23
- lambda{
23
+ expect do
24
24
  @matcher = validate_includes :name
25
- }.should raise_error
25
+ end.to raise_error
26
26
  end
27
27
  it "should refuse invalid additionnal parameters" do
28
- lambda{
28
+ expect do
29
29
  @matcher = validate_includes :id, :name
30
- }.should raise_error
30
+ end.to raise_error
31
31
  end
32
32
  it "should accept valid additionnal parameters" do
33
- lambda{
33
+ expect do
34
34
  @matcher = validate_includes ["Joseph", "Jonathan"], :name
35
- }.should_not raise_error
35
+ end.not_to raise_error
36
36
  end
37
37
  end
38
38
 
@@ -40,49 +40,49 @@ describe "validate_includes_matcher" do
40
40
  describe "without option" do
41
41
  it "should contain a description" do
42
42
  @matcher = validate_includes ["Joseph", "Jonathan"], :name
43
- @matcher.description.should == 'validate that :name is included in ["Joseph", "Jonathan"]'
43
+ expect( @matcher.description ).to eq 'validate that :name is included in ["Joseph", "Jonathan"]'
44
44
  end
45
45
  it "should set failure messages" do
46
46
  @matcher = validate_includes ["Joseph", "Jonathan"], :name
47
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
48
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
49
+ expect( @matcher.failure_message_when_negated ).to eq "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_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'
55
+ expect( @matcher.description ).to eq 'validate that :name is included in ["Joseph", "Jonathan"] with option(s) :allow_nil => true'
56
56
  end
57
57
  it "should set failure messages" do
58
58
  @matcher = validate_includes ["Joseph", "Jonathan"], :price, :allow_nil => true
59
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
60
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
61
+ expect( @matcher.failure_message_when_negated ).to eq "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_includes ["Joseph", "Jonathan"], :name, :allow_blank => true
65
65
  @matcher.matches? subject
66
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
67
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
68
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
69
69
  end
70
70
  it "should warn if invalid options are used" do
71
71
  @matcher = validate_includes ["Joseph", "Jonathan"], :name, :allow_anything => true
72
72
  @matcher.matches? subject
73
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
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
75
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
76
76
  end
77
77
  end
78
78
  end
79
79
 
80
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) }
81
+ it{ is_expected.to validate_includes(["Joseph", "Jonathan"], :name) }
82
+ it{ is_expected.to validate_includes(["Joseph", "Jonathan"], :name, :allow_nil => true) }
83
+ it{ is_expected.not_to validate_includes(["Joseph", "Jonathan"], :price) }
84
+ it{ is_expected.not_to validate_includes(["Joseph", "Jonathan", "Alice"], :name) }
85
+ it{ is_expected.not_to validate_includes(["Joseph", "Jonathan"], :name, :allow_blank => true) }
86
86
  end
87
87
 
88
88
  end
@@ -15,14 +15,14 @@ describe "validate_integer_matcher" do
15
15
 
16
16
  describe "arguments" do
17
17
  it "should require attribute" do
18
- lambda{
18
+ expect do
19
19
  @matcher = validate_integer
20
- }.should raise_error
20
+ end.to raise_error
21
21
  end
22
22
  it "should refuse additionnal parameters" do
23
- lambda{
23
+ expect do
24
24
  @matcher = validate_integer :name, :id
25
- }.should raise_error
25
+ end.to raise_error
26
26
  end
27
27
  end
28
28
 
@@ -30,48 +30,48 @@ describe "validate_integer_matcher" do
30
30
  describe "without option" do
31
31
  it "should contain a description" do
32
32
  @matcher = validate_integer :name
33
- @matcher.description.should == "validate that :name is a valid integer"
33
+ expect( @matcher.description ).to eq "validate that :name is a valid integer"
34
34
  end
35
35
  it "should set failure messages" do
36
36
  @matcher = validate_integer :name
37
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
38
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
39
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description
40
40
  end
41
41
  end
42
42
  describe "with options" do
43
43
  it "should contain a description" do
44
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"
45
+ expect( @matcher.description ).to eq "validate that :name is a valid integer with option(s) :allow_nil => true"
46
46
  end
47
47
  it "should set failure messages" do
48
48
  @matcher = validate_integer :price, :allow_nil => true
49
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
50
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description
51
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description
52
52
  end
53
53
  it "should explicit used options if different than expected" do
54
54
  @matcher = validate_integer :name, :allow_blank => true
55
55
  @matcher.matches? subject
56
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
57
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
58
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
59
59
  end
60
60
  it "should warn if invalid options are used" do
61
61
  @matcher = validate_integer :name, :allow_anything => true
62
62
  @matcher.matches? subject
63
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
64
+ expect( @matcher.failure_message ).to eq "expected Item to " + @matcher.description + explanation
65
+ expect( @matcher.failure_message_when_negated ).to eq "expected Item to not " + @matcher.description + explanation
66
66
  end
67
67
  end
68
68
  end
69
69
 
70
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) }
71
+ it{ is_expected.to validate_integer(:name) }
72
+ it{ is_expected.to validate_integer(:name, :allow_nil => true) }
73
+ it{ is_expected.not_to validate_integer(:price) }
74
+ it{ is_expected.not_to validate_integer(:name, :allow_blank => true) }
75
75
  end
76
76
 
77
77
  end