diff --git a/app/services/dossier_filter_service.rb b/app/services/dossier_filter_service.rb index e7094ab10..a322dc8dd 100644 --- a/app/services/dossier_filter_service.rb +++ b/app/services/dossier_filter_service.rb @@ -58,8 +58,8 @@ class DossierFilterService .pluck(:id) .uniq when 'dossier_labels' - dossiers.includes(table) - .order("#{sanitized_column(table, column)} #{order}") + dossiers.includes(:labels) + .order("labels.name #{order}") .pluck(:id) .uniq when 'self', 'user', 'individual', 'etablissement', 'groupe_instructeur' diff --git a/spec/services/dossier_filter_service_spec.rb b/spec/services/dossier_filter_service_spec.rb index d1d30d9d6..d00ae6371 100644 --- a/spec/services/dossier_filter_service_spec.rb +++ b/spec/services/dossier_filter_service_spec.rb @@ -273,6 +273,28 @@ describe DossierFilterService do it { is_expected.to eq([dossier_no, dossier_yes].map(&:id)) } end + context 'for labels table' do + let(:column) { procedure.find_column(label: 'Labels') } + + let(:label_a) { Label.create(name: "a", color: 'green-bourgeon', procedure:) } + let(:label_z) { Label.create(name: "z", color: 'green-bourgeon', procedure:) } + let!(:dossier_z) { create(:dossier, procedure:) } + let!(:dossier_a) { create(:dossier, procedure:) } + let!(:dossier_no_label) { create(:dossier, procedure:) } + let!(:dossier_label_a) { DossierLabel.create(dossier: dossier_a, label: label_a) } + let!(:dossier_label_z) { DossierLabel.create(dossier: dossier_z, label: label_z) } + + context 'asc' do + let(:order) { 'asc' } + it { is_expected.to eq([dossier_a, dossier_z, dossier_no_label].map(&:id)) } + end + + context 'desc' do + let(:order) { 'desc' } + it { is_expected.to eq([dossier_no_label, dossier_z, dossier_a].map(&:id)) } + end + end + context 'for other tables' do # All other columns and tables work the same so it’s ok to test only one let(:column) { procedure.find_column(label: 'Établissement code postal') }