0

name と email の 2 つのフィールドがあり、その組み合わせは大文字と小文字を区別せずに一意である必要があります。クラスと仕様のコードは次のとおりです。最初の 3 つのテストはパスしますが、4 番目のテストはパスしません。

class Person < ActiveRecord::Base
  validates :name, presence: true
  validates :email, presence: true

  validates_uniqueness_of :email, :scope => :name, :case_sensitive => false
  validates_uniqueness_of :name, :scope => :email, :case_sensitive => false
end

describe Person do
  context "with duplicate name and email" do
    before do
      @person1 = create(:person)
    end
    it "for case-sensitive match of both" do
      expect(build(:person, {name: @person1.name, email: @person1.email})).to_not be_valid
    end
    it "for case-insensitive match of name" do
      expect(build(:person, {name: @person1.name.swapcase, email: @person1.email})).to_not be_valid
    end
    it "for case-insensitive match of email" do
      expect(build(:person, {name: @person1.name, email: @person1.email.swapcase})).to_not be_valid
    end
    it "for case-insensitive match of both" do
      expect(build(:person, {name: @person1.name.swapcase, email: @person1.email.swapcase})).to_not be_valid
    end
  end
end
4

1 に答える 1