demarches-normaliennes/spec/models/export_template_tabular_spec.rb

153 lines
5.9 KiB
Ruby

# 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
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
[
{ type: :siret, libelle: 'SIRET', stable_id: 20 }
]
end
it 'is able to resolve stable_id' do
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
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
end