diff options
author | Alberto Almagro <albertoalmagro@gmail.com> | 2018-10-12 17:14:06 +0200 |
---|---|---|
committer | Alberto Almagro <albertoalmagro@gmail.com> | 2018-10-16 13:16:09 +0200 |
commit | 5e92770e5a6d997e5f973cc59aebc58c4ebff80b (patch) | |
tree | 5a3613b8250f3f2100546e4c06da5841efaa9d5e | |
parent | b0b0cd1fd77af3eec8b2b8760bace2572e04a3a3 (diff) | |
download | rails-5e92770e5a6d997e5f973cc59aebc58c4ebff80b.tar.gz rails-5e92770e5a6d997e5f973cc59aebc58c4ebff80b.tar.bz2 rails-5e92770e5a6d997e5f973cc59aebc58c4ebff80b.zip |
Add regression test against habtm memoized singular_ids
Starting in Rails 5.0.0 and still present in Rails 5.2.1, `singular_ids`
got memoized and didn't reload after more items were added to the
relation.
Although 19c8071 happens to fix the issue, it only adds tests for
`has_many` relations while this bug only affected
`has_and_belongs_to_many` relations.
This commit adds a regression test to ensure it never happens again with
`habtm` relations.
Ensures #34179 never gets reproduced.
-rw-r--r-- | activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb b/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb index ed7dde115a..515eb65d37 100644 --- a/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_and_belongs_to_many_associations_test.rb @@ -25,6 +25,8 @@ require "models/user" require "models/member" require "models/membership" require "models/sponsor" +require "models/lesson" +require "models/student" require "models/country" require "models/treaty" require "models/vertex" @@ -780,6 +782,16 @@ class HasAndBelongsToManyAssociationsTest < ActiveRecord::TestCase assert_equal [projects(:active_record), projects(:action_controller)].map(&:id).sort, developer.project_ids.sort end + def test_singular_ids_are_reloaded_after_collection_concat + student = Student.create(name: "Alberto Almagro") + student.lesson_ids + + lesson = Lesson.create(name: "DSI") + student.lessons << lesson + + assert_includes student.lesson_ids, lesson.id + end + def test_scoped_find_on_through_association_doesnt_return_read_only_records tag = Post.find(1).tags.find_by_name("General") |