diff options
author | Juanjo Bazán <jjbazan@gmail.com> | 2012-04-11 15:24:23 +0200 |
---|---|---|
committer | Juanjo Bazán <jjbazan@gmail.com> | 2012-04-11 15:24:23 +0200 |
commit | 1a20683f0919680de4875c8097e7114a529aeb88 (patch) | |
tree | 93a740c9fec7cbc8baf06249ef5e080663f66044 /activerecord/test | |
parent | b79b784f7290fdfab917bb8e44a9477a709318c5 (diff) | |
download | rails-1a20683f0919680de4875c8097e7114a529aeb88.tar.gz rails-1a20683f0919680de4875c8097e7114a529aeb88.tar.bz2 rails-1a20683f0919680de4875c8097e7114a529aeb88.zip |
Override AR::Relation methods in NullRelation.
So a NullRelation (Relation#none) is chainable with database methods.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/relations_test.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 25eb7c1672..5e938968a3 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -219,6 +219,7 @@ class RelationTest < ActiveRecord::TestCase assert_no_queries do assert_equal [], Developer.none assert_equal [], Developer.scoped.none + assert Developer.none.is_a?(ActiveRecord::NullRelation) end end @@ -228,6 +229,38 @@ class RelationTest < ActiveRecord::TestCase end end + def test_none_chained_to_methods_firing_queries_straight_to_db + assert_no_queries do + assert_equal [], Developer.none.pluck(:id) # => uses select_all + assert_equal 0, Developer.none.delete_all + assert_equal 0, Developer.none.update_all(:name => 'David') + assert_equal 0, Developer.none.delete(1) + assert_equal false, Developer.none.exists?(1) + end + end + + def test_null_relation_content_size_methods + assert_no_queries do + assert_equal 0, Developer.none.size + assert_equal 0, Developer.none.count + assert_equal true, Developer.none.empty? + assert_equal false, Developer.none.any? + assert_equal false, Developer.none.many? + end + end + + def test_null_relation_calculations_methods + assert_no_queries do + assert_equal 0, Developer.none.count + assert_equal nil, Developer.none.calculate(:average, 'salary') + end + end + + def test_null_relation_metadata_methods + assert_equal "", Developer.none.to_sql + assert_equal({}, Developer.none.where_values_hash) + end + def test_joins_with_nil_argument assert_nothing_raised { DependentFirm.joins(nil).first } end |