188 lines
6.2 KiB
Ruby
188 lines
6.2 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe ProcedureExportV2Service do
|
|
describe 'to_data' do
|
|
let(:procedure) { create(:procedure, :published, :with_all_champs) }
|
|
subject do
|
|
Tempfile.create do |f|
|
|
f << ProcedureExportV2Service.new(procedure).to_xlsx
|
|
f.rewind
|
|
SimpleXlsxReader.open(f.path)
|
|
end
|
|
end
|
|
|
|
let(:dossiers_sheet) { subject.sheets.first }
|
|
let(:etablissements_sheet) { subject.sheets.second }
|
|
let(:avis_sheet) { subject.sheets.third }
|
|
let(:repetition_sheet) { subject.sheets.fourth }
|
|
|
|
before do
|
|
# change one tdc place to check if the header is ordered
|
|
tdc_first = procedure.types_de_champ.first
|
|
tdc_last = procedure.types_de_champ.last
|
|
|
|
tdc_first.update(order_place: tdc_last.order_place + 1)
|
|
procedure.reload
|
|
end
|
|
|
|
context 'dossiers' do
|
|
it 'should have sheets' do
|
|
expect(subject.sheets.map(&:name)).to eq(['Dossiers', 'Etablissements', 'Avis'])
|
|
end
|
|
end
|
|
|
|
context 'with dossier' do
|
|
let!(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :for_individual, procedure: procedure) }
|
|
|
|
it 'should have headers' do
|
|
expect(dossiers_sheet.headers).to eq([
|
|
"ID",
|
|
"Email",
|
|
"Civilité",
|
|
"Nom",
|
|
"Prénom",
|
|
"Date de naissance",
|
|
"Archivé",
|
|
"État du dossier",
|
|
"Dernière mise à jour le",
|
|
"Passé en construction le",
|
|
"Passé en instruction le",
|
|
"Traité le",
|
|
"Motivation de la décision",
|
|
"Instructeurs",
|
|
"textarea",
|
|
"date",
|
|
"datetime",
|
|
"number",
|
|
"decimal_number",
|
|
"integer_number",
|
|
"checkbox",
|
|
"civilite",
|
|
"email",
|
|
"phone",
|
|
"address",
|
|
"yes_no",
|
|
"simple_drop_down_list",
|
|
"multiple_drop_down_list",
|
|
"linked_drop_down_list",
|
|
"pays",
|
|
"regions",
|
|
"departements",
|
|
"engagement",
|
|
"dossier_link",
|
|
"piece_justificative",
|
|
"siret",
|
|
"carte",
|
|
"text"
|
|
])
|
|
end
|
|
|
|
it 'should have data' do
|
|
expect(dossiers_sheet.data.size).to eq(1)
|
|
expect(etablissements_sheet.data.size).to eq(1)
|
|
|
|
# SimpleXlsxReader is transforming datetimes in utc... It is only used in test so we just hack around.
|
|
offset = dossier.en_construction_at.utc_offset
|
|
en_construction_at = Time.zone.at(dossiers_sheet.data[0][9] - offset.seconds)
|
|
en_instruction_at = Time.zone.at(dossiers_sheet.data[0][10] - offset.seconds)
|
|
expect(en_construction_at).to eq(dossier.en_construction_at.round)
|
|
expect(en_instruction_at).to eq(dossier.en_instruction_at.round)
|
|
end
|
|
end
|
|
|
|
context 'with etablissement' do
|
|
let!(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :with_entreprise, procedure: procedure) }
|
|
|
|
it 'should have headers' do
|
|
expect(etablissements_sheet.headers).to eq([
|
|
"Dossier ID",
|
|
"Champ",
|
|
"Établissement SIRET",
|
|
"Établissement siège social",
|
|
"Établissement NAF",
|
|
"Établissement libellé NAF",
|
|
"Établissement Adresse",
|
|
"Établissement numero voie",
|
|
"Établissement type voie",
|
|
"Établissement nom voie",
|
|
"Établissement complément adresse",
|
|
"Établissement code postal",
|
|
"Établissement localité",
|
|
"Établissement code INSEE localité",
|
|
"Entreprise SIREN",
|
|
"Entreprise capital social",
|
|
"Entreprise numero TVA intracommunautaire",
|
|
"Entreprise forme juridique",
|
|
"Entreprise forme juridique code",
|
|
"Entreprise nom commercial",
|
|
"Entreprise raison sociale",
|
|
"Entreprise SIRET siège social",
|
|
"Entreprise code effectif entreprise",
|
|
"Entreprise date de création",
|
|
"Entreprise nom",
|
|
"Entreprise prénom",
|
|
"Association RNA",
|
|
"Association titre",
|
|
"Association objet",
|
|
"Association date de création",
|
|
"Association date de déclaration",
|
|
"Association date de publication"
|
|
])
|
|
end
|
|
|
|
it 'should have data' do
|
|
expect(etablissements_sheet.data.size).to eq(2)
|
|
end
|
|
end
|
|
|
|
context 'with avis' do
|
|
let!(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :for_individual, procedure: procedure) }
|
|
let!(:avis) { create(:avis, :with_answer, dossier: dossier) }
|
|
|
|
it 'should have headers' do
|
|
expect(avis_sheet.headers).to eq([
|
|
"Dossier ID",
|
|
"Question / Introduction",
|
|
"Réponse",
|
|
"Créé le",
|
|
"Répondu le"
|
|
])
|
|
end
|
|
|
|
it 'should have data' do
|
|
expect(avis_sheet.data.size).to eq(1)
|
|
end
|
|
end
|
|
|
|
context 'with repetitions' do
|
|
let!(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :for_individual, procedure: procedure) }
|
|
let(:champ_repetition) { dossier.champs.find { |champ| champ.type_champ == 'repetition' } }
|
|
let(:type_de_champ_text) { create(:type_de_champ_text, order_place: 0, parent: champ_repetition.type_de_champ) }
|
|
let(:type_de_champ_number) { create(:type_de_champ_number, order_place: 1, parent: champ_repetition.type_de_champ) }
|
|
|
|
before do
|
|
create(:champ_text, row: 0, type_de_champ: type_de_champ_text, parent: champ_repetition)
|
|
create(:champ_number, row: 0, type_de_champ: type_de_champ_number, parent: champ_repetition)
|
|
create(:champ_text, row: 1, type_de_champ: type_de_champ_text, parent: champ_repetition)
|
|
create(:champ_number, row: 1, type_de_champ: type_de_champ_number, parent: champ_repetition)
|
|
end
|
|
|
|
it 'should have sheets' do
|
|
expect(subject.sheets.map(&:name)).to eq(['Dossiers', 'Etablissements', 'Avis', champ_repetition.libelle])
|
|
end
|
|
|
|
it 'should have headers' do
|
|
expect(repetition_sheet.headers).to eq([
|
|
"Dossier ID",
|
|
"Ligne",
|
|
type_de_champ_text.libelle,
|
|
type_de_champ_number.libelle
|
|
])
|
|
end
|
|
|
|
it 'should have data' do
|
|
expect(repetition_sheet.data.size).to eq(2)
|
|
end
|
|
end
|
|
end
|
|
end
|