From a2ffc4357d29d5838f774cbf3808d4487c1bb859 Mon Sep 17 00:00:00 2001 From: Frederic Merizen Date: Tue, 3 Apr 2018 14:20:21 +0200 Subject: [PATCH] [#1563] Generate a helpful alert on attestation / closed mail mismatch --- ..._attestation_inconsistency_alert.html.haml | 22 +++++++++ ...tion_inconsistency_alert.html.haml_spec.rb | 46 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 app/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml create mode 100644 spec/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml_spec.rb diff --git a/app/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml b/app/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml new file mode 100644 index 000000000..3901151b5 --- /dev/null +++ b/app/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml @@ -0,0 +1,22 @@ +- case @procedure.closed_mail_template_attestation_inconsistency_state +- when :missing_tag + .center + .alert{ class: flash_class('alert') } + Cette procédure comporte une attestation, mais l’accusé d’acceptation ne la mentionne pas : + - if !@procedure.locked? + = link_to('désactivez l’attestation', edit_admin_procedure_attestation_template_path(@procedure)) + ou + = link_to('ajoutez la balise', edit_admin_procedure_mail_template_path(@procedure, Mails::ClosedMail::SLUG)) + %code{ style: "white-space: pre-wrap;" } + \--lien attestation-- + à l’accusé d’acceptation +- when :extraneous_tag + .center + .alert{ class: flash_class('alert') } + Cette procédure ne comporte pas d’attestation, mais l’accusé d’acceptation en mentionne une : + = link_to('activez l’attestation', edit_admin_procedure_attestation_template_path(@procedure)) + ou + = link_to('enlevez la balise', edit_admin_procedure_mail_template_path(@procedure, Mails::ClosedMail::SLUG)) + %code{ style: "white-space: pre-wrap;" } + \--lien attestation-- + de l’accusé d’acceptation diff --git a/spec/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml_spec.rb b/spec/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml_spec.rb new file mode 100644 index 000000000..1a2ae1573 --- /dev/null +++ b/spec/views/admin/_closed_mail_template_attestation_inconsistency_alert.html.haml_spec.rb @@ -0,0 +1,46 @@ +require 'spec_helper' + +describe 'admin/_closed_mail_template_attestation_inconsistency_alert.html.haml', type: :view do + let(:procedure) { create(:procedure, closed_mail: closed_mail, published_at: published_at) } + let(:published_at) { nil } + + def alert + assign(:procedure, procedure) + render + rendered + end + + context 'when there is no inconsistency' do + let(:closed_mail) { nil } + + it { expect(alert).to be_empty } + end + + context 'when there is no active attestation but the closed mail template mentions one' do + let(:closed_mail) { create(:closed_mail, body: '--lien attestation--') } + + it { expect(alert).to include("Cette procédure ne comporte pas d’attestation, mais l’accusé d’acceptation en mentionne une") } + it { expect(alert).to include(edit_admin_procedure_attestation_template_path(procedure)) } + it { expect(alert).to include(edit_admin_procedure_mail_template_path(procedure, Mails::ClosedMail::SLUG)) } + end + + context 'when there is an active attestation but the closed mail template does not mention it' do + let(:closed_mail) { create(:closed_mail) } + let!(:attestation_template) { create(:attestation_template, procedure: procedure, activated: true) } + + it { expect(alert).to include("Cette procédure comporte une attestation, mais l’accusé d’acceptation ne la mentionne pas") } + it { expect(alert).to include(edit_admin_procedure_mail_template_path(procedure, Mails::ClosedMail::SLUG)) } + + context 'when the procedure has been published, the attestation cannot be deactivated' do + let(:published_at) { Time.now } + + it { expect(procedure.locked?).to be_truthy } + it { expect(alert).not_to include(edit_admin_procedure_attestation_template_path(procedure)) } + end + + context 'when the procedure is still a draft' do + it { expect(procedure.locked?).to be_falsey } + it { expect(alert).to include(edit_admin_procedure_attestation_template_path(procedure)) } + end + end +end