From 3c39dccad4c367e23c7eb88e96d964c738a51ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Thu, 30 May 2019 11:16:33 +0200 Subject: [PATCH] Add uniqueness validation to document_number and document_type pair --- app/models/local_census_record.rb | 1 + ...530082138_add_unique_index_to_local_census_records.rb | 9 +++++++++ db/schema.rb | 1 + spec/models/local_census_record_spec.rb | 8 ++++++++ 4 files changed, 19 insertions(+) create mode 100644 db/migrate/20190530082138_add_unique_index_to_local_census_records.rb diff --git a/app/models/local_census_record.rb b/app/models/local_census_record.rb index 29c93493b..bac884ecb 100644 --- a/app/models/local_census_record.rb +++ b/app/models/local_census_record.rb @@ -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}%") } diff --git a/db/migrate/20190530082138_add_unique_index_to_local_census_records.rb b/db/migrate/20190530082138_add_unique_index_to_local_census_records.rb new file mode 100644 index 000000000..9937bcfd3 --- /dev/null +++ b/db/migrate/20190530082138_add_unique_index_to_local_census_records.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 8d2875504..2567c0684 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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 diff --git a/spec/models/local_census_record_spec.rb b/spec/models/local_census_record_spec.rb index 1870acf12..f1ba467ee 100644 --- a/spec/models/local_census_record_spec.rb +++ b/spec/models/local_census_record_spec.rb @@ -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 "