Merge pull request #4883 from betagouv/feat/4872

feat/4872 - instructors : receive daily emails for declarative folders
This commit is contained in:
Kara Diaby 2020-03-17 16:25:58 +01:00 committed by GitHub
commit c311a0c95e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 181 additions and 0 deletions

View file

@ -152,6 +152,8 @@ class Instructeur < ApplicationRecord
h = {
nb_en_construction: groupe.dossiers.en_construction.count,
nb_en_instruction: groupe.dossiers.en_instruction.count,
nb_accepted: groupe.dossiers.accepte.where(processed_at: Time.zone.yesterday.beginning_of_day..Time.zone.yesterday.end_of_day).count,
nb_notification: notifications_for_procedure(procedure, :not_archived).count
}
@ -161,6 +163,14 @@ class Instructeur < ApplicationRecord
acc << h
end
[["en_instruction", h[:nb_en_instruction]], ["accepte", h[:nb_accepted]]].each do |state, count|
if procedure.declarative_with_state == state && count > 0
h[:procedure_id] = procedure.id
h[:procedure_libelle] = procedure.libelle
acc << h
end
end
acc
end
end

View file

@ -16,5 +16,12 @@
- if datum[:nb_notification] > 0
%br
#{datum[:nb_notification]} #{'notification'.pluralize(datum[:nb_notification])}
- if datum[:nb_en_instruction] > 0
%br
#{datum[:nb_en_instruction]} #{'dossier'.pluralize(datum[:nb_en_instruction])}
- if datum[:nb_accepted] > 0
%br
#{datum[:nb_accepted]} #{'dossier'.pluralize(datum[:nb_accepted])}
= render partial: "layouts/mailers/signature"

View file

@ -401,6 +401,8 @@ describe Instructeur, type: :model do
expect(instructeur.email_notification_data).to eq([
{
nb_en_construction: 1,
nb_en_instruction: 0,
nb_accepted: 0,
nb_notification: 0,
procedure_id: procedure_to_assign.id,
procedure_libelle: procedure_to_assign.libelle
@ -420,6 +422,8 @@ describe Instructeur, type: :model do
expect(instructeur.email_notification_data).to eq([
{
nb_en_construction: 0,
nb_en_instruction: 0,
nb_accepted: 0,
nb_notification: 3,
procedure_id: procedure_to_assign.id,
procedure_libelle: procedure_to_assign.libelle
@ -428,6 +432,75 @@ describe Instructeur, type: :model do
end
end
context 'when a declarated dossier in instruction exists' do
let!(:dossier) { create(:dossier, procedure: procedure_to_assign, state: Dossier.states.fetch(:en_construction)) }
before do
procedure_to_assign.update(declarative_with_state: "en_instruction")
DeclarativeProceduresJob.new.perform
dossier.reload
end
it { expect(procedure_to_assign.declarative_with_state).to eq("en_instruction") }
it { expect(dossier.state).to eq("en_instruction") }
it do
expect(instructeur.email_notification_data).to eq([
{
nb_en_construction: 0,
nb_en_instruction: 1,
nb_accepted: 0,
nb_notification: 0,
procedure_id: procedure_to_assign.id,
procedure_libelle: procedure_to_assign.libelle
}
])
end
end
context 'when a declarated dossier in accepte processed at today exists' do
let!(:dossier) { create(:dossier, procedure: procedure_to_assign, state: Dossier.states.fetch(:en_construction)) }
before do
procedure_to_assign.update(declarative_with_state: "accepte")
DeclarativeProceduresJob.new.perform
dossier.reload
end
it { expect(procedure_to_assign.declarative_with_state).to eq("accepte") }
it { expect(dossier.state).to eq("accepte") }
it do
expect(instructeur.email_notification_data).to eq([])
end
end
context 'when a declarated dossier in accepte processed at yesterday exists' do
let!(:dossier) { create(:dossier, procedure: procedure_to_assign, state: Dossier.states.fetch(:en_construction)) }
before do
procedure_to_assign.update(declarative_with_state: "accepte")
DeclarativeProceduresJob.new.perform
dossier.update(processed_at: Time.zone.yesterday.beginning_of_day)
dossier.reload
end
it { expect(procedure_to_assign.declarative_with_state).to eq("accepte") }
it { expect(dossier.state).to eq("accepte") }
it do
expect(instructeur.email_notification_data).to eq([
{
nb_en_construction: 0,
nb_en_instruction: 0,
nb_accepted: 1,
nb_notification: 0,
procedure_id: procedure_to_assign.id,
procedure_libelle: procedure_to_assign.libelle
}
])
end
end
context 'otherwise' do
it { expect(instructeur.email_notification_data).to eq([]) }
end

View file

@ -47,6 +47,49 @@ describe NotificationService do
end
end
context 'when a declarative dossier in instruction exists on this procedure' do
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
before do
procedure.update(declarative_with_state: "en_instruction")
DeclarativeProceduresJob.new.perform
dossier.reload
end
it do
subject
expect(InstructeurMailer).to have_received(:send_notifications)
end
end
context 'when a declarative dossier in accepte on yesterday exists on this procedure' do
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
before do
procedure.update(declarative_with_state: "accepte")
DeclarativeProceduresJob.new.perform
dossier.update(processed_at: Time.zone.yesterday.beginning_of_day)
dossier.reload
end
it do
subject
expect(InstructeurMailer).to have_received(:send_notifications)
end
end
context 'when a declarative dossier in accepte on today exists on this procedure' do
let!(:dossier) { create(:dossier, :en_construction, procedure: procedure) }
before do
procedure.update(declarative_with_state: "accepte")
DeclarativeProceduresJob.new.perform
dossier.reload
end
it do
subject
expect(InstructeurMailer).not_to have_received(:send_notifications)
end
end
context 'when there is a notification on this procedure' do
before do
allow_any_instance_of(Instructeur).to receive(:notifications_for_procedure)

View file

@ -16,6 +16,8 @@ describe 'instructeur_mailer/send_notifications.html.haml', type: :view do
procedure_libelle: 'une superbe démarche',
procedure_id: 213,
nb_en_construction: 1,
nb_en_instruction: 0,
nb_accepted: 0,
nb_notification: 0
}
]
@ -27,6 +29,50 @@ describe 'instructeur_mailer/send_notifications.html.haml', type: :view do
it { expect(rendered).not_to have_text('notification') }
end
context 'when there is one declarated dossier in instruction' do
let(:data) do
[
{
procedure_libelle: 'une superbe démarche',
procedure_id: 213,
nb_en_construction: 0,
nb_en_instruction: 1,
nb_accepted: 0,
nb_notification: 0
}
]
end
it { expect(rendered).to have_link('une superbe démarche', href: procedure_url(213)) }
it { expect(rendered).to have_text('une superbe démarche') }
it { expect(rendered).to have_text('1 dossier') }
it { expect(rendered).not_to have_text('notification') }
it { expect(rendered).not_to have_text('construction') }
it { expect(rendered).not_to have_text('accepte') }
end
context 'when there is one declarated dossier in accepte' do
let(:data) do
[
{
procedure_libelle: 'une superbe démarche',
procedure_id: 213,
nb_en_construction: 0,
nb_en_instruction: 0,
nb_accepted: 1,
nb_notification: 0
}
]
end
it { expect(rendered).to have_link('une superbe démarche', href: procedure_url(213)) }
it { expect(rendered).to have_text('une superbe démarche') }
it { expect(rendered).to have_text('1 dossier') }
it { expect(rendered).not_to have_text('notification') }
it { expect(rendered).not_to have_text('construction') }
it { expect(rendered).not_to have_text('instruction') }
end
context 'when there is one notification' do
let(:data) do
[
@ -34,6 +80,8 @@ describe 'instructeur_mailer/send_notifications.html.haml', type: :view do
procedure_libelle: 'une superbe démarche',
procedure_id: 213,
nb_en_construction: 0,
nb_en_instruction: 0,
nb_accepted: 0,
nb_notification: 1
}
]