From c19b65358100740828a8907df904b53163110711 Mon Sep 17 00:00:00 2001 From: clemkeirua Date: Thu, 24 Sep 2020 14:24:53 +0200 Subject: [PATCH] higher level length sanitization for worksheet length --- app/models/champs/repetition_champ.rb | 2 +- app/services/procedure_export_service.rb | 5 ++++- spec/services/procedure_export_service_spec.rb | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/models/champs/repetition_champ.rb b/app/models/champs/repetition_champ.rb index d95c917ff..3d53a48ad 100644 --- a/app/models/champs/repetition_champ.rb +++ b/app/models/champs/repetition_champ.rb @@ -53,7 +53,7 @@ class Champs::RepetitionChamp < Champ def libelle_for_export str = "(#{stable_id}) #{libelle}" # /\*?[] are invalid Excel worksheet characters - ActiveStorage::Filename.new(str.delete('[]*?')).sanitized.truncate(30) + ActiveStorage::Filename.new(str.delete('[]*?')).sanitized end class Row < Hashie::Dash diff --git a/app/services/procedure_export_service.rb b/app/services/procedure_export_service.rb index 4e7a79778..66a325a66 100644 --- a/app/services/procedure_export_service.rb +++ b/app/services/procedure_export_service.rb @@ -62,7 +62,7 @@ class ProcedureExportService } def options_for(table, format) - case table + options = case table when :dossiers { instances: dossiers.to_a, sheet_name: 'Dossiers', spreadsheet_columns: :"spreadsheet_columns_#{format}" } when :etablissements @@ -72,5 +72,8 @@ class ProcedureExportService when Array { instances: table.last, sheet_name: table.first } end.merge(DEFAULT_STYLES) + + options[:sheet_name] = options[:sheet_name].truncate(30) + options end end diff --git a/spec/services/procedure_export_service_spec.rb b/spec/services/procedure_export_service_spec.rb index 34f140986..741f9bdd1 100644 --- a/spec/services/procedure_export_service_spec.rb +++ b/spec/services/procedure_export_service_spec.rb @@ -356,6 +356,21 @@ describe ProcedureExportService do end end + context 'with long libelle' do + before do + procedure.types_de_champ.each do |c| + c.update!(libelle: "#{c.id} - Quam rem nam maiores numquam dolorem nesciunt. Cum et possimus et aut. Fugit voluptas qui qui.") + end + champ_repetition.champs.each do |c| + c.type_de_champ.update!(libelle: "#{c.id} - Quam rem nam maiores numquam dolorem nesciunt. Cum et possimus et aut. Fugit voluptas qui qui.") + end + end + + it 'should have valid sheet name' do + expect { subject }.not_to raise_error(ArgumentError) + end + end + context 'with non unique labels' do let(:dossier) { create(:dossier, :en_instruction, :with_all_champs, :with_individual, procedure: procedure) } let(:champ_repetition) { dossier.champs.find { |champ| champ.type_champ == 'repetition' } }