61 lines
1.3 KiB
Ruby
61 lines
1.3 KiB
Ruby
require 'rails_helper'
|
|
require 'duplicate_remover'
|
|
|
|
describe DuplicateRemover do
|
|
before(:all) do
|
|
Temping.create :person do
|
|
validates :name, uniqueness: true
|
|
|
|
with_columns do |t|
|
|
t.string :name
|
|
end
|
|
end
|
|
end
|
|
|
|
after(:all) do
|
|
Temping.teardown
|
|
end
|
|
|
|
context 'when record attribute is unique' do
|
|
it 'does not update the record' do
|
|
person = create_person("Jane")
|
|
|
|
DuplicateRemover.new(person, :name).perform!
|
|
|
|
expect(person.name).to eq("Jane")
|
|
end
|
|
end
|
|
|
|
context 'when record attribute is a duplicate' do
|
|
it 'updates the record with a unique name' do
|
|
create_person("Jane")
|
|
person = create_person("Jane")
|
|
|
|
DuplicateRemover.new(person, :name).perform!
|
|
|
|
expect(person.name).to eq("Jane (2)")
|
|
end
|
|
end
|
|
|
|
context 'when record attribute is a duplicate multiple times' do
|
|
it 'updates the record with a unique name' do
|
|
create_person("Jane")
|
|
create_person("Jane (2)")
|
|
create_person("Jane (3)")
|
|
person = create_person("Jane")
|
|
|
|
DuplicateRemover.new(person, :name).perform!
|
|
|
|
expect(person.name).to eq("Jane (4)")
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def create_person(name)
|
|
Person.new(name: name) do |person|
|
|
person.save(validate: false)
|
|
end
|
|
end
|
|
end
|