aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorGodfrey Chan <godfreykfc@gmail.com>2014-04-07 18:52:21 -0700
committerGodfrey Chan <godfreykfc@gmail.com>2014-04-07 18:52:21 -0700
commita5664fe27b1797983537c0764003e618bd3d2801 (patch)
treedd10cf4cf3f4b627b03dfe07e2c0eda197eb466c /activerecord/test/cases
parent3f5eb59f7a48aa5c08efb8db6cb41cd395c990af (diff)
downloadrails-a5664fe27b1797983537c0764003e618bd3d2801.tar.gz
rails-a5664fe27b1797983537c0764003e618bd3d2801.tar.bz2
rails-a5664fe27b1797983537c0764003e618bd3d2801.zip
Follow up to bbe7fe41 to fix enum leakage across classes.
The original attempt didn't really fix the problem and wasn't testing the problematic area. This commit corrected those issues in the original commit. Also removed the private `enum_mapping_for` method. As `defined_enums` is now a method, this method doesn't provide much value anymore.
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/enum_test.rb35
1 files changed, 28 insertions, 7 deletions
diff --git a/activerecord/test/cases/enum_test.rb b/activerecord/test/cases/enum_test.rb
index 5157c272ca..3b2f0dfe07 100644
--- a/activerecord/test/cases/enum_test.rb
+++ b/activerecord/test/cases/enum_test.rb
@@ -252,17 +252,38 @@ class EnumTest < ActiveRecord::TestCase
end
test "enums are distinct per class" do
- Plane = Class.new(ActiveRecord::Base) do
- enum status: [:grounded, :operational]
+ klass1 = Class.new(ActiveRecord::Base) do
+ self.table_name = "books"
+ enum status: [:proposed, :written]
+ end
+
+ klass2 = Class.new(ActiveRecord::Base) do
+ self.table_name = "books"
+ enum status: [:drafted, :uploaded]
end
- assert_equal({ "proposed" => 0, "written" => 1, "published" => 2 }, Book.statuses)
- assert_equal({ "grounded" => 0, "operational" => 1 }, Plane.statuses)
+
+ book1 = klass1.proposed.create!
+ book1.status = :written
+ assert_equal ['proposed', 'written'], book1.status_change
+
+ book2 = klass2.drafted.create!
+ book2.status = :uploaded
+ assert_equal ['drafted', 'uploaded'], book2.status_change
end
test "enums are inheritable" do
- Encyclopedia = Class.new(Book) do
- enum status: [:published, :reprinted]
+ subklass1 = Class.new(Book)
+
+ subklass2 = Class.new(Book) do
+ enum status: [:drafted, :uploaded]
end
- assert_equal({ "published" => 0, "reprinted" => 1 }, Encyclopedia.statuses)
+
+ book1 = subklass1.proposed.create!
+ book1.status = :written
+ assert_equal ['proposed', 'written'], book1.status_change
+
+ book2 = subklass2.drafted.create!
+ book2.status = :uploaded
+ assert_equal ['drafted', 'uploaded'], book2.status_change
end
end