aboutsummaryrefslogtreecommitdiffstats
path: root/spec/arel/unit/predicates
diff options
context:
space:
mode:
authorNick Kallen <nkallen@nick-kallens-computer-2.local>2008-04-18 12:59:29 -0700
committerNick Kallen <nkallen@nick-kallens-computer-2.local>2008-04-18 12:59:29 -0700
commitd51139751eae2be6ee32b44edec39fcf09ed2333 (patch)
treec87d1bbb97cc5ba9f496f7c76fcf2fe7eaeee9f4 /spec/arel/unit/predicates
parentd27ab7bb8ba0d8f136af2ed955d9e489ba45daec (diff)
downloadrails-d51139751eae2be6ee32b44edec39fcf09ed2333.tar.gz
rails-d51139751eae2be6ee32b44edec39fcf09ed2333.tar.bz2
rails-d51139751eae2be6ee32b44edec39fcf09ed2333.zip
officially renamed active_relation to arel
Diffstat (limited to 'spec/arel/unit/predicates')
-rw-r--r--spec/arel/unit/predicates/binary_spec.rb71
-rw-r--r--spec/arel/unit/predicates/equality_spec.rb49
-rw-r--r--spec/arel/unit/predicates/in_spec.rb58
3 files changed, 178 insertions, 0 deletions
diff --git a/spec/arel/unit/predicates/binary_spec.rb b/spec/arel/unit/predicates/binary_spec.rb
new file mode 100644
index 0000000000..f39b37d913
--- /dev/null
+++ b/spec/arel/unit/predicates/binary_spec.rb
@@ -0,0 +1,71 @@
+require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
+
+module Arel
+ describe Binary do
+ before do
+ @relation = Table.new(:users)
+ @attribute1 = @relation[:id]
+ @attribute2 = @relation[:name]
+ class ConcreteBinary < Binary
+ def predicate_sql
+ "<=>"
+ end
+ end
+ end
+
+ describe '#to_sql' do
+ describe 'when relating two attributes' do
+ it 'manufactures sql with a binary operation' do
+ ConcreteBinary.new(@attribute1, @attribute2).to_sql.should be_like("
+ `users`.`id` <=> `users`.`name`
+ ")
+ end
+ end
+
+ describe 'when relating an attribute and a value' do
+ before do
+ @value = "1-asdf"
+ end
+
+ describe 'when relating to an integer attribute' do
+ it 'formats values as integers' do
+ ConcreteBinary.new(@attribute1, @value).to_sql.should be_like("
+ `users`.`id` <=> 1
+ ")
+ end
+ end
+
+ describe 'when relating to a string attribute' do
+ it 'formats values as strings' do
+ ConcreteBinary.new(@attribute2, @value).to_sql.should be_like("
+ `users`.`name` <=> '1-asdf'
+ ")
+ end
+ end
+ end
+ end
+
+ describe '==' do
+ it "obtains if attribute1 and attribute2 are identical" do
+ Binary.new(@attribute1, @attribute2).should == Binary.new(@attribute1, @attribute2)
+ Binary.new(@attribute1, @attribute2).should_not == Binary.new(@attribute1, @attribute1)
+ end
+
+ it "obtains if the concrete type of the predicates are identical" do
+ Binary.new(@attribute1, @attribute2).should == Binary.new(@attribute1, @attribute2)
+ Binary.new(@attribute1, @attribute2).should_not == ConcreteBinary.new(@attribute1, @attribute2)
+ end
+ end
+
+ describe '#bind' do
+ before do
+ @another_relation = Table.new(:photos)
+ end
+
+ it "descends" do
+ ConcreteBinary.new(@attribute1, @attribute2).bind(@another_relation). \
+ should == ConcreteBinary.new(@attribute1.bind(@another_relation), @attribute2.bind(@another_relation))
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/spec/arel/unit/predicates/equality_spec.rb b/spec/arel/unit/predicates/equality_spec.rb
new file mode 100644
index 0000000000..8a58ba3096
--- /dev/null
+++ b/spec/arel/unit/predicates/equality_spec.rb
@@ -0,0 +1,49 @@
+require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
+
+module Arel
+ describe Equality do
+ before do
+ @relation1 = Table.new(:users)
+ @relation2 = Table.new(:photos)
+ @attribute1 = @relation1[:id]
+ @attribute2 = @relation2[:user_id]
+ end
+
+ describe '==' do
+ it "obtains if attribute1 and attribute2 are identical" do
+ Equality.new(@attribute1, @attribute2).should == Equality.new(@attribute1, @attribute2)
+ Equality.new(@attribute1, @attribute2).should_not == Equality.new(@attribute1, @attribute1)
+ end
+
+ it "obtains if the concrete type of the predicates are identical" do
+ Equality.new(@attribute1, @attribute2).should_not == Binary.new(@attribute1, @attribute2)
+ end
+
+ it "is commutative on the attributes" do
+ Equality.new(@attribute1, @attribute2).should == Equality.new(@attribute2, @attribute1)
+ end
+ end
+
+ describe '#to_sql' do
+ describe 'when relating to a non-nil value' do
+ it "manufactures an equality predicate" do
+ Equality.new(@attribute1, @attribute2).to_sql.should be_like("
+ `users`.`id` = `photos`.`user_id`
+ ")
+ end
+ end
+
+ describe 'when relation to a nil value' do
+ before do
+ @nil = nil
+ end
+
+ it "manufactures an is null predicate" do
+ Equality.new(@attribute1, @nil).to_sql.should be_like("
+ `users`.`id` IS NULL
+ ")
+ end
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/spec/arel/unit/predicates/in_spec.rb b/spec/arel/unit/predicates/in_spec.rb
new file mode 100644
index 0000000000..797798a77f
--- /dev/null
+++ b/spec/arel/unit/predicates/in_spec.rb
@@ -0,0 +1,58 @@
+require File.join(File.dirname(__FILE__), '..', '..', '..', 'spec_helper')
+
+module Arel
+ describe In do
+ before do
+ @relation = Table.new(:users)
+ @attribute = @relation[:id]
+ end
+
+ describe '#to_sql' do
+ describe 'when relating to an array' do
+ describe 'when the array\'s elements are the same type as the attribute' do
+ before do
+ @array = [1, 2, 3]
+ end
+
+ it 'manufactures sql with a comma separated list' do
+ In.new(@attribute, @array).to_sql.should be_like("
+ `users`.`id` IN (1, 2, 3)
+ ")
+ end
+ end
+
+ describe 'when the array\'s elements are not same type as the attribute' do
+ before do
+ @array = ['1-asdf', 2, 3]
+ end
+
+ it 'formats values in the array as the type of the attribute' do
+ In.new(@attribute, @array).to_sql.should be_like("
+ `users`.`id` IN (1, 2, 3)
+ ")
+ end
+ end
+ end
+
+ describe 'when relating to a range' do
+ before do
+ @range = 1..2
+ end
+
+ it 'manufactures sql with a between' do
+ In.new(@attribute, @range).to_sql.should be_like("
+ `users`.`id` BETWEEN 1 AND 2
+ ")
+ end
+ end
+
+ describe 'when relating to a relation' do
+ it 'manufactures sql with a subselect' do
+ In.new(@attribute, @relation).to_sql.should be_like("
+ `users`.`id` IN (SELECT `users`.`id`, `users`.`name` FROM `users`)
+ ")
+ end
+ end
+ end
+ end
+end \ No newline at end of file