[#1946] Query dossiers by remaining retention time
This commit is contained in:
parent
5e16b5d80e
commit
b672377f5b
2 changed files with 27 additions and 0 deletions
|
@ -61,6 +61,7 @@ class Dossier < ApplicationRecord
|
|||
scope :without_followers, -> { left_outer_joins(:follows).where(follows: { id: nil }) }
|
||||
scope :followed_by, -> (gestionnaire) { joins(:follows).where(follows: { gestionnaire: gestionnaire }) }
|
||||
scope :with_champs, -> { includes(champs: :type_de_champ) }
|
||||
scope :nearing_end_of_retention, -> (duration = '1 month') { joins(:procedure).where("en_instruction_at + (duree_conservation_dossiers_dans_ds * interval '1 month') - now() < interval ?", duration) }
|
||||
|
||||
accepts_nested_attributes_for :individual
|
||||
|
||||
|
|
|
@ -27,6 +27,32 @@ describe Dossier do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'nearing_end_of_retention' do
|
||||
let(:procedure) { create(:procedure, duree_conservation_dossiers_dans_ds: 6) }
|
||||
let!(:young_dossier) { create(:dossier, procedure: procedure) }
|
||||
let!(:expiring_dossier) { create(:dossier, :en_instruction, en_instruction_at: 170.days.ago, procedure: procedure) }
|
||||
let!(:just_expired_dossier) { create(:dossier, :en_instruction, en_instruction_at: (6.months + 1.second).ago, procedure: procedure) }
|
||||
let!(:long_expired_dossier) { create(:dossier, :en_instruction, en_instruction_at: 1.year.ago, procedure: procedure) }
|
||||
|
||||
context 'with default delay to end of retention' do
|
||||
subject { Dossier.nearing_end_of_retention }
|
||||
|
||||
it { is_expected.not_to include(young_dossier) }
|
||||
it { is_expected.to include(expiring_dossier) }
|
||||
it { is_expected.to include(just_expired_dossier) }
|
||||
it { is_expected.to include(long_expired_dossier) }
|
||||
end
|
||||
|
||||
context 'with custom delay to end of retention' do
|
||||
subject { Dossier.nearing_end_of_retention('0') }
|
||||
|
||||
it { is_expected.not_to include(young_dossier) }
|
||||
it { is_expected.not_to include(expiring_dossier) }
|
||||
it { is_expected.to include(just_expired_dossier) }
|
||||
it { is_expected.to include(long_expired_dossier) }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'methods' do
|
||||
let(:dossier) { create(:dossier, :with_entreprise, user: user) }
|
||||
let(:etablissement) { dossier.etablissement }
|
||||
|
|
Loading…
Reference in a new issue