aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/validations
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2015-08-20 12:07:02 +0200
committerYves Senn <yves.senn@gmail.com>2015-08-20 12:07:02 +0200
commit50e4afff209ee6dcb50938b59bff32255a3f543e (patch)
treef1635d410e49db8db35ce86fbd5af9e83b3a23a1 /activerecord/test/cases/validations
parent013dd756e1ca730d95f13f334e02470ce528354b (diff)
downloadrails-50e4afff209ee6dcb50938b59bff32255a3f543e.tar.gz
rails-50e4afff209ee6dcb50938b59bff32255a3f543e.tar.bz2
rails-50e4afff209ee6dcb50938b59bff32255a3f543e.zip
uniqueness validation raises error for persisted record without pk.
Closes #21304. While we can validate uniqueness for record without primary key on creation, there is no way to exclude the current record when updating. (The update itself will need a primary key to work correctly).
Diffstat (limited to 'activerecord/test/cases/validations')
-rw-r--r--activerecord/test/cases/validations/uniqueness_validation_test.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/activerecord/test/cases/validations/uniqueness_validation_test.rb b/activerecord/test/cases/validations/uniqueness_validation_test.rb
index ceca2c8366..7502a55391 100644
--- a/activerecord/test/cases/validations/uniqueness_validation_test.rb
+++ b/activerecord/test/cases/validations/uniqueness_validation_test.rb
@@ -4,6 +4,7 @@ require 'models/reply'
require 'models/warehouse_thing'
require 'models/guid'
require 'models/event'
+require 'models/dashboard'
class Wizard < ActiveRecord::Base
self.abstract_class = true
@@ -446,4 +447,26 @@ class UniquenessValidationTest < ActiveRecord::TestCase
key2.key_number = 10
assert_not key2.valid?
end
+
+ def test_validate_uniqueness_without_primary_key
+ klass = Class.new(ActiveRecord::Base) do
+ self.table_name = "dashboards"
+
+ validates_uniqueness_of :dashboard_id
+
+ def self.name; "Dashboard" end
+ end
+
+ abc = klass.create!(dashboard_id: "abc")
+ assert klass.new(dashboard_id: "xyz").valid?
+ assert_not klass.new(dashboard_id: "abc").valid?
+
+ abc.dashboard_id = "def"
+
+ e = assert_raises ActiveRecord::UnknownPrimaryKey do
+ abc.save!
+ end
+ assert_match(/\AUnknown primary key for table dashboards in model/, e.message)
+ assert_match(/Can not validate uniqueness for persisted record without primary key.\z/, e.message)
+ end
end