From 5bde386ef4d46e85a126dda4b0873cf5ca70b69b Mon Sep 17 00:00:00 2001 From: motasem-salem Date: Tue, 11 Nov 2014 11:34:36 -0500 Subject: [PATCH] Added validations for father_alive, father_is_martyr and father_date_of_death values --- app/models/orphan.rb | 35 +++++++++++------- ...19_add_father_alive_to_pending_orphans.rb} | 0 db/schema.rb | 4 +- features/admin/orphans.feature | 4 +- spec/factories/orphans.rb | 5 +-- spec/fixtures/one_orphan_xls.xls | Bin 29696 -> 29696 bytes spec/fixtures/one_orphan_xlsx.xlsx | Bin 10874 -> 10860 bytes spec/models/orphan_spec.rb | 35 ++++++++++++------ 8 files changed, 51 insertions(+), 32 deletions(-) rename db/migrate/{20141110225313_add_father_alive_to_pending_orphans.rb => 20141110225319_add_father_alive_to_pending_orphans.rb} (100%) diff --git a/app/models/orphan.rb b/app/models/orphan.rb index bd94ae2a..63a6dfb0 100644 --- a/app/models/orphan.rb +++ b/app/models/orphan.rb @@ -13,17 +13,25 @@ class Orphan < ActiveRecord::Base validates :name, presence: true validates :father_name, presence: true - validates :father_is_martyr, inclusion: {in: [true, false] }, exclusion: { in: [nil]} - # Temporarily disabling validation to make tests pass. - # Proper validation will be submitted in another PR. - #validates :father_date_of_death, presence: true, date_not_in_future: true + + validates :father_alive, inclusion: { in: [true, false] }, exclusion: { in: [nil] } + validates :father_alive, inclusion: { in: [false] }, exclusion: { in: [true] }, if: :father_is_martyr + validates :father_alive, inclusion: { in: [true] }, exclusion: { in: [false] }, if: 'father_date_of_death.nil?' + validates :father_alive, inclusion: { in: [false] }, exclusion: { in: [true] }, unless: 'father_date_of_death.nil?' + + validates :father_is_martyr, inclusion: { in: [true, false] }, exclusion: { in: [nil] } + validates :father_is_martyr, inclusion: { in: [false] }, exclusion: { in: [true] }, if: :father_alive + validates :father_is_martyr, inclusion: { in: [false] }, exclusion: { in: [true] }, if: 'father_date_of_death.nil?' + + validates :father_date_of_death, presence: true, date_not_in_future: true, unless: :father_alive + validates :father_date_of_death, absence: true, if: :father_alive + validates :mother_name, presence: true - validates :mother_alive, inclusion: {in: [true, false] }, exclusion: { in: [nil]} - validates :father_alive, inclusion: {in: [true, false] }, exclusion: { in: [nil]} + validates :mother_alive, inclusion: { in: [true, false] }, exclusion: { in: [nil] } validates :date_of_birth, presence: true, date_not_in_future: true - validates :gender, presence: true, inclusion: {in: Settings.lookup.gender } + validates :gender, presence: true, inclusion: { in: Settings.lookup.gender } validates :contact_number, presence: true - validates :sponsored_by_another_org, inclusion: {in: [true, false] }, exclusion: { in: [nil]} + validates :sponsored_by_another_org, inclusion: { in: [true, false] }, exclusion: { in: [nil] } validates :minor_siblings_count, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 } validates :original_address, presence: true validates :current_address, presence: true @@ -31,7 +39,7 @@ class Orphan < ActiveRecord::Base validates :priority, presence: true, inclusion: { in: %w(Normal High) } validates :orphan_sponsorship_status, presence: true validates :orphan_list, presence: true - validate :orphans_dob_within_1yr_of_fathers_death + validate :orphans_dob_within_1yr_of_fathers_death, unless: :father_alive validate :less_than_22_yo_when_joined_osra validate :can_be_inactivated, if: :being_inactivated?, on: :update @@ -108,11 +116,11 @@ def default_sponsorship_status_unsponsored end def default_orphan_status_active - self.orphan_status ||= OrphanStatus.find_by_name 'Active' + self.orphan_status ||= OrphanStatus.find_by_name 'Active' end def valid_date? date - begin + begin Date.parse(date.to_s) rescue ArgumentError return false @@ -122,7 +130,6 @@ def valid_date? date def default_priority_to_normal self.priority ||= 'Normal' end - def set_province_code self.province_code = partner_province_code @@ -171,7 +178,7 @@ def previously_sponsored? end def set_sponsorship_status(status_name) - sponsorship_status = OrphanSponsorshipStatus.find_by_name(status_name) + sponsorship_status = OrphanSponsorshipStatus.find_by_name(status_name) self.orphan_sponsorship_status = sponsorship_status end @@ -186,4 +193,4 @@ def being_inactivated? orphan_status_id_changed? && (OrphanStatus.find(orphan_status_id_was).name == 'Active') end end -end +end \ No newline at end of file diff --git a/db/migrate/20141110225313_add_father_alive_to_pending_orphans.rb b/db/migrate/20141110225319_add_father_alive_to_pending_orphans.rb similarity index 100% rename from db/migrate/20141110225313_add_father_alive_to_pending_orphans.rb rename to db/migrate/20141110225319_add_father_alive_to_pending_orphans.rb diff --git a/db/schema.rb b/db/schema.rb index 4c6e6e85..291e86c3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20141110225318) do +ActiveRecord::Schema.define(version: 20141110225319) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -241,8 +241,8 @@ t.integer "requested_orphan_count" t.boolean "request_fulfilled", default: false, null: false t.integer "agent_id" - t.string "payment_plan", default: "", null: false t.string "city" + t.string "payment_plan", default: "", null: false end add_index "sponsors", ["agent_id"], name: "index_sponsors_on_agent_id", using: :btree diff --git a/features/admin/orphans.feature b/features/admin/orphans.feature index 4a87f53a..bc4809aa 100644 --- a/features/admin/orphans.feature +++ b/features/admin/orphans.feature @@ -49,7 +49,7 @@ Feature: And I fill in "Father occupation" with "Another Occupation" And I fill in "Father place of death" with "Another Place" And I fill in "Father cause of death" with "Another Cause" - And I fill in "Father date of death" with "2013-03-15" + And I fill in "Father date of death" with "" And I fill in "Mother name" with "Mother N" And I select "Male" from the drop down box for "Gender" And I uncheck the "Father is martyr" checkbox @@ -89,7 +89,7 @@ Feature: And I should see "Father Occupation" set to "Another Occupation" And I should see "Father Place Of Death" set to "Another Place" And I should see "Father Cause Of Death" set to "Another Cause" - And I should see "Father Date Of Death" set to "March 15, 2013" + And I should see "Father Date Of Death" set to "" And I should see "Mother Name" set to "Mother N" And I should see "Gender" set to "Male" And I should see "Father Is Martyr" set to "No" diff --git a/spec/factories/orphans.rb b/spec/factories/orphans.rb index 4150a0be..b27546cc 100644 --- a/spec/factories/orphans.rb +++ b/spec/factories/orphans.rb @@ -2,11 +2,10 @@ factory :orphan do name { Faker::Name.name } father_name { Faker::Name.name } - father_is_martyr { [true, false].sample } - father_date_of_death { 4.days.ago } + father_is_martyr { false } mother_name { Faker::Name.name } mother_alive { [true, false].sample } - father_alive { [true, false].sample } + father_alive { true } date_of_birth { 10.years.ago } gender { %w(Male Female).sample } contact_number { Faker::PhoneNumber.phone_number } diff --git a/spec/fixtures/one_orphan_xls.xls b/spec/fixtures/one_orphan_xls.xls index ace07510c3d7af3dce8723c30c1691e89887f81f..88b81d442e14dc25d6967e1074686ee721bae12f 100644 GIT binary patch delta 21 dcmZp8!PxMEaYGIZ8;ivGzx)4gE@J7+2LNb93Bv#Y delta 21 dcmZp8!PxMEaYGIZTiD{ppPaup7qRr^0|04M36=l= diff --git a/spec/fixtures/one_orphan_xlsx.xlsx b/spec/fixtures/one_orphan_xlsx.xlsx index c63bf5b2626e0eb511defbf35f0d2ebb6d2ff860..2c9e479eb0643c7b3822e22eca0f46a924ad7feb 100644 GIT binary patch delta 4601 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 delta 4664 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 SkVhVi6Q#_v4 diff --git a/spec/models/orphan_spec.rb b/spec/models/orphan_spec.rb index 76821c88..38b07b54 100644 --- a/spec/models/orphan_spec.rb +++ b/spec/models/orphan_spec.rb @@ -21,16 +21,6 @@ it { is_expected.to validate_presence_of :father_name } it { is_expected.to_not allow_value(nil).for(:father_is_martyr) } - # Temporarily disabling validation to make tests pass. - # Proper validation will be submitted in another PR. - - # it { is_expected.to validate_presence_of :father_date_of_death } - # it { is_expected.to allow_value(Date.today - 5, Date.current).for(:father_date_of_death) } - # it { is_expected.to_not allow_value(Date.today + 5).for(:father_date_of_death) } - # [7, 'yes', true].each do |bad_date_value| - # it { is_expected.to_not allow_value(bad_date_value).for :father_date_of_death } - # end - it { is_expected.to validate_presence_of :mother_name } it { is_expected.to_not allow_value(nil).for(:mother_alive) } it { is_expected.to_not allow_value(nil).for(:father_alive) } @@ -77,8 +67,31 @@ it { is_expected.to have_one(:partner).through(:orphan_list).autosave(false) } + + describe 'validate father_alive, father_is_martyr, father_date_of_death values' do + let(:orphan) { create :orphan } + + it 'if father_alive then father_is_martyr must be false & father_date_of_birth must be blank' do + orphan.father_alive = true + + expect(orphan).to allow_value(false).for :father_is_martyr + expect(orphan).to_not allow_value(true).for :father_is_martyr + expect(orphan).to validate_absence_of :father_date_of_death + end + + it 'if father_alive is false, then father_date_of_death must be present and should be in the past' do + orphan.father_alive = false + + expect(orphan).to validate_presence_of :father_date_of_death + expect(orphan).to allow_value(5.days.ago, Date.current).for :father_date_of_death + [7, 'yes', true, 5.days.from_now].each do |bad_date_value| + expect(orphan).to_not allow_value(bad_date_value).for :father_date_of_death + end + end + end + describe '#orphans_dob_within_1yr_of_fathers_death' do - let(:orphan) { create :orphan, :father_date_of_death => (1.year + 1.day).ago } + let(:orphan) { create :orphan, father_alive: false, :father_date_of_death => (1.year + 1.day).ago } it "is valid when orphan is born a year after fathers death" do orphan.date_of_birth = 1.day.ago