aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/associations/has_many_associations_test.rb
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2016-08-17 00:08:34 -0300
committerGitHub <noreply@github.com>2016-08-17 00:08:34 -0300
commitc183761f7929bab285416618bf95ad67939ebe4f (patch)
treed29ca768083ab74a4bf7b23e01f0739b114b4630 /activerecord/test/cases/associations/has_many_associations_test.rb
parent0549f9debfe27b804d8b35a7c67e3bf015ae1b89 (diff)
parent9d0088840cfa57018d2f1b60d8e6a6842b60fc61 (diff)
downloadrails-c183761f7929bab285416618bf95ad67939ebe4f.tar.gz
rails-c183761f7929bab285416618bf95ad67939ebe4f.tar.bz2
rails-c183761f7929bab285416618bf95ad67939ebe4f.zip
Merge pull request #26021 from kamipo/finder_bang_method_should_call_non_bang_method
Finder bang method should call non bang method
Diffstat (limited to 'activerecord/test/cases/associations/has_many_associations_test.rb')
-rw-r--r--activerecord/test/cases/associations/has_many_associations_test.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb
index d53c2b0c51..5a108333b0 100644
--- a/activerecord/test/cases/associations/has_many_associations_test.rb
+++ b/activerecord/test/cases/associations/has_many_associations_test.rb
@@ -424,6 +424,46 @@ class HasManyAssociationsTest < ActiveRecord::TestCase
end
end
+ def test_finder_method_with_dirty_target
+ company = companies(:first_firm)
+ new_clients = []
+ assert_no_queries(ignore_none: false) do
+ new_clients << company.clients_of_firm.build(name: "Another Client")
+ new_clients << company.clients_of_firm.build(name: "Another Client II")
+ new_clients << company.clients_of_firm.build(name: "Another Client III")
+ end
+
+ assert_not company.clients_of_firm.loaded?
+ assert_queries(1) do
+ assert_same new_clients[0], company.clients_of_firm.third
+ assert_same new_clients[1], company.clients_of_firm.fourth
+ assert_same new_clients[2], company.clients_of_firm.fifth
+ assert_same new_clients[0], company.clients_of_firm.third_to_last
+ assert_same new_clients[1], company.clients_of_firm.second_to_last
+ assert_same new_clients[2], company.clients_of_firm.last
+ end
+ end
+
+ def test_finder_bang_method_with_dirty_target
+ company = companies(:first_firm)
+ new_clients = []
+ assert_no_queries(ignore_none: false) do
+ new_clients << company.clients_of_firm.build(name: "Another Client")
+ new_clients << company.clients_of_firm.build(name: "Another Client II")
+ new_clients << company.clients_of_firm.build(name: "Another Client III")
+ end
+
+ assert_not company.clients_of_firm.loaded?
+ assert_queries(1) do
+ assert_same new_clients[0], company.clients_of_firm.third!
+ assert_same new_clients[1], company.clients_of_firm.fourth!
+ assert_same new_clients[2], company.clients_of_firm.fifth!
+ assert_same new_clients[0], company.clients_of_firm.third_to_last!
+ assert_same new_clients[1], company.clients_of_firm.second_to_last!
+ assert_same new_clients[2], company.clients_of_firm.last!
+ end
+ end
+
def test_create_resets_cached_counters
person = Person.create!(first_name: "tenderlove")
post = Post.first