1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
# frozen_string_literal: true
require "cases/encryption/helper"
require "models/book_encrypted"
require "models/author_encrypted"
class ActiveRecord::Encryption::UniquenessValidationsTest < ActiveRecord::EncryptionTestCase
test "uniqueness validations work" do
EncryptedBookWithDowncaseName.create!(name: "dune")
assert_raises ActiveRecord::RecordInvalid do
EncryptedBookWithDowncaseName.create!(name: "dune")
end
end
test "uniqueness validations work when mixing encrypted an unencrypted data" do
ActiveRecord::Encryption.config.support_unencrypted_data = true
UnencryptedBook.create! name: "dune"
assert_raises ActiveRecord::RecordInvalid do
EncryptedBookWithDowncaseName.create!(name: "DUNE")
end
end
test "uniqueness validations do not work when mixing encrypted an unencrypted data and unencrypted data is opted out per-attribute" do
ActiveRecord::Encryption.config.support_unencrypted_data = true
UnencryptedBook.create! name: "dune"
assert_nothing_raised do
EncryptedBookWithUnencryptedDataOptedOut.create!(name: "dune")
end
end
test "uniqueness validations work when mixing encrypted an unencrypted data and unencrypted data is opted in per-attribute" do
ActiveRecord::Encryption.config.support_unencrypted_data = true
UnencryptedBook.create! name: "dune"
assert_raises ActiveRecord::RecordInvalid do
EncryptedBookWithUnencryptedDataOptedIn.create!(name: "dune")
end
end
test "uniqueness validations work when using old encryption schemes" do
ActiveRecord::Encryption.config.previous = [ { downcase: true, deterministic: true } ]
OldEncryptionBook = Class.new(UnencryptedBook) do
self.table_name = "encrypted_books"
validates :name, uniqueness: true
encrypts :name, deterministic: true, downcase: false
end
OldEncryptionBook.create! name: "dune"
assert_raises ActiveRecord::RecordInvalid do
OldEncryptionBook.create! name: "DUNE"
end
end
test "uniqueness validation does not revalidate the attribute with current encryption type" do
EncryptedBookWithUniquenessValidation.create!(name: "dune")
record = EncryptedBookWithUniquenessValidation.create(name: "dune")
assert_equal 1, record.errors.count
end
end
|