Skip to content

Commit e83e849

Browse files
committed
test: Add comprehensive test cases for CaseContact model metadata and validations
1 parent df3ae63 commit e83e849

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

spec/models/case_contact_spec.rb

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,66 @@
570570
let(:casa_case) { create(:casa_case) }
571571
let(:case_contact) { build(:case_contact, :wants_reimbursement, casa_case: casa_case, creator: volunteer) }
572572

573+
describe "metadata handling" do
574+
it "initializes with empty metadata" do
575+
contact = build(:case_contact)
576+
expect(contact.metadata).to eq({})
577+
end
578+
579+
it "preserves metadata through save" do
580+
contact = create(:case_contact, metadata: {"test_key" => "test_value"})
581+
contact.reload
582+
expect(contact.metadata["test_key"]).to eq("test_value")
583+
end
584+
end
585+
586+
describe "reimbursement calculations" do
587+
it "handles zero miles driven" do
588+
contact = build(:case_contact, miles_driven: 0, want_driving_reimbursement: false)
589+
expect(contact.reimbursement_amount).to be_nil
590+
end
591+
592+
it "handles nil mileage rate gracefully" do
593+
contact = build(:case_contact, :wants_reimbursement, miles_driven: 100)
594+
allow(contact.casa_case.casa_org).to receive(:mileage_rate_for_given_date).and_return(nil)
595+
expect(contact.reimbursement_amount).to be_nil
596+
end
597+
end
598+
599+
describe "validation messages" do
600+
it "includes specific message for future dates" do
601+
contact = build(:case_contact, occurred_at: 1.day.from_now)
602+
contact.valid?
603+
expect(contact.errors[:occurred_at]).to include("can't be in the future")
604+
end
605+
606+
it "includes specific message for dates before 1989" do
607+
contact = build(:case_contact, occurred_at: Date.new(1988, 12, 31))
608+
contact.valid?
609+
expect(contact.errors[:occurred_at]).to include("can't be prior to 01/01/1989.")
610+
end
611+
end
612+
613+
describe "contact_made validation" do
614+
it "requires contact_made to be boolean" do
615+
contact = build(:case_contact, contact_made: nil)
616+
expect(contact).not_to be_valid
617+
expect(contact.errors[:contact_made]).to include("must be true or false")
618+
end
619+
620+
it "accepts false for contact_made" do
621+
contact = build(:case_contact, contact_made: false)
622+
contact.valid?
623+
expect(contact.errors[:contact_made]).to be_empty
624+
end
625+
626+
it "accepts true for contact_made" do
627+
contact = build(:case_contact, contact_made: true)
628+
contact.valid?
629+
expect(contact.errors[:contact_made]).to be_empty
630+
end
631+
end
632+
573633
it "returns true if wants reimbursement, reimbursement changed, and has active supervisor" do
574634
expect(case_contact.want_driving_reimbursement_changed?).to be true
575635
expect(case_contact.should_send_reimbursement_email?).to be true

0 commit comments

Comments
 (0)