demarches-normaliennes/spec/system/administrateurs/procedure_attestation_template_spec.rb
2024-08-22 09:26:48 +02:00

189 lines
7 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# frozen_string_literal: true
require 'system/administrateurs/procedure_spec_helper'
describe 'As an administrateur, I want to manage the procedures attestation', js: true do
include ProcedureSpecHelper
let(:administrateur) { administrateurs(:default_admin) }
let(:procedure) do
create(:procedure, :with_service, :with_instructeur, :with_zone,
aasm_state: :brouillon,
administrateurs: [administrateur],
libelle: 'libellé de la procédure',
path: 'libelle-de-la-procedure')
end
before { login_as(administrateur.user, scope: :user) }
def find_attestation_card(with_nested_selector: nil)
attestation_path = if procedure.attestation_template&.version == 2 || procedure.feature_enabled?(:attestation_v2)
edit_admin_procedure_attestation_template_v2_path(procedure)
else
edit_admin_procedure_attestation_template_path(procedure)
end
full_selector = [
"a[href=\"#{attestation_path}\"]",
with_nested_selector
].compact.join(" ")
page.find(full_selector)
end
context 'Enable, publish, Disable' do
scenario do
visit admin_procedure_path(procedure)
# start with no attestation
expect(page).to have_content('Désactivée')
find_attestation_card(with_nested_selector: ".fr-badge")
expect(page).not_to have_content("Nouvel éditeur dattestation")
# now process to enable attestation
find_attestation_card.click
fill_in "Titre de lattestation", with: 'BOOM'
fill_in "Contenu de lattestation", with: 'BOOM'
find('.toggle-switch-control').click
click_on 'Enregistrer'
page.find(".alert-success", text: "Le modèle de lattestation a bien été enregistré")
# check attestation
visit admin_procedure_path(procedure)
expect(page).to have_content('Activée')
find_attestation_card(with_nested_selector: ".fr-badge--success")
# publish procedure
# click CTA for publication screen
click_on("Publier")
# validate publication
within('form') { click_on 'Publier' }
click_on("Revenir à la page de la démarche")
# now process to disable attestation
find_attestation_card.click
find('.toggle-switch-control').click
click_on 'Enregistrer'
page.find(".alert-success", text: "Le modèle de lattestation a bien été modifié")
# check attestation is now disabled
visit admin_procedure_path(procedure)
expect(page).to have_content('Désactivée')
find_attestation_card(with_nested_selector: ".fr-badge")
end
end
context 'Update attestation v2' do
let(:procedure) do
create(:procedure, :published,
administrateurs: [administrateur],
libelle: 'libellé de la procédure',
path: 'libelle-de-la-procedure')
end
before do
Flipper.enable(:attestation_v2)
response = Typhoeus::Response.new(code: 200, body: 'Hello world')
Typhoeus.stub(WEASYPRINT_URL).and_return(response)
end
scenario do
visit admin_procedure_path(procedure)
find_attestation_card(with_nested_selector: ".fr-badge")
find_attestation_card.click
within(".fr-alert", text: /Nouvel éditeur/) do
find("a").click
end
expect(procedure.reload.attestation_templates.v2).to be_empty
expect(page).to have_css("label", text: "Logo additionnel")
fill_in "Intitulé de votre institution", with: "System Test"
fill_in "Intitulé de la direction", with: "The boss"
attestation = nil
wait_until {
attestation = procedure.reload.attestation_templates.v2.draft.first
attestation.present?
}
expect(page).to have_content("Attestation enregistrée")
expect(attestation.label_logo).to eq("System Test")
expect(attestation.activated?).to be_truthy
click_on "date de décision"
# TODO find a way to fill in tiptap
attach_file('Tampon ou signature', Rails.root + 'spec/fixtures/files/white.png')
wait_until { attestation.reload.signature.attached? }
fill_in "Contenu du pied de page", with: "Footer"
wait_until {
body = JSON.parse(attestation.reload.tiptap_body)
first_content = body.dig("content").first&.dig("content")&.first&.dig("content")&.first&.dig("content")
first_content == [
{ "type" => "mention", "attrs" => { "id" => "dossier_processed_at", "label" => "date de décision" } }, # added by click above
{ "type" => "text", "text" => " " },
{ "type" => "mention", "attrs" => { "id" => "dossier_service_name", "label" => "nom du service" } } # defaut initial content
]
}
find("label", text: /à la charte de létat/).click
expect(page).not_to have_css("label", text: "Logo additionnel", visible: true)
expect(page).not_to have_css("label", text: "Intitulé du logo", visible: true)
attach_file('Logo', Rails.root + 'spec/fixtures/files/black.png')
wait_until {
attestation.reload.logo.attached? && attestation.signature.attached? && !attestation.official_layout?
}
fill_in "Contenu du pied de page", with: ["line1", "line2", "line3", "line4"].join("\n")
expect(page).to have_field("Contenu du pied de page", with: "line1\nline2\nline3line4")
click_on "Publier"
expect(attestation.reload).to be_published
expect(page).to have_text("Lattestation a été publiée")
fill_in "Intitulé de la direction", with: "plop"
click_on "Publier les modifications"
expect(procedure.reload.attestation_template.label_direction).to eq("plop")
expect(page).to have_text(/La nouvelle version de lattestation/)
end
context "tag in error" do
before do
tdc = procedure.active_revision.add_type_de_champ(type_champ: :integer_number, libelle: 'age')
procedure.publish_revision!
attestation = procedure.build_attestation_template(version: 2, json_body: AttestationTemplate::TIPTAP_BODY_DEFAULT, label_logo: "test")
attestation.json_body["content"] << { type: :mention, attrs: { id: "tdc#{tdc.stable_id}", label: tdc.libelle } }
attestation.save!
procedure.draft_revision.remove_type_de_champ(tdc)
end
scenario do
visit edit_admin_procedure_attestation_template_v2_path(procedure)
expect(page).to have_content("Le champ « Contenu de lattestation » contient la balise \"age\"")
click_on "date de décision"
expect(page).to have_content("Attestation en erreur")
expect(page).to have_content("Le champ « Contenu de lattestation » contient la balise \"age\"")
page.execute_script("document.getElementById('attestation_template_tiptap_body').type = 'text'")
fill_in "attestation_template[tiptap_body]", with: AttestationTemplate::TIPTAP_BODY_DEFAULT.to_json
expect(page).to have_content("Attestation enregistrée")
expect(page).not_to have_content("Attestation en erreur")
expect(page).not_to have_content("Le champ « Contenu de lattestation » contient la balise \"age\"")
end
end
end
end