2024-10-25 14:50:51 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
describe ExportTemplate do
|
|
|
|
let(:groupe_instructeur) { create(:groupe_instructeur, procedure:) }
|
|
|
|
let(:export_template) { build(:export_template, kind: 'csv', groupe_instructeur:) }
|
|
|
|
let(:tabular_export_template) { build(:tabular_export_template, groupe_instructeur:) }
|
|
|
|
let(:procedure) { create(:procedure_with_dossiers, :published, types_de_champ_public:, for_individual:) }
|
|
|
|
let(:for_individual) { true }
|
|
|
|
let(:types_de_champ_public) do
|
|
|
|
[
|
|
|
|
{ type: :text, libelle: "Ca va ?", mandatory: true, stable_id: 1 },
|
|
|
|
{ type: :communes, libelle: "Commune", mandatory: true, stable_id: 17 },
|
|
|
|
{ type: :siret, libelle: 'siret', stable_id: 20 },
|
|
|
|
{ type: :repetition, mandatory: true, stable_id: 7, libelle: "Champ répétable", children: [{ type: 'text', libelle: 'Qqchose à rajouter?', stable_id: 8 }] }
|
|
|
|
]
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#exported_columns=' do
|
|
|
|
it 'is assignable/readable with ExportedColumn object' do
|
|
|
|
expect do
|
|
|
|
export_template.exported_columns = [
|
|
|
|
ExportedColumn.new(libelle: 'Ça va ?', column: procedure.find_column(label: "Ca va ?"))
|
|
|
|
]
|
|
|
|
export_template.save!
|
|
|
|
export_template.exported_columns
|
|
|
|
end.not_to raise_error
|
|
|
|
end
|
|
|
|
it 'create exported_column' do
|
|
|
|
export_template.exported_columns = [
|
|
|
|
ExportedColumn.new(libelle: 'Ça va ?', column: procedure.find_column(label: "Ca va ?"))
|
|
|
|
]
|
|
|
|
export_template.save!
|
|
|
|
expect(export_template.exported_columns.size).to eq 1
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when there is a previous revision with a renamed tdc' do
|
|
|
|
context 'with already column in export template' do
|
|
|
|
let(:previous_tdc) { procedure.published_revision.types_de_champ_public.find_by(stable_id: 1) }
|
|
|
|
let(:changed_tdc) { { libelle: "Ca roule ?" } }
|
|
|
|
|
|
|
|
context 'with already column in export template' do
|
|
|
|
before do
|
|
|
|
export_template.exported_columns = [
|
|
|
|
ExportedColumn.new(libelle: 'Ça va ?', column: procedure.find_column(label: "Ca va ?"))
|
|
|
|
]
|
|
|
|
export_template.save!
|
|
|
|
|
|
|
|
type_de_champ = procedure.draft_revision.find_and_ensure_exclusive_use(previous_tdc.stable_id)
|
|
|
|
type_de_champ.update(changed_tdc)
|
|
|
|
procedure.publish_revision!
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'update columns with original libelle for champs with new revision' do
|
|
|
|
Current.procedure_columns = {}
|
|
|
|
procedure.reload
|
|
|
|
export_template.reload
|
|
|
|
expect(export_template.exported_columns.find { _1.column.stable_id.to_s == "1" }.libelle).to eq('Ça va ?')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
context 'without columns in export template' do
|
|
|
|
let(:previous_tdc) { procedure.published_revision.types_de_champ_public.find_by(stable_id: 1) }
|
|
|
|
let(:changed_tdc) { { libelle: "Ca roule ?" } }
|
|
|
|
|
|
|
|
before do
|
|
|
|
type_de_champ = procedure.draft_revision.find_and_ensure_exclusive_use(previous_tdc.stable_id)
|
|
|
|
type_de_champ.update(changed_tdc)
|
|
|
|
procedure.publish_revision!
|
|
|
|
|
|
|
|
export_template.exported_columns = [
|
|
|
|
ExportedColumn.new(libelle: 'Ça roule ?', column: procedure.find_column(label: "Ca roule ?"))
|
|
|
|
]
|
|
|
|
export_template.save!
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'update columns with original libelle for champs with new revision' do
|
|
|
|
Current.procedure_columns = {}
|
|
|
|
procedure.reload
|
|
|
|
export_template.reload
|
|
|
|
expect(export_template.exported_columns.find { _1.column.stable_id.to_s == "1" }.libelle).to eq('Ça roule ?')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2024-11-04 16:43:39 +01:00
|
|
|
|
|
|
|
describe 'dossier_exported_columns' do
|
|
|
|
context 'when exported_columns is empty' do
|
|
|
|
it 'returns an empty array' do
|
|
|
|
expect(export_template.dossier_exported_columns).to eq([])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when exported_columns is not empty' do
|
|
|
|
before do
|
|
|
|
export_template.exported_columns = [
|
|
|
|
ExportedColumn.new(libelle: 'Colonne usager', column: procedure.find_column(label: "Email")),
|
|
|
|
ExportedColumn.new(libelle: 'Ça va ?', column: procedure.find_column(label: "Ca va ?"))
|
|
|
|
]
|
|
|
|
end
|
|
|
|
it 'returns all columns except tdc columns' do
|
|
|
|
expect(export_template.dossier_exported_columns.size).to eq(1) # exclude tdc
|
|
|
|
expect(export_template.dossier_exported_columns.first.libelle).to eq("Colonne usager")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'columns_for_stable_id' do
|
|
|
|
before do
|
|
|
|
export_template.exported_columns = procedure.published_revision.types_de_champ.first.columns(procedure: procedure).map do |column|
|
|
|
|
ExportedColumn.new(libelle: column.label, column:)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
context 'when procedure has a TypeDeChamp::Commune' do
|
|
|
|
let(:types_de_champ_public) do
|
|
|
|
[
|
|
|
|
{ type: :communes, libelle: "Commune", mandatory: true, stable_id: 17 }
|
|
|
|
]
|
|
|
|
end
|
|
|
|
it 'is able to resolve stable_id' do
|
|
|
|
expect(export_template.columns_for_stable_id(17).size).to eq(3)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
context 'when procedure has a TypeDeChamp::Siret' do
|
|
|
|
let(:types_de_champ_public) do
|
|
|
|
[
|
2024-11-20 16:35:42 +01:00
|
|
|
{ type: :siret, libelle: 'SIRET', stable_id: 20 }
|
2024-11-04 16:43:39 +01:00
|
|
|
]
|
|
|
|
end
|
|
|
|
it 'is able to resolve stable_id' do
|
2024-11-20 16:35:42 +01:00
|
|
|
columns = export_template.columns_for_stable_id(20)
|
|
|
|
|
|
|
|
expect(columns.find { _1.libelle == "SIRET" }).to be_present
|
|
|
|
|
|
|
|
%w[
|
|
|
|
$.entreprise_nom_commercial
|
|
|
|
$.entreprise_raison_sociale
|
|
|
|
].each do |jsonpath|
|
|
|
|
expect(columns.find { _1.column.respond_to?(:jsonpath) && _1.column.jsonpath == jsonpath }).to be_present
|
|
|
|
end
|
2024-11-04 16:43:39 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
context 'when procedure has a TypeDeChamp::Text' do
|
|
|
|
let(:types_de_champ_public) do
|
|
|
|
[
|
|
|
|
{ type: :text, libelle: "Text", mandatory: true, stable_id: 15 }
|
|
|
|
]
|
|
|
|
end
|
|
|
|
it 'is able to resolve stable_id' do
|
|
|
|
expect(export_template.columns_for_stable_id(15).size).to eq(1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2024-10-25 14:50:51 +02:00
|
|
|
end
|