Skip to content

Commit 0a733cc

Browse files
authored
Merge pull request #6659 from rubyforgood/InvalidColumnReference-fix
claude spec for prod bug
2 parents 005b784 + 5f3d4aa commit 0a733cc

2 files changed

Lines changed: 72 additions & 1 deletion

File tree

app/datatables/volunteer_datatable.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def raw_records
4949
.select(
5050
<<-SQL
5151
users.*,
52+
COALESCE(users.display_name, users.email) AS default_sort_order,
5253
COALESCE(supervisors.display_name, supervisors.email) AS supervisor_name,
5354
supervisors.id AS supervisor_id,
5455
transition_aged_youth_cases.volunteer_id IS NOT NULL AS has_transition_aged_youth_cases,
@@ -133,7 +134,7 @@ def hours_spent_in_days_subquery
133134
end
134135

135136
def order_clause
136-
@order_clause ||= build_order_clause || Arel.sql("COALESCE(users.display_name, users.email) ASC")
137+
@order_clause ||= build_order_clause || Arel.sql("default_sort_order ASC")
137138
end
138139

139140
def supervisor_filter

spec/datatables/volunteer_datatable_spec.rb

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,4 +506,74 @@
506506
end
507507
end
508508
end
509+
510+
describe "extra_languages filter" do
511+
let(:org) { build :casa_org }
512+
let(:supervisor) { create :supervisor, casa_org: org }
513+
let(:volunteer_with_language) { create :volunteer, casa_org: org, supervisor: supervisor }
514+
let(:volunteer_without_language) { create :volunteer, casa_org: org, supervisor: supervisor }
515+
let(:language) { create :language, casa_org: org }
516+
517+
before do
518+
create :user_language, user: volunteer_with_language, language: language
519+
end
520+
521+
context "when filtering for volunteers with extra languages with default ordering" do
522+
# Use an invalid order_by to trigger the default COALESCE ordering
523+
# which causes PG::InvalidColumnReference when combined with DISTINCT
524+
let(:order_by) { "invalid_column" }
525+
let(:additional_filters) do
526+
{
527+
active: %w[false true],
528+
supervisor: [supervisor.id],
529+
transition_aged_youth: %w[false true],
530+
extra_languages: %w[true]
531+
}
532+
end
533+
534+
it "does not raise PG::InvalidColumnReference error" do
535+
# Bug: PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY
536+
# expressions must appear in select list
537+
# This occurs because extra_languages filter adds .distinct but the default
538+
# ORDER BY COALESCE(users.display_name, users.email) is not in the SELECT list
539+
expect { subject }.not_to raise_error
540+
end
541+
542+
it "returns only volunteers with languages" do
543+
expect(subject[:data].map { |d| d[:id].to_i }).to contain_exactly(volunteer_with_language.id)
544+
end
545+
end
546+
547+
context "when filtering for volunteers without extra languages with default ordering" do
548+
let(:order_by) { "invalid_column" }
549+
let(:additional_filters) do
550+
{
551+
active: %w[false true],
552+
supervisor: [supervisor.id],
553+
transition_aged_youth: %w[false true],
554+
extra_languages: %w[false]
555+
}
556+
end
557+
558+
it "does not raise PG::InvalidColumnReference error" do
559+
expect { subject }.not_to raise_error
560+
end
561+
end
562+
563+
context "when filtering with multiple extra_languages options with default ordering" do
564+
let(:order_by) { "invalid_column" }
565+
let(:additional_filters) do
566+
{
567+
active: %w[false true],
568+
supervisor: [supervisor.id],
569+
transition_aged_youth: %w[false true],
570+
extra_languages: %w[true false]
571+
}
572+
end
573+
574+
it "does not raise PG::InvalidColumnReference error" do
575+
expect { subject }.not_to raise_error
576+
end
577+
end
578+
end
509579
end

0 commit comments

Comments
 (0)