Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf from aider #6197

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 19 additions & 8 deletions app/controllers/casa_cases_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ class CasaCasesController < ApplicationController

def index
authorize CasaCase
org_cases = current_user.casa_org.casa_cases.includes(:assigned_volunteers)
@casa_cases = policy_scope(org_cases).includes([:hearing_type, :judge])
org_cases = current_user.casa_org.casa_cases
.includes(:assigned_volunteers, :volunteer_assignments, :casa_org, :hearing_type, :judge)
.with_attached_court_reports
@casa_cases = policy_scope(org_cases)
@casa_cases_filter_id = policy(CasaCase).can_see_filters? ? "casa-cases" : ""
@duties = OtherDuty.where(creator_id: current_user.id)
end
Expand Down Expand Up @@ -131,10 +133,19 @@ def reactivate

def copy_court_orders
authorize @casa_case, :update_court_orders?
CasaCase.find_by_case_number(params[:case_number_cp]).case_court_orders.each do |court_order|
dup_court_order = court_order.dup
dup_court_order.save
@casa_case.case_court_orders.append dup_court_order
source_case = CasaCase.includes(:case_court_orders)
.find_by_case_number(params[:case_number_cp])

return unless source_case

CaseCourtOrder.transaction do
source_case.case_court_orders.each do |court_order|
@casa_case.case_court_orders.create!(
text: court_order.text,
implementation_status: court_order.implementation_status,
court_date_id: court_order.court_date_id
)
end
end
end

Expand Down Expand Up @@ -176,8 +187,8 @@ def casa_case_update_params
end

def set_contact_types
@contact_types = current_organization.contact_types
@selected_contact_type_ids = (!@casa_case.nil?) ? @casa_case.contact_type_ids : []
@contact_types = current_organization.contact_types.includes(:contact_type_group)
@selected_contact_type_ids = @casa_case&.contact_type_ids || []
end

def case_contact_csv_name(case_contacts)
Expand Down
3 changes: 3 additions & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@
t.index ["casa_org_id"], name: "index_casa_cases_on_casa_org_id"
t.index ["case_number", "casa_org_id"], name: "index_casa_cases_on_case_number_and_casa_org_id", unique: true
t.index ["slug"], name: "index_casa_cases_on_slug"
t.index ["active"], name: "index_casa_cases_on_active"
t.index ["court_report_due_date"], name: "index_casa_cases_on_court_report_due_date"
t.index ["court_report_status"], name: "index_casa_cases_on_court_report_status"
end

create_table "casa_cases_emancipation_options", force: :cascade do |t|
Expand Down
60 changes: 60 additions & 0 deletions spec/models/case_contact_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,66 @@
let(:casa_case) { create(:casa_case) }
let(:case_contact) { build(:case_contact, :wants_reimbursement, casa_case: casa_case, creator: volunteer) }

describe "metadata handling" do
it "initializes with empty metadata" do
contact = build(:case_contact)
expect(contact.metadata).to eq({})
end

it "preserves metadata through save" do
contact = create(:case_contact, metadata: {"test_key" => "test_value"})
contact.reload
expect(contact.metadata["test_key"]).to eq("test_value")
end
end

describe "reimbursement calculations" do
it "handles zero miles driven" do
contact = build(:case_contact, miles_driven: 0, want_driving_reimbursement: false)
expect(contact.reimbursement_amount).to be_nil
end

it "handles nil mileage rate gracefully" do
contact = build(:case_contact, :wants_reimbursement, miles_driven: 100)
allow(contact.casa_case.casa_org).to receive(:mileage_rate_for_given_date).and_return(nil)
expect(contact.reimbursement_amount).to be_nil
end
end

describe "validation messages" do
it "includes specific message for future dates" do
contact = build(:case_contact, occurred_at: 1.day.from_now)
contact.valid?
expect(contact.errors[:occurred_at]).to include("can't be in the future")
end

it "includes specific message for dates before 1989" do
contact = build(:case_contact, occurred_at: Date.new(1988, 12, 31))
contact.valid?
expect(contact.errors[:occurred_at]).to include("can't be prior to 01/01/1989.")
end
end

describe "contact_made validation" do
it "requires contact_made to be boolean" do
contact = build(:case_contact, contact_made: nil)
expect(contact).not_to be_valid
expect(contact.errors[:contact_made]).to include("must be true or false")
end

it "accepts false for contact_made" do
contact = build(:case_contact, contact_made: false)
contact.valid?
expect(contact.errors[:contact_made]).to be_empty
end

it "accepts true for contact_made" do
contact = build(:case_contact, contact_made: true)
contact.valid?
expect(contact.errors[:contact_made]).to be_empty
end
end

it "returns true if wants reimbursement, reimbursement changed, and has active supervisor" do
expect(case_contact.want_driving_reimbursement_changed?).to be true
expect(case_contact.should_send_reimbursement_email?).to be true
Expand Down
Loading