aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/validations
diff options
context:
space:
mode:
authorJon Moss <me@jonathanmoss.me>2016-02-11 22:58:18 -0500
committerJon Moss <me@jonathanmoss.me>2016-02-18 00:32:38 -0500
commit55385c8a39117f5c1b78fcb703f9d7ac14d97d12 (patch)
treed83c922114fb00f31a533fc98045e368c88b99d7 /activerecord/test/cases/validations
parent310e4418f4db899dcd07ff24f530ef8862c65f8b (diff)
downloadrails-55385c8a39117f5c1b78fcb703f9d7ac14d97d12.tar.gz
rails-55385c8a39117f5c1b78fcb703f9d7ac14d97d12.tar.bz2
rails-55385c8a39117f5c1b78fcb703f9d7ac14d97d12.zip
Fix issue #23625
This resolves a bug where if the primary key used is not `id` (ex: `uuid`), and has a `validates_uniqueness_of` in the model, a uniqueness error would be raised. This is a partial revert of commit `119b9181ece399c67213543fb5227b82688b536f`, which introduced this behavior.
Diffstat (limited to 'activerecord/test/cases/validations')
-rw-r--r--activerecord/test/cases/validations/uniqueness_validation_test.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/activerecord/test/cases/validations/uniqueness_validation_test.rb b/activerecord/test/cases/validations/uniqueness_validation_test.rb
index e601c53dbf..2217e52f4b 100644
--- a/activerecord/test/cases/validations/uniqueness_validation_test.rb
+++ b/activerecord/test/cases/validations/uniqueness_validation_test.rb
@@ -5,6 +5,7 @@ require 'models/warehouse_thing'
require 'models/guid'
require 'models/event'
require 'models/dashboard'
+require 'models/uuid_item'
class Wizard < ActiveRecord::Base
self.abstract_class = true
@@ -48,6 +49,10 @@ class BigIntReverseTest < ActiveRecord::Base
validates :engines_count, uniqueness: true
end
+class CoolTopic < Topic
+ validates_uniqueness_of :id
+end
+
class UniquenessValidationTest < ActiveRecord::TestCase
INT_MAX_VALUE = 2147483647
@@ -480,4 +485,25 @@ class UniquenessValidationTest < ActiveRecord::TestCase
assert t.valid?, "Should be valid"
assert t.save, "Should still save t as unique"
end
+
+ def test_validate_uniqueness_uuid
+ skip unless current_adapter?(:PostgreSQLAdapter)
+ item = UuidItem.create!(uuid: SecureRandom.uuid, title: 'item1')
+ item.update(title: 'item1-title2')
+ assert_empty item.errors
+
+ item2 = UuidValidatingItem.create!(uuid: SecureRandom.uuid, title: 'item2')
+ item2.update(title: 'item2-title2')
+ assert_empty item2.errors
+ end
+
+ def test_validate_uniqueness_regular_id
+ item = CoolTopic.create!(title: 'MyItem')
+ assert_empty item.errors
+
+ item2 = CoolTopic.new(id: item.id, title: 'MyItem2')
+ refute item2.valid?
+
+ assert_equal(["has already been taken"], item2.errors[:id])
+ end
end