procedure: fix verification delay
The verification delay was ignoring all dossiers not closed yet.
This commit is contained in:
parent
9d40ad614e
commit
ed1f6ec38d
2 changed files with 47 additions and 6 deletions
|
@ -467,7 +467,6 @@ class Procedure < ApplicationRecord
|
||||||
|
|
||||||
def percentile_time(start_attribute, end_attribute, p)
|
def percentile_time(start_attribute, end_attribute, p)
|
||||||
times = dossiers
|
times = dossiers
|
||||||
.state_termine
|
|
||||||
.where(end_attribute => 1.month.ago..Time.zone.now)
|
.where(end_attribute => 1.month.ago..Time.zone.now)
|
||||||
.pluck(start_attribute, end_attribute)
|
.pluck(start_attribute, end_attribute)
|
||||||
.map { |(start_date, end_date)| end_date - start_date }
|
.map { |(start_date, end_date)| end_date - start_date }
|
||||||
|
|
|
@ -707,6 +707,48 @@ describe Procedure do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#usual_verification_time' do
|
||||||
|
let(:procedure) { create(:procedure) }
|
||||||
|
|
||||||
|
def create_dossier(construction_date:, instruction_date:)
|
||||||
|
dossier = create(:dossier, :en_instruction, procedure: procedure)
|
||||||
|
dossier.update!(en_construction_at: construction_date, en_instruction_at: instruction_date)
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
delays.each do |delay|
|
||||||
|
create_dossier(construction_date: 1.week.ago - delay, instruction_date: 1.week.ago)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there are several dossiers in the time frame' do
|
||||||
|
let(:delays) { [1.day, 2.days, 2.days, 2.days, 2.days, 3.days, 3.days, 3.days, 3.days, 12.days] }
|
||||||
|
|
||||||
|
it 'returns a time representative of the dossier verification delay' do
|
||||||
|
expect(procedure.usual_verification_time).to be_between(3.days, 4.days)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there are very old dossiers' do
|
||||||
|
let(:delays) { [2.days, 2.days] }
|
||||||
|
let!(:old_dossier) { create_dossier(construction_date: 3.months.ago, instruction_date: 2.months.ago) }
|
||||||
|
|
||||||
|
it 'ignores dossiers older than 1 month' do
|
||||||
|
expect(procedure.usual_verification_time).to be_within(10.seconds).of(2.days)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there is only one dossier in the time frame' do
|
||||||
|
let(:delays) { [1.day] }
|
||||||
|
it { expect(procedure.usual_verification_time).to be_within(10.seconds).of(1.day) }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'where there are no dossiers' do
|
||||||
|
let(:delays) { [] }
|
||||||
|
it { expect(procedure.usual_verification_time).to be_nil }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#usual_instruction_time' do
|
describe '#usual_instruction_time' do
|
||||||
let(:procedure) { create(:procedure) }
|
let(:procedure) { create(:procedure) }
|
||||||
|
|
||||||
|
@ -716,13 +758,13 @@ describe Procedure do
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
processed_delays.each do |delay|
|
delays.each do |delay|
|
||||||
create_dossier(instruction_date: 1.week.ago - delay, processed_date: 1.week.ago)
|
create_dossier(instruction_date: 1.week.ago - delay, processed_date: 1.week.ago)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there are several processed dossiers' do
|
context 'when there are several processed dossiers' do
|
||||||
let(:processed_delays) { [1.day, 2.days, 2.days, 2.days, 2.days, 3.days, 3.days, 3.days, 3.days, 12.days] }
|
let(:delays) { [1.day, 2.days, 2.days, 2.days, 2.days, 3.days, 3.days, 3.days, 3.days, 12.days] }
|
||||||
|
|
||||||
it 'returns a time representative of the dossier instruction delay' do
|
it 'returns a time representative of the dossier instruction delay' do
|
||||||
expect(procedure.usual_instruction_time).to be_between(3.days, 4.days)
|
expect(procedure.usual_instruction_time).to be_between(3.days, 4.days)
|
||||||
|
@ -730,7 +772,7 @@ describe Procedure do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there are very old dossiers' do
|
context 'when there are very old dossiers' do
|
||||||
let(:processed_delays) { [2.days, 2.days] }
|
let(:delays) { [2.days, 2.days] }
|
||||||
let!(:old_dossier) { create_dossier(instruction_date: 3.months.ago, processed_date: 2.months.ago) }
|
let!(:old_dossier) { create_dossier(instruction_date: 3.months.ago, processed_date: 2.months.ago) }
|
||||||
|
|
||||||
it 'ignores dossiers older than 1 month' do
|
it 'ignores dossiers older than 1 month' do
|
||||||
|
@ -739,12 +781,12 @@ describe Procedure do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when there is only one processed dossier' do
|
context 'when there is only one processed dossier' do
|
||||||
let(:processed_delays) { [1.day] }
|
let(:delays) { [1.day] }
|
||||||
it { expect(procedure.usual_instruction_time).to be_within(10.seconds).of(1.day) }
|
it { expect(procedure.usual_instruction_time).to be_within(10.seconds).of(1.day) }
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'where there is no processed dossier' do
|
context 'where there is no processed dossier' do
|
||||||
let(:processed_delays) { [] }
|
let(:delays) { [] }
|
||||||
it { expect(procedure.usual_instruction_time).to be_nil }
|
it { expect(procedure.usual_instruction_time).to be_nil }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue