Add uniqueness validation to document_number and document_type pair

This commit is contained in:
Senén Rodero Rodríguez
2019-05-30 11:16:33 +02:00
committed by Javi Martín
parent d1587ecc62
commit 3c39dccad4
4 changed files with 19 additions and 0 deletions

View File

@@ -5,6 +5,7 @@ class LocalCensusRecord < ApplicationRecord
validates :document_type, presence: true
validates :date_of_birth, presence: true
validates :postal_code, presence: true
validates :document_number, uniqueness: { scope: :document_type }
scope :search, -> (terms) { where("document_number ILIKE ?", "%#{terms}%") }

View File

@@ -0,0 +1,9 @@
class AddUniqueIndexToLocalCensusRecords < ActiveRecord::Migration[5.0]
def up
add_index :local_census_records, [:document_number, :document_type], unique: true
end
def down
remove_index :local_census_records, [:document_number, :document_type]
end
end

View File

@@ -978,6 +978,7 @@ ActiveRecord::Schema.define(version: 20190607160900) do
t.string "postal_code", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["document_number", "document_type"], name: "index_local_census_records_on_document_number_and_document_type", unique: true, using: :btree
t.index ["document_number"], name: "index_local_census_records_on_document_number", using: :btree
end

View File

@@ -32,6 +32,14 @@ describe LocalCensusRecord do
expect(local_census_record).not_to be_valid
end
it "is not valid when a record already exists with same document_number and document_type" do
create(:local_census_record, document_number: "#DOC_NUMBER", document_type: "#DOC_TYPE")
local_census_record = build(:local_census_record, document_number: "#DOC_NUMBER",
document_type: "#DOC_TYPE")
expect(local_census_record).not_to be_valid
end
it "sanitizes text attributes values before validation" do
local_census_record.document_type = " DNI "
local_census_record.document_number = " #DOCUMENT_NUMBER "