|
570 | 570 | let(:casa_case) { create(:casa_case) } |
571 | 571 | let(:case_contact) { build(:case_contact, :wants_reimbursement, casa_case: casa_case, creator: volunteer) } |
572 | 572 |
|
| 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 | + |
573 | 633 | it "returns true if wants reimbursement, reimbursement changed, and has active supervisor" do |
574 | 634 | expect(case_contact.want_driving_reimbursement_changed?).to be true |
575 | 635 | expect(case_contact.should_send_reimbursement_email?).to be true |
|
0 commit comments