2024-04-29 00:17:15 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2023-03-06 15:51:08 +01:00
|
|
|
describe 'shared/dossiers/champs', type: :view do
|
2019-08-06 11:02:54 +02:00
|
|
|
let(:instructeur) { create(:instructeur) }
|
2017-12-05 16:07:05 +01:00
|
|
|
let(:demande_seen_at) { nil }
|
2023-06-28 09:55:57 +02:00
|
|
|
let(:profile) { "instructeur" }
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:procedure) { create(:procedure, types_de_champ_public:) }
|
|
|
|
let(:dossier) { create(:dossier, :with_populated_champs, procedure:) }
|
|
|
|
let(:types_de_champ) { dossier.revision.types_de_champ_public }
|
2017-12-12 16:44:30 +01:00
|
|
|
|
|
|
|
before do
|
2017-12-05 16:07:05 +01:00
|
|
|
view.extend DossierHelper
|
2017-12-12 16:44:30 +01:00
|
|
|
view.extend DossierLinkHelper
|
2023-06-28 09:55:57 +02:00
|
|
|
|
|
|
|
if profile == "instructeur"
|
|
|
|
allow(view).to receive(:current_instructeur).and_return(instructeur)
|
|
|
|
end
|
2017-12-12 16:44:30 +01:00
|
|
|
end
|
|
|
|
|
2024-03-12 14:28:19 +01:00
|
|
|
subject { render ViewableChamp::SectionComponent.new(types_de_champ:, dossier:, demande_seen_at:, profile:) }
|
2017-07-11 16:50:29 +02:00
|
|
|
|
2017-11-21 17:20:52 +01:00
|
|
|
context "there are some champs" do
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:types_de_champ_public) { [{ type: :checkbox }, { type: :header_section }, { type: :explication }, { type: :dossier_link }, { type: :textarea }, { type: :rna }] }
|
|
|
|
let(:champ1) { dossier.champs[0] }
|
|
|
|
let(:champ2) { dossier.champs[1] }
|
|
|
|
let(:champ3) { dossier.champs[2] }
|
|
|
|
let(:champ4) { dossier.champs[3] }
|
|
|
|
let(:champ5) { dossier.champs[4] }
|
|
|
|
let(:champ6) { dossier.champs[5] }
|
|
|
|
|
|
|
|
before do
|
|
|
|
champ1.update(value: 'true')
|
|
|
|
champ4.update(value: dossier.id)
|
|
|
|
champ5.update(value: "Some long text in a textarea.")
|
|
|
|
champ6.update(value: "W173847273")
|
|
|
|
end
|
2017-07-11 16:50:29 +02:00
|
|
|
|
2019-01-09 11:50:19 +01:00
|
|
|
it "renders titles and values of champs" do
|
|
|
|
expect(subject).to include(champ1.libelle)
|
2023-01-05 12:18:27 +01:00
|
|
|
expect(subject).to include('Oui')
|
2017-12-12 16:44:30 +01:00
|
|
|
|
2019-01-09 11:50:19 +01:00
|
|
|
expect(subject).to have_css(".header-section")
|
|
|
|
expect(subject).to include(champ2.libelle)
|
2017-07-11 16:50:29 +02:00
|
|
|
|
2019-01-09 11:50:19 +01:00
|
|
|
expect(subject).to include(dossier.text_summary)
|
2017-10-03 15:08:39 +02:00
|
|
|
|
2019-01-09 11:50:19 +01:00
|
|
|
expect(subject).to include(champ5.libelle)
|
2022-09-22 17:14:05 +02:00
|
|
|
expect(subject).to include(champ5.value)
|
|
|
|
expect(subject).to include(champ6.libelle)
|
|
|
|
expect(subject).to include(champ6.value)
|
2019-01-09 11:50:19 +01:00
|
|
|
end
|
2019-01-09 11:49:52 +01:00
|
|
|
|
2019-01-09 11:50:19 +01:00
|
|
|
it "doesn't render explication champs" do
|
|
|
|
expect(subject).not_to include(champ3.libelle)
|
|
|
|
end
|
2023-11-28 17:33:43 +01:00
|
|
|
end
|
2019-09-26 17:40:52 +02:00
|
|
|
|
2023-11-28 17:33:43 +01:00
|
|
|
context "with auto-link" do
|
|
|
|
let(:types_de_champ_public) { [{ type: :text }, { type: :textarea }] }
|
|
|
|
let(:champ1) { dossier.champs[0] }
|
|
|
|
let(:champ2) { dossier.champs[1] }
|
2019-09-26 17:40:52 +02:00
|
|
|
|
2023-11-28 17:33:43 +01:00
|
|
|
before do
|
|
|
|
champ1.update(value: 'https://github.com/tchak')
|
|
|
|
champ2.update(value: "https://github.com/LeSim")
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:link1) { '<a href="https://github.com/tchak" target="_blank" rel="noopener">https://github.com/tchak</a>' }
|
|
|
|
let(:link2) { '<a href="https://github.com/LeSim" target="_blank" rel="noopener">https://github.com/LeSim</a>' }
|
|
|
|
|
|
|
|
it "render links" do
|
|
|
|
expect(subject).to include(link1)
|
|
|
|
expect(subject).to include(link2)
|
2019-09-26 17:40:52 +02:00
|
|
|
end
|
2017-12-12 16:44:30 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
context "with a dossier champ, but we are not authorized to acces the dossier" do
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:types_de_champ_public) { [{ type: :dossier_link }] }
|
|
|
|
|
|
|
|
before do
|
|
|
|
dossier.champs.first.update(value: dossier.id)
|
|
|
|
end
|
2017-11-21 17:20:52 +01:00
|
|
|
|
2017-12-12 16:44:30 +01:00
|
|
|
it { is_expected.not_to have_link("Dossier nº #{dossier.id}") }
|
|
|
|
it { is_expected.to include("Dossier nº #{dossier.id}") }
|
|
|
|
it { is_expected.to include(dossier.text_summary) }
|
2017-11-21 17:20:52 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
context "with a dossier_link champ but without value" do
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:types_de_champ_public) { [{ type: :dossier_link }] }
|
|
|
|
|
|
|
|
before do
|
|
|
|
dossier.champs.first.update(value: nil)
|
|
|
|
end
|
2017-11-21 17:20:52 +01:00
|
|
|
|
2023-06-29 07:16:39 +02:00
|
|
|
it { is_expected.not_to include("non saisi") }
|
2023-06-28 09:55:57 +02:00
|
|
|
|
|
|
|
context 'when profile is usager' do
|
|
|
|
let(:profile) { "usager" }
|
|
|
|
it { is_expected.to include("non saisi (facultatif)") }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with a piece justificative without value" do
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:types_de_champ_public) { [{ type: :piece_justificative }] }
|
|
|
|
|
|
|
|
before do
|
|
|
|
dossier.champs.first.piece_justificative_file.purge
|
|
|
|
end
|
2023-06-28 09:55:57 +02:00
|
|
|
|
2023-06-29 07:16:39 +02:00
|
|
|
it { is_expected.not_to include("pièce justificative non saisie") }
|
2023-06-28 09:55:57 +02:00
|
|
|
|
|
|
|
context 'when profile is usager' do
|
|
|
|
let(:profile) { "usager" }
|
|
|
|
it { is_expected.to include("pièce justificative non saisie (facultative)") }
|
|
|
|
end
|
2017-07-11 16:50:29 +02:00
|
|
|
end
|
2017-12-05 16:07:05 +01:00
|
|
|
|
|
|
|
context "with seen_at" do
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:types_de_champ_public) { [{ type: :checkbox }] }
|
|
|
|
let(:dossier) { create(:dossier, :en_construction, :with_populated_champs, procedure:, depose_at: 1.day.ago) }
|
|
|
|
let(:champ1) { dossier.champs[0] }
|
2017-12-05 16:07:05 +01:00
|
|
|
|
|
|
|
context "with a demande_seen_at after champ updated_at" do
|
|
|
|
let(:demande_seen_at) { champ1.updated_at + 1.hour }
|
|
|
|
|
2023-07-03 16:50:07 +02:00
|
|
|
it { is_expected.not_to have_css(".fr-badge--new") }
|
|
|
|
end
|
|
|
|
|
|
|
|
context "with champ updated_at at depose_at" do
|
2023-11-28 17:33:43 +01:00
|
|
|
let(:champ1) { dossier.champs[0] }
|
2023-07-03 16:50:07 +02:00
|
|
|
let(:demande_seen_at) { champ1.updated_at - 1.hour }
|
|
|
|
|
2023-11-28 17:33:43 +01:00
|
|
|
before do
|
|
|
|
champ1.update(value: 'false', updated_at: dossier.depose_at)
|
|
|
|
end
|
|
|
|
|
2023-07-03 16:50:07 +02:00
|
|
|
it { is_expected.not_to have_css(".fr-badge--new") }
|
2017-12-05 16:07:05 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
context "with a demande_seen_at after champ updated_at" do
|
|
|
|
let(:demande_seen_at) { champ1.updated_at - 1.hour }
|
|
|
|
|
2023-07-03 16:50:07 +02:00
|
|
|
it { is_expected.to have_css(".fr-badge--new") }
|
2017-12-05 16:07:05 +01:00
|
|
|
end
|
|
|
|
end
|
2017-07-11 16:50:29 +02:00
|
|
|
end
|