diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/relations/join_spec.rb | 6 | ||||
-rw-r--r-- | spec/relations/relation_spec.rb | 2 | ||||
-rw-r--r-- | spec/shared/relation_spec.rb | 37 |
3 files changed, 35 insertions, 10 deletions
diff --git a/spec/relations/join_spec.rb b/spec/relations/join_spec.rb index 47e468a9f9..3894d175e8 100644 --- a/spec/relations/join_spec.rb +++ b/spec/relations/join_spec.rb @@ -13,6 +13,7 @@ describe "Arel" do r.attribute :id, Arel::Attributes::Integer r.attribute :owner_id, Arel::Attributes::Integer + r.attribute :name, Arel::Attributes::String r.attribute :age, Arel::Attributes::Integer end end @@ -28,9 +29,10 @@ describe "Arel" do 8.times do |i| thing_id = owner_id * 8 + i age = 2 * thing_id + name = "Name#{thing_id}" - @thing.insert([thing_id, owner_id, age]) - @expected << Arel::Row.new(@relation, [thing_id, owner_id, age, owner_id]) + @thing.insert([thing_id, owner_id, name, age]) + @expected << Arel::Row.new(@relation, [thing_id, owner_id, name, age, owner_id]) end end end diff --git a/spec/relations/relation_spec.rb b/spec/relations/relation_spec.rb index 808ddf1444..0381f8759d 100644 --- a/spec/relations/relation_spec.rb +++ b/spec/relations/relation_spec.rb @@ -14,7 +14,7 @@ describe "Arel" do describe "Relation" do before :all do - @expected = (1..20).map { |i| @relation.insert([i, nil, 2 * i]) } + @expected = (1..20).map { |i| @relation.insert([i, "Name#{i}", 2 * i]) } end it_should_behave_like 'A Relation' diff --git a/spec/shared/relation_spec.rb b/spec/shared/relation_spec.rb index 1407dddb2a..dabbde2dd5 100644 --- a/spec/shared/relation_spec.rb +++ b/spec/shared/relation_spec.rb @@ -35,7 +35,7 @@ share_examples_for 'A Relation' do @relation.where(@relation[:age].eq(@pivot[@relation[:age]])).should have_rows(expected) end - it "finds rows with a not predicate" do + it "finds rows with a noteq predicate" do expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] } @relation.where(@relation[:age].noteq(@pivot[@relation[:age]])).should have_rows(expected) end @@ -60,17 +60,40 @@ share_examples_for 'A Relation' do @relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected) end - it "finds rows with a matches predicate" + it "finds rows with a matches predicate" do + expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ } + @relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected) + end - it "finds rows with a not matches predicate" + it "finds rows with a not matches predicate" do + expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ } + @relation.where(@relation[:name].notmatches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected) + end it "finds rows with an in predicate" do - pending - set = @expected[1..(@expected.length/2+1)] - @relation.all(:id.in => set.map { |r| r.id }).should have_resources(set) + expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20} + @relation.where(@relation[:age].in(3..20)).should have_rows(expected) end - it "finds rows with a not in predicate" + it "finds rows with a not in predicate" do + expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)} + @relation.where(@relation[:age].notin(3..20)).should have_rows(expected) + end + + it "finds rows with a not predicate" do + expected = @expected.select {|r| !(r[@relation[:age]] >= 3 && r[@relation[:age]] <= 20)} + @relation.where(@relation[:age].in(3..20).not).should have_rows(expected) + end + + it "finds rows with a grouped predicate of class Any" do + expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])} + @relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected) + end + + it "finds rows with a grouped predicate of class All" do + expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/} + @relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected) + end end describe "#order" do |