diff options
author | Nick Kallen <nkallen@nick-kallens-computer-2.local> | 2008-03-02 17:05:06 -0800 |
---|---|---|
committer | Nick Kallen <nkallen@nick-kallens-computer-2.local> | 2008-03-02 17:05:06 -0800 |
commit | 86550ef2bee377a5e4134dc63dedb138bb9ab7dc (patch) | |
tree | 50726fc4904437eeb83ab7ad999ced774e253f71 /spec/active_relation/unit/relations | |
parent | 92db013ba3ee4d0a9d92281e614d05f064c22e15 (diff) | |
download | rails-86550ef2bee377a5e4134dc63dedb138bb9ab7dc.tar.gz rails-86550ef2bee377a5e4134dc63dedb138bb9ab7dc.tar.bz2 rails-86550ef2bee377a5e4134dc63dedb138bb9ab7dc.zip |
new concept of session boundaries
Diffstat (limited to 'spec/active_relation/unit/relations')
12 files changed, 69 insertions, 43 deletions
diff --git a/spec/active_relation/unit/relations/compound_spec.rb b/spec/active_relation/unit/relations/compound_spec.rb index 03de27fb05..d271529998 100644 --- a/spec/active_relation/unit/relations/compound_spec.rb +++ b/spec/active_relation/unit/relations/compound_spec.rb @@ -7,6 +7,10 @@ module ActiveRelation def initialize(relation) @relation = relation end + + def ==(other) + true + end end @relation = Table.new(:users) @compound_relation = ConcreteCompound.new(@relation) @@ -17,5 +21,13 @@ module ActiveRelation @compound_relation.attributes.should == @relation.attributes.collect { |a| a.bind(@compound_relation) } end end + + describe 'hashing' do + it 'implements hash equality' do + hash = {} + hash[@compound_relation] = 1 + hash[ConcreteCompound.new(@relation)].should == 1 + end + end end end
\ No newline at end of file diff --git a/spec/active_relation/unit/relations/deletion_spec.rb b/spec/active_relation/unit/relations/deletion_spec.rb index 1a536e7aed..1f14ae5d34 100644 --- a/spec/active_relation/unit/relations/deletion_spec.rb +++ b/spec/active_relation/unit/relations/deletion_spec.rb @@ -8,18 +8,18 @@ module ActiveRelation describe '#to_sql' do it 'manufactures sql deleting a table relation' do - Deletion.new(@relation).to_sql.should be_like(""" + Deletion.new(@relation).to_sql.should be_like(" DELETE FROM `users` - """) + ") end it 'manufactures sql deleting a selection relation' do - Deletion.new(@relation.select(@relation[:id].equals(1))).to_sql.should be_like(""" + Deletion.new(@relation.select(@relation[:id].equals(1))).to_sql.should be_like(" DELETE FROM `users` WHERE `users`.`id` = 1 - """) + ") end end end diff --git a/spec/active_relation/unit/relations/insertion_spec.rb b/spec/active_relation/unit/relations/insertion_spec.rb index a39c4aeaf3..b2b239097a 100644 --- a/spec/active_relation/unit/relations/insertion_spec.rb +++ b/spec/active_relation/unit/relations/insertion_spec.rb @@ -8,11 +8,11 @@ module ActiveRelation describe '#to_sql' do it 'manufactures sql inserting the data for one item' do - Insertion.new(@relation, @relation[:name] => "nick").to_sql.should be_like(""" + Insertion.new(@relation, @relation[:name] => "nick").to_sql.should be_like(" INSERT INTO `users` (`users`.`name`) VALUES ('nick') - """) + ") end end end diff --git a/spec/active_relation/unit/relations/join_spec.rb b/spec/active_relation/unit/relations/join_spec.rb index bc55a72e55..532dc08753 100644 --- a/spec/active_relation/unit/relations/join_spec.rb +++ b/spec/active_relation/unit/relations/join_spec.rb @@ -49,22 +49,22 @@ module ActiveRelation describe '#to_sql' do it 'manufactures sql joining the two tables on the predicate' do - Join.new("INNER JOIN", @relation1, @relation2, @predicate).to_sql.should be_like(""" + Join.new("INNER JOIN", @relation1, @relation2, @predicate).to_sql.should be_like(" SELECT `users`.`id`, `users`.`name`, `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id` FROM `users` INNER JOIN `photos` ON `users`.`id` = `photos`.`user_id` - """) + ") end it 'manufactures sql joining the two tables, merging any selects' do Join.new("INNER JOIN", @relation1.select(@relation1[:id].equals(1)), - @relation2.select(@relation2[:id].equals(2)), @predicate).to_sql.should be_like(""" + @relation2.select(@relation2[:id].equals(2)), @predicate).to_sql.should be_like(" SELECT `users`.`id`, `users`.`name`, `photos`.`id`, `photos`.`user_id`, `photos`.`camera_id` FROM `users` INNER JOIN `photos` ON `users`.`id` = `photos`.`user_id` WHERE `users`.`id` = 1 AND `photos`.`id` = 2 - """) + ") end end end @@ -89,33 +89,33 @@ module ActiveRelation describe '#to_sql' do describe 'with the aggregation on the right' do it 'manufactures sql joining the left table to a derived table' do - Join.new("INNER JOIN", @relation1, @aggregation, @predicate).to_sql.should be_like(""" + Join.new("INNER JOIN", @relation1, @aggregation, @predicate).to_sql.should be_like(" SELECT `users`.`id`, `users`.`name`, `photo_count`.`user_id`, `photo_count`.`cnt` FROM `users` INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) AS `photo_count` ON `users`.`id` = `photo_count`.`user_id` - """) + ") end end describe 'with the aggregation on the left' do it 'manufactures sql joining the right table to a derived table' do - Join.new("INNER JOIN", @aggregation, @relation1, @predicate).to_sql.should be_like(""" + Join.new("INNER JOIN", @aggregation, @relation1, @predicate).to_sql.should be_like(" SELECT `photo_count`.`user_id`, `photo_count`.`cnt`, `users`.`id`, `users`.`name` FROM (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` GROUP BY `photos`.`user_id`) AS `photo_count` INNER JOIN `users` ON `users`.`id` = `photo_count`.`user_id` - """) + ") end end it "keeps selects on the aggregation within the derived table" do - Join.new("INNER JOIN", @relation1, @aggregation.select(@aggregation[:user_id].equals(1)), @predicate).to_sql.should be_like(""" + Join.new("INNER JOIN", @relation1, @aggregation.select(@aggregation[:user_id].equals(1)), @predicate).to_sql.should be_like(" SELECT `users`.`id`, `users`.`name`, `photo_count`.`user_id`, `photo_count`.`cnt` FROM `users` INNER JOIN (SELECT `photos`.`user_id`, COUNT(`photos`.`id`) AS `cnt` FROM `photos` WHERE `photos`.`user_id` = 1 GROUP BY `photos`.`user_id`) AS `photo_count` ON `users`.`id` = `photo_count`.`user_id` - """) + ") end end end diff --git a/spec/active_relation/unit/relations/order_spec.rb b/spec/active_relation/unit/relations/order_spec.rb index 15f08d70ee..032bd2b40f 100644 --- a/spec/active_relation/unit/relations/order_spec.rb +++ b/spec/active_relation/unit/relations/order_spec.rb @@ -23,11 +23,11 @@ module ActiveRelation describe '#to_sql' do it "manufactures sql with an order clause" do - Order.new(@relation, @attribute).to_sql.should be_like(""" + Order.new(@relation, @attribute).to_sql.should be_like(" SELECT `users`.`id`, `users`.`name` FROM `users` ORDER BY `users`.`id` - """) + ") end end end diff --git a/spec/active_relation/unit/relations/projection_spec.rb b/spec/active_relation/unit/relations/projection_spec.rb index 75a4672642..01a4d74bc6 100644 --- a/spec/active_relation/unit/relations/projection_spec.rb +++ b/spec/active_relation/unit/relations/projection_spec.rb @@ -46,16 +46,16 @@ module ActiveRelation describe '#to_sql' do it "manufactures sql with a limited select clause" do - Projection.new(@relation, @attribute).to_sql.should be_like(""" + Projection.new(@relation, @attribute).to_sql.should be_like(" SELECT `users`.`id` FROM `users` - """) + ") end it "manufactures sql with scalar selects" do - Projection.new(@relation, Projection.new(@relation, @relation[:name])).to_sql.should be_like(""" + Projection.new(@relation, Projection.new(@relation, @relation[:name])).to_sql.should be_like(" SELECT (SELECT `users`.`name` FROM `users`) FROM `users` - """) + ") end end end diff --git a/spec/active_relation/unit/relations/range_spec.rb b/spec/active_relation/unit/relations/range_spec.rb index 501a8d3641..7be2ca1b03 100644 --- a/spec/active_relation/unit/relations/range_spec.rb +++ b/spec/active_relation/unit/relations/range_spec.rb @@ -23,12 +23,12 @@ module ActiveRelation it "manufactures sql with limit and offset" do range_size = @range.last - @range.first + 1 range_start = @range.first - Range.new(@relation, @range).to_s.should be_like(""" + Range.new(@relation, @range).to_s.should be_like(" SELECT `users`.`id`, `users`.`name` FROM `users` LIMIT #{range_size} OFFSET #{range_start} - """) + ") end end end diff --git a/spec/active_relation/unit/relations/relation_spec.rb b/spec/active_relation/unit/relations/relation_spec.rb index d3252c658b..3af3b8aa9c 100644 --- a/spec/active_relation/unit/relations/relation_spec.rb +++ b/spec/active_relation/unit/relations/relation_spec.rb @@ -109,22 +109,28 @@ module ActiveRelation describe Relation::Operations::Writes do describe '#delete' do it 'manufactures a deletion relation' do - mock(Session.instance).delete(Deletion.new(@relation)) - @relation.delete.should == @relation + Session.start do + mock(Session.new).delete(Deletion.new(@relation)) + @relation.delete.should == @relation + end end end describe '#insert' do it 'manufactures an insertion relation' do - mock(Session.instance).create(Insertion.new(@relation, record = {@relation[:name] => 'carl'})) - @relation.insert(record).should == @relation + Session.start do + mock(Session.new).create(Insertion.new(@relation, record = {@relation[:name] => 'carl'})) + @relation.insert(record).should == @relation + end end end describe '#update' do it 'manufactures an update relation' do - mock(Session.instance).update(Update.new(@relation, assignments = {@relation[:name] => 'bob'})) - @relation.update(assignments).should == @relation + Session.start do + mock(Session.new).update(Update.new(@relation, assignments = {@relation[:name] => 'bob'})) + @relation.update(assignments).should == @relation + end end end end diff --git a/spec/active_relation/unit/relations/rename_spec.rb b/spec/active_relation/unit/relations/rename_spec.rb index 33a89e6a49..c960f76736 100644 --- a/spec/active_relation/unit/relations/rename_spec.rb +++ b/spec/active_relation/unit/relations/rename_spec.rb @@ -54,10 +54,10 @@ module ActiveRelation describe '#to_sql' do it 'manufactures sql renaming the attribute' do - Rename.new(@relation, @relation[:id] => :schmid).to_sql.should be_like(""" + Rename.new(@relation, @relation[:id] => :schmid).to_sql.should be_like(" SELECT `users`.`id` AS 'schmid', `users`.`name` FROM `users` - """) + ") end end end diff --git a/spec/active_relation/unit/relations/selection_spec.rb b/spec/active_relation/unit/relations/selection_spec.rb index afe002186e..3a18d4ae6e 100644 --- a/spec/active_relation/unit/relations/selection_spec.rb +++ b/spec/active_relation/unit/relations/selection_spec.rb @@ -31,19 +31,19 @@ module ActiveRelation describe '#to_sql' do it "manufactures sql with where clause conditions" do - Selection.new(@relation, @predicate).to_sql.should be_like(""" + Selection.new(@relation, @predicate).to_sql.should be_like(" SELECT `users`.`id`, `users`.`name` FROM `users` WHERE `users`.`id` = 1 - """) + ") end it "allows arbitrary sql" do - Selection.new(@relation, "asdf").to_sql.should be_like(""" + Selection.new(@relation, "asdf").to_sql.should be_like(" SELECT `users`.`id`, `users`.`name` FROM `users` WHERE asdf - """) + ") end end end diff --git a/spec/active_relation/unit/relations/table_spec.rb b/spec/active_relation/unit/relations/table_spec.rb index f8d4431aa7..5c7fa35e63 100644 --- a/spec/active_relation/unit/relations/table_spec.rb +++ b/spec/active_relation/unit/relations/table_spec.rb @@ -38,16 +38,16 @@ module ActiveRelation describe '#to_sql' do it "manufactures a simple select query" do - @relation.to_sql.should be_like(""" + @relation.to_sql.should be_like(" SELECT `users`.`id`, `users`.`name` FROM `users` - """) + ") end end describe '#column_for' do it "" do - pending + @relation[:id].column.should == @relation.columns.detect { |c| c.name == 'id' } end end @@ -72,5 +72,13 @@ module ActiveRelation @relation.qualify.should == Rename.new(@relation, @relation[:name] => 'users.name', @relation[:id] => 'users.id') end end + + describe 'hashing' do + it "implements hash equality" do + hash = {} + hash[Table.new(:users)] = 1 + hash[Table.new(:users)].should == 1 + end + end end end
\ No newline at end of file diff --git a/spec/active_relation/unit/relations/update_spec.rb b/spec/active_relation/unit/relations/update_spec.rb index 642d652057..2cd3eb9d11 100644 --- a/spec/active_relation/unit/relations/update_spec.rb +++ b/spec/active_relation/unit/relations/update_spec.rb @@ -8,18 +8,18 @@ module ActiveRelation describe '#to_sql' do it 'manufactures sql updating attributes' do - Update.new(@relation, @relation[:name] => "nick").to_sql.should be_like(""" + Update.new(@relation, @relation[:name] => "nick").to_sql.should be_like(" UPDATE `users` SET `users`.`name` = 'nick' - """) + ") end it 'manufactures sql updating a selection relation' do - Update.new(@relation.select(@relation[:id].equals(1)), @relation[:name] => "nick").to_sql.should be_like(""" + Update.new(@relation.select(@relation[:id].equals(1)), @relation[:name] => "nick").to_sql.should be_like(" UPDATE `users` SET `users`.`name` = 'nick' WHERE `users`.`id` = 1 - """) + ") end end end |