describe Traitement do describe '#count_dossiers_termines_by_month' do let(:procedure) { create(:procedure, :published, groupe_instructeurs: [groupe_instructeurs]) } let(:groupe_instructeurs) { create(:groupe_instructeur) } before do create_dossier_for_month(procedure, 2021, 3) create_dossier_for_month(procedure, 2021, 3) create_archived_dossier_for_month(procedure, 2021, 3) create_dossier_for_month(procedure, 2021, 2) end subject do Timecop.freeze(Time.zone.local(2021, 3, 5)) do Traitement.count_dossiers_termines_by_month(groupe_instructeurs) end end it 'count dossiers_termines by month' do expect(count_for_month(subject, 3)).to eq 3 expect(count_for_month(subject, 2)).to eq 1 end it 'returns descending order by month' do expect(subject[0]["month"].to_date.month).to eq 3 expect(subject[1]["month"].to_date.month).to eq 2 end end private def count_for_month(count_dossiers_termines_by_month, month) count_dossiers_termines_by_month.find do |count_by_month| count_by_month["month"].to_date.month == month end["count"] end def create_dossier_for_month(procedure, year, month) Timecop.freeze(Time.zone.local(year, month, 5)) do create(:dossier, :accepte, :with_attestation, procedure: procedure) end end def create_archived_dossier_for_month(procedure, year, month) Timecop.freeze(Time.zone.local(year, month, 5)) do create(:dossier, :accepte, :archived, :with_attestation, procedure: procedure) end end end