diff --git a/app/admin/questionnaires.rb b/app/admin/questionnaires.rb index bf0660623..18decbd61 100644 --- a/app/admin/questionnaires.rb +++ b/app/admin/questionnaires.rb @@ -3,6 +3,8 @@ require 'zip' ActiveAdmin.register Questionnaire do + include Fichier + menu parent: 'Parcours', if: proc { can? :manage, Compte } permit_params :libelle, :nom_technique, @@ -59,7 +61,9 @@ def export_questions compressed_filestream = generate_zip_file(questionnaire.questions_par_type) send_data compressed_filestream.read, - filename: "questionnaire_#{questionnaire.id}_export.zip", + filename: nom_fichier_horodate( + "questionnaire_#{questionnaire.id}_export", 'zip' + ), type: 'application/zip' end @@ -71,7 +75,7 @@ def generate_zip_file(questions_par_type) export = ImportExport::Questions::ImportExportDonnees.new(questions: questions, type: type).exporte_donnees - zip.put_next_entry("#{type}_questions_export.xls") + zip.put_next_entry(export[:filename]) zip.write export[:xls] end end.tap(&:rewind) diff --git a/app/models/concerns/fichier.rb b/app/models/concerns/fichier.rb new file mode 100644 index 000000000..44408fc43 --- /dev/null +++ b/app/models/concerns/fichier.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module Fichier + extend ActiveSupport::Concern + def nom_fichier_horodate(titre, extension) + date = DateTime.current.strftime('%Y%m%d%H%M%S') + "#{date}-#{titre}.#{extension}" + end +end diff --git a/app/models/import_export/export_xls.rb b/app/models/import_export/export_xls.rb index 3cb874636..b6a462724 100644 --- a/app/models/import_export/export_xls.rb +++ b/app/models/import_export/export_xls.rb @@ -16,11 +16,6 @@ def content_type_xls 'application/vnd.ms-excel' end - def genere_fichier(titre) - date = DateTime.current.strftime('%Y%m%d') - "#{date}-#{titre}.xls" - end - def retourne_le_contenu_du_xls file_contents = StringIO.new @export.workbook.write file_contents diff --git a/app/models/import_export/questions/export.rb b/app/models/import_export/questions/export.rb index ea825f5e0..389475492 100644 --- a/app/models/import_export/questions/export.rb +++ b/app/models/import_export/questions/export.rb @@ -3,6 +3,8 @@ module ImportExport module Questions class Export < ::ImportExport::ExportXls + include Fichier + def initialize(questions, headers) super() @questions = questions @@ -19,7 +21,7 @@ def to_xls end def nom_du_fichier(type) - genere_fichier(type) + nom_fichier_horodate(type, 'xls') end private diff --git a/app/models/import_export/questions/export/question_clic_dans_image.rb b/app/models/import_export/questions/export/question_clic_dans_image.rb index cb8aae066..08ce1a479 100644 --- a/app/models/import_export/questions/export/question_clic_dans_image.rb +++ b/app/models/import_export/questions/export/question_clic_dans_image.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Export - class QuestionClicDansImage < ImportExport::Questions::Export::QuestionAvecModaliteReponse + class QuestionClicDansImage < ImportExport::Questions::Export::QuestionTest private def remplis_champs diff --git a/app/models/import_export/questions/export/question_clic_dans_texte.rb b/app/models/import_export/questions/export/question_clic_dans_texte.rb index ddde74a0c..8dedf3a7c 100644 --- a/app/models/import_export/questions/export/question_clic_dans_texte.rb +++ b/app/models/import_export/questions/export/question_clic_dans_texte.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Export - class QuestionClicDansTexte < ImportExport::Questions::Export::QuestionAvecModaliteReponse + class QuestionClicDansTexte < ImportExport::Questions::Export::QuestionTest private def remplis_champs diff --git a/app/models/import_export/questions/export/question_glisser_deposer.rb b/app/models/import_export/questions/export/question_glisser_deposer.rb index 120c5a54c..be922ac7f 100644 --- a/app/models/import_export/questions/export/question_glisser_deposer.rb +++ b/app/models/import_export/questions/export/question_glisser_deposer.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Export - class QuestionGlisserDeposer < ImportExport::Questions::Export::QuestionAvecModaliteReponse + class QuestionGlisserDeposer < ImportExport::Questions::Export::QuestionTest private def remplis_champs diff --git a/app/models/import_export/questions/export/question_qcm.rb b/app/models/import_export/questions/export/question_qcm.rb index 256bf0a94..52426010c 100644 --- a/app/models/import_export/questions/export/question_qcm.rb +++ b/app/models/import_export/questions/export/question_qcm.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Export - class QuestionQcm < ImportExport::Questions::Export::QuestionAvecModaliteReponse + class QuestionQcm < ImportExport::Questions::Export::QuestionTest private def remplis_champs diff --git a/app/models/import_export/questions/export/question_saisie.rb b/app/models/import_export/questions/export/question_saisie.rb index 24e9abc0f..12bc6441b 100644 --- a/app/models/import_export/questions/export/question_saisie.rb +++ b/app/models/import_export/questions/export/question_saisie.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Export - class QuestionSaisie < ImportExport::Questions::Export::QuestionAvecModaliteReponse + class QuestionSaisie < ImportExport::Questions::Export::QuestionTest private def remplis_champs diff --git a/app/models/import_export/questions/export/question_avec_modalite_reponse.rb b/app/models/import_export/questions/export/question_test.rb similarity index 81% rename from app/models/import_export/questions/export/question_avec_modalite_reponse.rb rename to app/models/import_export/questions/export/question_test.rb index 886035080..c2d59ac24 100644 --- a/app/models/import_export/questions/export/question_avec_modalite_reponse.rb +++ b/app/models/import_export/questions/export/question_test.rb @@ -3,11 +3,12 @@ module ImportExport module Questions class Export - class QuestionAvecModaliteReponse < ImportExport::Questions::Export + class QuestionTest < ImportExport::Questions::Export private def remplis_champs col = super + @onglet.set_valeur(@ligne, col += 1, @question.metacompetence) @onglet.set_valeur(@ligne, col += 1, @question.transcription_modalite_reponse&.ecrit) @onglet.set_valeur(@ligne, col += 1, @question.transcription_modalite_reponse&.audio_url) @onglet.set_valeur(@ligne, col += 1, @question.description) diff --git a/app/models/import_export/questions/import/question_clic_dans_image.rb b/app/models/import_export/questions/import/question_clic_dans_image.rb index 2f401fd26..1a2ba5c93 100644 --- a/app/models/import_export/questions/import/question_clic_dans_image.rb +++ b/app/models/import_export/questions/import/question_clic_dans_image.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Import - class QuestionClicDansImage < ImportExport::Questions::Import::QuestionAvecModaliteReponse + class QuestionClicDansImage < ImportExport::Questions::Import::QuestionTest def initialize(headers_attendus) super('QuestionClicDansImage', headers_attendus) end diff --git a/app/models/import_export/questions/import/question_clic_dans_texte.rb b/app/models/import_export/questions/import/question_clic_dans_texte.rb index 256bfd91b..e18965c70 100644 --- a/app/models/import_export/questions/import/question_clic_dans_texte.rb +++ b/app/models/import_export/questions/import/question_clic_dans_texte.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Import - class QuestionClicDansTexte < ImportExport::Questions::Import::QuestionAvecModaliteReponse + class QuestionClicDansTexte < ImportExport::Questions::Import::QuestionTest def initialize(headers_attendus) super('QuestionClicDansTexte', headers_attendus) end diff --git a/app/models/import_export/questions/import/question_glisser_deposer.rb b/app/models/import_export/questions/import/question_glisser_deposer.rb index fc655f8db..2a3e982c6 100644 --- a/app/models/import_export/questions/import/question_glisser_deposer.rb +++ b/app/models/import_export/questions/import/question_glisser_deposer.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Import - class QuestionGlisserDeposer < ImportExport::Questions::Import::QuestionAvecModaliteReponse + class QuestionGlisserDeposer < ImportExport::Questions::Import::QuestionTest def initialize(headers_attendus) super('QuestionGlisserDeposer', headers_attendus) end diff --git a/app/models/import_export/questions/import/question_qcm.rb b/app/models/import_export/questions/import/question_qcm.rb index 281258fb4..9651d5c29 100644 --- a/app/models/import_export/questions/import/question_qcm.rb +++ b/app/models/import_export/questions/import/question_qcm.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Import - class QuestionQcm < ImportExport::Questions::Import::QuestionAvecModaliteReponse + class QuestionQcm < ImportExport::Questions::Import::QuestionTest def initialize(headers_attendus) super('QuestionQcm', headers_attendus) end diff --git a/app/models/import_export/questions/import/question_saisie.rb b/app/models/import_export/questions/import/question_saisie.rb index d66680c78..f4331cb2b 100644 --- a/app/models/import_export/questions/import/question_saisie.rb +++ b/app/models/import_export/questions/import/question_saisie.rb @@ -3,7 +3,7 @@ module ImportExport module Questions class Import - class QuestionSaisie < ImportExport::Questions::Import::QuestionAvecModaliteReponse + class QuestionSaisie < ImportExport::Questions::Import::QuestionTest def initialize(headers_attendus) super('QuestionSaisie', headers_attendus) end diff --git a/app/models/import_export/questions/import/question_avec_modalite_reponse.rb b/app/models/import_export/questions/import/question_test.rb similarity index 81% rename from app/models/import_export/questions/import/question_avec_modalite_reponse.rb rename to app/models/import_export/questions/import/question_test.rb index fb9ff406b..447ff338a 100644 --- a/app/models/import_export/questions/import/question_avec_modalite_reponse.rb +++ b/app/models/import_export/questions/import/question_test.rb @@ -3,9 +3,10 @@ module ImportExport module Questions class Import - class QuestionAvecModaliteReponse < ImportExport::Questions::Import + class QuestionTest < ImportExport::Questions::Import def cree_ou_actualise_question(cellules) question = super + question.update!(metacompetence: cellules.suivant) cree_transcription(question.id, :modalite_reponse, cellules.suivant, cellules.suivant, "#{cellules.cell(1)}_modalite_reponse") question.update!(description: cellules.suivant, diff --git a/app/models/import_export/questions/import_export_donnees.rb b/app/models/import_export/questions/import_export_donnees.rb index 9c944de47..8360d2a5c 100644 --- a/app/models/import_export/questions/import_export_donnees.rb +++ b/app/models/import_export/questions/import_export_donnees.rb @@ -9,17 +9,17 @@ class ImportExportDonnees HEADERS_QCM = %i[type_qcm].freeze HEADERS_SAISIE = %i[suffix_reponse reponse_placeholder type_saisie texte_a_trous].freeze HEADERS_COMMUN = %i[libelle nom_technique illustration intitule_ecrit intitule_audio].freeze - HEADERS_MODALITE_REPONSE = %i[consigne_ecrit consigne_audio description - demarrage_audio_modalite_reponse].freeze + HEADERS_QUESTION_TEST = %i[metacompetence consigne_ecrit consigne_audio description + demarrage_audio_modalite_reponse].freeze HEADERS_ATTENDUS = { QuestionClicDansImage::QUESTION_TYPE => - HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_CLIC_DANS_IMAGE, + HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_CLIC_DANS_IMAGE, QuestionClicDansTexte::QUESTION_TYPE => - HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_CLIC_DANS_TEXTE, + HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_CLIC_DANS_TEXTE, QuestionGlisserDeposer::QUESTION_TYPE => - HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_GLISSER_DEPOSER, - QuestionQcm::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_QCM, - QuestionSaisie::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_MODALITE_REPONSE + HEADERS_SAISIE, + HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_GLISSER_DEPOSER, + QuestionQcm::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_QCM, + QuestionSaisie::QUESTION_TYPE => HEADERS_COMMUN + HEADERS_QUESTION_TEST + HEADERS_SAISIE, QuestionSousConsigne::QUESTION_TYPE => HEADERS_COMMUN }.freeze IMPORTEURS = { diff --git a/app/models/question.rb b/app/models/question.rb index 73c8bd993..3ad15b6c5 100644 --- a/app/models/question.rb +++ b/app/models/question.rb @@ -1,6 +1,9 @@ # frozen_string_literal: true class Question < ApplicationRecord # rubocop:disable Metrics/ClassLength + CATEGORIE = %i[situation scolarite sante appareils].freeze + AUDIO_TYPES = %i[intitule modalite_reponse consigne].freeze + has_one_attached :illustration do |attachable| attachable.variant :defaut, resize_to_limit: [1080, 566], @@ -10,6 +13,7 @@ class Question < ApplicationRecord # rubocop:disable Metrics/ClassLength end enum :metacompetence, Metacompetence::METACOMPETENCES + enum :categorie, CATEGORIE.zip(CATEGORIE.map(&:to_s)).to_h, prefix: true attr_accessor :supprimer_illustration, :supprimer_audio_intitule, :supprimer_audio_modalite_reponse, :supprimer_audio_consigne @@ -42,8 +46,6 @@ class Question < ApplicationRecord # rubocop:disable Metrics/ClassLength accepts_nested_attributes_for :transcriptions, allow_destroy: true, reject_if: :reject_transcriptions - CATEGORIE = %i[situation scolarite sante appareils].freeze - AUDIO_TYPES = %i[intitule modalite_reponse consigne].freeze INTERACTION_TYPES = { QuestionQcm::QUESTION_TYPE => 'qcm', QuestionClicDansImage::QUESTION_TYPE => 'clic dans image', @@ -52,9 +54,6 @@ class Question < ApplicationRecord # rubocop:disable Metrics/ClassLength QuestionSaisie::QUESTION_TYPE => 'saisie', QuestionClicDansTexte::QUESTION_TYPE => 'clic dans texte' }.freeze - - enum :categorie, CATEGORIE.zip(CATEGORIE.map(&:to_s)).to_h, prefix: true - after_update :supprime_transcription, :supprime_attachment acts_as_paranoid diff --git a/app/models/restitution/positionnement/export.rb b/app/models/restitution/positionnement/export.rb index 7ff5d3263..b9c6d98ae 100644 --- a/app/models/restitution/positionnement/export.rb +++ b/app/models/restitution/positionnement/export.rb @@ -3,6 +3,8 @@ module Restitution module Positionnement class Export < ::ImportExport::ExportXls + include Fichier + def initialize(partie:) super() @partie = partie @@ -19,7 +21,7 @@ def nom_du_fichier evaluation = @partie.evaluation code_de_campagne = evaluation.campagne.code.parameterize nom_de_levaluation = evaluation.nom.parameterize.first(15) - genere_fichier("#{nom_de_levaluation}-#{code_de_campagne}") + nom_fichier_horodate("#{nom_de_levaluation}-#{code_de_campagne}", 'xls') end private diff --git a/app/views/admin/question_qcms/_form.html.arb b/app/views/admin/question_qcms/_form.html.arb index badae4d2f..1912e01b7 100644 --- a/app/views/admin/question_qcms/_form.html.arb +++ b/app/views/admin/question_qcms/_form.html.arb @@ -3,8 +3,8 @@ active_admin_form_for [:admin, resource] do |f| f.inputs do f.input :libelle - f.input :categorie, as: :select f.input :nom_technique, placeholder: t('.nom_technique_placeholder') + f.input :categorie, as: :select, collection: Question::CATEGORIE f.input :metacompetence f.input :type_qcm f.input :description diff --git a/app/views/admin/question_qcms/_show.html.arb b/app/views/admin/question_qcms/_show.html.arb index 7c338bc8c..7be57bd84 100644 --- a/app/views/admin/question_qcms/_show.html.arb +++ b/app/views/admin/question_qcms/_show.html.arb @@ -7,6 +7,7 @@ panel 'Détails de la question' do row :categorie row :nom_technique row :description + row :metacompetence row :illustration do render partial: 'admin/questions/show_illustration', locals: { illustration: resource.illustration } @@ -29,7 +30,6 @@ panel 'Détails de la question' do row :audio_consigne_bouton do tag_audio(question_qcm.transcription_consigne) end - row :metacompetence row :type_qcm row :created_at end diff --git a/app/views/admin/questions_clic_dans_image/_form.html.arb b/app/views/admin/questions_clic_dans_image/_form.html.arb index 1329784b4..fe0e187eb 100644 --- a/app/views/admin/questions_clic_dans_image/_form.html.arb +++ b/app/views/admin/questions_clic_dans_image/_form.html.arb @@ -6,6 +6,7 @@ active_admin_form_for [:admin, resource] do |f| f.input :libelle f.input :nom_technique f.input :description + f.input :metacompetence render partial: 'admin/questions/input_illustration', locals: { f: f } render partial: 'admin/questions/input_illustration_base', locals: { diff --git a/app/views/admin/questions_clic_dans_image/_show.html.arb b/app/views/admin/questions_clic_dans_image/_show.html.arb index a9e696053..e36a42985 100644 --- a/app/views/admin/questions_clic_dans_image/_show.html.arb +++ b/app/views/admin/questions_clic_dans_image/_show.html.arb @@ -6,6 +6,7 @@ panel 'Détails de la question' do row :libelle row :nom_technique row :description + row :metacompetence row :illustration do render partial: 'admin/questions/show_illustration', locals: { illustration: resource.illustration } diff --git a/app/views/admin/questions_clic_dans_texte/_form.html.arb b/app/views/admin/questions_clic_dans_texte/_form.html.arb index 8fcdf46dd..02e38ca3d 100644 --- a/app/views/admin/questions_clic_dans_texte/_form.html.arb +++ b/app/views/admin/questions_clic_dans_texte/_form.html.arb @@ -4,9 +4,9 @@ active_admin_form_for [:admin, resource] do |f| f.semantic_errors f.inputs do f.input :libelle - f.input :categorie, as: :select f.input :nom_technique f.input :description + f.input :metacompetence render partial: 'admin/questions/input_illustration', locals: { f: f } f.input :texte_sur_illustration, as: :text, input_html: { class: 'simple-mde-editor' } end diff --git a/app/views/admin/questions_clic_dans_texte/_show.html.arb b/app/views/admin/questions_clic_dans_texte/_show.html.arb index 4b8c3309a..d9ea2891d 100644 --- a/app/views/admin/questions_clic_dans_texte/_show.html.arb +++ b/app/views/admin/questions_clic_dans_texte/_show.html.arb @@ -7,6 +7,7 @@ panel 'Détails de la question' do row :categorie row :nom_technique row :description + row :metacompetence row :illustration do render partial: 'admin/questions/show_illustration', locals: { illustration: resource.illustration } diff --git a/app/views/admin/questions_glisser_deposer/_form.html.arb b/app/views/admin/questions_glisser_deposer/_form.html.arb index 0783c108e..fc17eca27 100644 --- a/app/views/admin/questions_glisser_deposer/_form.html.arb +++ b/app/views/admin/questions_glisser_deposer/_form.html.arb @@ -6,6 +6,7 @@ active_admin_form_for [:admin, resource] do |f| f.input :libelle f.input :nom_technique f.input :description + f.input :metacompetence render partial: 'admin/questions/input_illustration', locals: { f: f } render partial: 'admin/questions/input_illustration_base', locals: { diff --git a/app/views/admin/questions_glisser_deposer/_show.html.arb b/app/views/admin/questions_glisser_deposer/_show.html.arb index 00c31cb7a..c904acb40 100644 --- a/app/views/admin/questions_glisser_deposer/_show.html.arb +++ b/app/views/admin/questions_glisser_deposer/_show.html.arb @@ -6,6 +6,7 @@ panel 'Détails de la question' do row :libelle row :nom_technique row :description + row :metacompetence row :illustration do render partial: 'admin/questions/show_illustration', locals: { illustration: resource.illustration } diff --git a/app/views/admin/questions_saisies/_form.html.arb b/app/views/admin/questions_saisies/_form.html.arb index 12210dde8..cf87dec49 100644 --- a/app/views/admin/questions_saisies/_form.html.arb +++ b/app/views/admin/questions_saisies/_form.html.arb @@ -7,6 +7,7 @@ active_admin_form_for [:admin, resource] do |f| f.input :categorie, as: :select f.input :nom_technique f.input :description + f.input :metacompetence render partial: 'admin/questions/input_illustration', locals: { f: f } f.input :type_saisie f.input :suffix_reponse diff --git a/app/views/admin/questions_saisies/_show.html.arb b/app/views/admin/questions_saisies/_show.html.arb index 23f76368c..7de31c04e 100644 --- a/app/views/admin/questions_saisies/_show.html.arb +++ b/app/views/admin/questions_saisies/_show.html.arb @@ -7,6 +7,7 @@ panel 'Détails de la question' do row :categorie row :nom_technique row :description + row :metacompetence row :illustration do render partial: 'admin/questions/show_illustration', locals: { illustration: resource.illustration } diff --git a/spec/models/concerns/fichier_spec.rb b/spec/models/concerns/fichier_spec.rb new file mode 100644 index 000000000..6d8cff259 --- /dev/null +++ b/spec/models/concerns/fichier_spec.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Fichier do + let(:test_class) do + Class.new do + include Fichier + end + end + + describe '#nom_fichier_horodate' do + it 'genere un nom de fichier horodaté' do + Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do + expect(test_class.new.nom_fichier_horodate('titre', 'extention')) + .to eq('20250228010203-titre.extention') + end + end + end +end diff --git a/spec/models/import_export/questions/export/question_clic_dans_image_spec.rb b/spec/models/import_export/questions/export/question_clic_dans_image_spec.rb index 73d88b3d6..2b4b69ecb 100644 --- a/spec/models/import_export/questions/export/question_clic_dans_image_spec.rb +++ b/spec/models/import_export/questions/export/question_clic_dans_image_spec.rb @@ -7,7 +7,8 @@ let(:type) { 'QuestionClicDansImage' } let(:question) do - create(:question_clic_dans_image, description: 'Ceci est une description', + create(:question_clic_dans_image, metacompetence: 'operations_soustraction', + description: 'Ceci est une description', nom_technique: 'clic') end let!(:intitule) do @@ -36,11 +37,12 @@ expect(ligne[2]).to be_nil expect(ligne[3]).to eq('Ceci est un intitulé') expect(ligne[4]).to eq(intitule.audio_url) - expect(ligne[5]).to eq('Ceci est une consigne') - expect(ligne[6]).to eq(consigne.audio_url) - expect(ligne[7]).to eq('Ceci est une description') - expect(ligne[8]).to be(false) - expect(ligne[9]).to eq(question.zone_cliquable_url) - expect(ligne[10]).to eq(question.image_au_clic_url) + expect(ligne[5]).to eq('operations_soustraction') + expect(ligne[6]).to eq('Ceci est une consigne') + expect(ligne[7]).to eq(consigne.audio_url) + expect(ligne[8]).to eq('Ceci est une description') + expect(ligne[9]).to be(false) + expect(ligne[10]).to eq(question.zone_cliquable_url) + expect(ligne[11]).to eq(question.image_au_clic_url) end end diff --git a/spec/models/import_export/questions/export/question_clic_dans_texte_spec.rb b/spec/models/import_export/questions/export/question_clic_dans_texte_spec.rb index f0b1d3cc4..8ab289128 100644 --- a/spec/models/import_export/questions/export/question_clic_dans_texte_spec.rb +++ b/spec/models/import_export/questions/export/question_clic_dans_texte_spec.rb @@ -7,7 +7,8 @@ let(:type) { 'QuestionClicDansTexte' } let(:question) do - create(:question_clic_dans_image, description: 'Ceci est une description', + create(:question_clic_dans_image, metacompetence: 'operations_soustraction', + description: 'Ceci est une description', nom_technique: 'clic') end let!(:intitule) do @@ -36,10 +37,11 @@ expect(ligne[2]).to be_nil expect(ligne[3]).to eq('Ceci est un intitulé') expect(ligne[4]).to eq(intitule.audio_url) - expect(ligne[5]).to eq('Ceci est une consigne') - expect(ligne[6]).to eq(consigne.audio_url) - expect(ligne[7]).to eq('Ceci est une description') - expect(ligne[8]).to be(false) - expect(ligne[9]).to eq(question.texte_sur_illustration) + expect(ligne[5]).to eq('operations_soustraction') + expect(ligne[6]).to eq('Ceci est une consigne') + expect(ligne[7]).to eq(consigne.audio_url) + expect(ligne[8]).to eq('Ceci est une description') + expect(ligne[9]).to be(false) + expect(ligne[10]).to eq(question.texte_sur_illustration) end end diff --git a/spec/models/import_export/questions/export/question_glisser_deposer_spec.rb b/spec/models/import_export/questions/export/question_glisser_deposer_spec.rb index 2b0c58f6b..2fe149c34 100644 --- a/spec/models/import_export/questions/export/question_glisser_deposer_spec.rb +++ b/spec/models/import_export/questions/export/question_glisser_deposer_spec.rb @@ -28,16 +28,16 @@ ligne = worksheet.row(1) expect(ligne[2]).to eq(question.illustration_url(variant: nil)) - expect(ligne[8]).to be(false) - expect(ligne[9]).to eq(question.zone_depot_url) - expect(ligne[10]).to eq(question.orientation) - expect(ligne[11]).to eq(reponse.nom_technique) - expect(ligne[12]).to eq(reponse.position_client.to_s) - expect(ligne[13]).to eq(reponse.type_choix) - expect(ligne[14]).to eq(reponse.illustration_url.to_s) - expect(ligne[15]).to eq(reponse2.nom_technique) - expect(ligne[16]).to eq(reponse2.position_client.to_s) - expect(ligne[17]).to eq(reponse2.type_choix) - expect(ligne[18]).to eq(reponse2.illustration_url.to_s) + expect(ligne[9]).to be(false) + expect(ligne[10]).to eq(question.zone_depot_url) + expect(ligne[11]).to eq(question.orientation) + expect(ligne[12]).to eq(reponse.nom_technique) + expect(ligne[13]).to eq(reponse.position_client.to_s) + expect(ligne[14]).to eq(reponse.type_choix) + expect(ligne[15]).to eq(reponse.illustration_url.to_s) + expect(ligne[16]).to eq(reponse2.nom_technique) + expect(ligne[17]).to eq(reponse2.position_client.to_s) + expect(ligne[18]).to eq(reponse2.type_choix) + expect(ligne[19]).to eq(reponse2.illustration_url.to_s) end end diff --git a/spec/models/import_export/questions/export/question_qcm_spec.rb b/spec/models/import_export/questions/export/question_qcm_spec.rb index c20799b43..f41aa8ac4 100644 --- a/spec/models/import_export/questions/export/question_qcm_spec.rb +++ b/spec/models/import_export/questions/export/question_qcm_spec.rb @@ -6,7 +6,7 @@ include_context 'export' let(:type) { 'QuestionQcm' } - let(:question) { create(:question_qcm) } + let(:question) { create(:question_qcm, metacompetence: 'operations_addition') } let!(:reponse) { create(:choix, :bon, :avec_illustration, question_id: question.id) } let!(:reponse2) { create(:choix, :mauvais, :avec_illustration, question_id: question.id) } @@ -26,17 +26,17 @@ it 'génére un fichier xls avec les détails de la question' do ligne = worksheet.row(1) - expect(ligne[8]).to be(false) - expect(ligne[9]).to eq(question.type_qcm) - expect(ligne[10]).to eq(reponse.intitule) - expect(ligne[11]).to eq(reponse.nom_technique) - expect(ligne[12]).to eq(reponse.type_choix) - expect(ligne[13]).to eq(reponse.audio_url) - expect(ligne[14]).to eq(reponse.illustration_url) - expect(ligne[15]).to eq(reponse2.intitule) - expect(ligne[16]).to eq(reponse2.nom_technique) - expect(ligne[17]).to eq(reponse2.type_choix) - expect(ligne[18]).to eq(reponse2.audio_url) - expect(ligne[19]).to eq(reponse2.illustration_url) + expect(ligne[9]).to be(false) + expect(ligne[10]).to eq(question.type_qcm) + expect(ligne[11]).to eq(reponse.intitule) + expect(ligne[12]).to eq(reponse.nom_technique) + expect(ligne[13]).to eq(reponse.type_choix) + expect(ligne[14]).to eq(reponse.audio_url) + expect(ligne[15]).to eq(reponse.illustration_url) + expect(ligne[16]).to eq(reponse2.intitule) + expect(ligne[17]).to eq(reponse2.nom_technique) + expect(ligne[18]).to eq(reponse2.type_choix) + expect(ligne[19]).to eq(reponse2.audio_url) + expect(ligne[20]).to eq(reponse2.illustration_url) end end diff --git a/spec/models/import_export/questions/export/question_saisie_spec.rb b/spec/models/import_export/questions/export/question_saisie_spec.rb index a9f168c3e..a440a56e5 100644 --- a/spec/models/import_export/questions/export/question_saisie_spec.rb +++ b/spec/models/import_export/questions/export/question_saisie_spec.rb @@ -22,12 +22,12 @@ it 'génére un fichier xls avec les détails de la question' do ligne = worksheet.row(1) - expect(ligne[8]).to be(false) - expect(ligne[9]).to eq(question.suffix_reponse) - expect(ligne[10]).to eq(question.reponse_placeholder) - expect(ligne[11]).to eq(question.type_saisie) - expect(ligne[12]).to eq(question.texte_a_trous) - expect(ligne[13]).to eq(question.reponses.last.intitule) - expect(ligne[14]).to eq(question.reponses.last.nom_technique) + expect(ligne[9]).to be(false) + expect(ligne[10]).to eq(question.suffix_reponse) + expect(ligne[11]).to eq(question.reponse_placeholder) + expect(ligne[12]).to eq(question.type_saisie) + expect(ligne[13]).to eq(question.texte_a_trous) + expect(ligne[14]).to eq(question.reponses.last.intitule) + expect(ligne[15]).to eq(question.reponses.last.nom_technique) end end diff --git a/spec/models/import_export/questions/export_spec.rb b/spec/models/import_export/questions/export_spec.rb index ef9f080fe..87a174e50 100644 --- a/spec/models/import_export/questions/export_spec.rb +++ b/spec/models/import_export/questions/export_spec.rb @@ -10,8 +10,8 @@ describe '#nom_du_fichier' do it 'genere le nom du fichier' do - Timecop.freeze(Date.new(2025, 2, 28)) do - nom_du_fichier_attendu = '20250228-QuestionQcm.xls' + Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do + nom_du_fichier_attendu = '20250228010203-QuestionQcm.xls' expect(response_service.nom_du_fichier('QuestionQcm')).to eq(nom_du_fichier_attendu) end end diff --git a/spec/models/import_export/questions/import_export_donnees_spec.rb b/spec/models/import_export/questions/import_export_donnees_spec.rb index 3ac793e10..381f3a207 100644 --- a/spec/models/import_export/questions/import_export_donnees_spec.rb +++ b/spec/models/import_export/questions/import_export_donnees_spec.rb @@ -13,11 +13,12 @@ let!(:question) { create(:question_clic_dans_image) } it 'exporte les données' do - date = DateTime.current.strftime('%Y%m%d') - nom_du_fichier_attendu = "#{date}-#{question.type}.xls" - expect(service.exporte_donnees[:xls]).not_to be_nil - expect(service.exporte_donnees[:content_type]).to eq 'application/vnd.ms-excel' - expect(service.exporte_donnees[:filename]).to eq nom_du_fichier_attendu + Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do + nom_du_fichier_attendu = '20250228010203-QuestionClicDansImage.xls' + expect(service.exporte_donnees[:xls]).not_to be_nil + expect(service.exporte_donnees[:content_type]).to eq 'application/vnd.ms-excel' + expect(service.exporte_donnees[:filename]).to eq nom_du_fichier_attendu + end end end diff --git a/spec/models/restitution/positionnement/export_spec.rb b/spec/models/restitution/positionnement/export_spec.rb index 83a3ae5a9..58455bf40 100644 --- a/spec/models/restitution/positionnement/export_spec.rb +++ b/spec/models/restitution/positionnement/export_spec.rb @@ -15,7 +15,7 @@ let!(:question2) { create :question_qcm, nom_technique: 'LOdi2' } let(:questions) { [question1, question2] } let(:questionnaire) { create :questionnaire, questions: questions } - let(:campagne) { create :campagne } + let(:campagne) { create :campagne, code: 'CODE123' } let(:evaluation) { create :evaluation, campagne: campagne } let!(:partie) { create :partie, situation: situation, evaluation: evaluation } @@ -222,12 +222,9 @@ let(:situation) { create :situation } it "genere le nom du fichier en fonction de l'évaluation" do - code_de_campagne = partie.evaluation.campagne.code.parameterize - nom_de_levaluation = partie.evaluation.nom.parameterize.first(15) - date = DateTime.current.strftime('%Y%m%d') - nom_du_fichier_attendu = "#{date}-#{nom_de_levaluation}-#{code_de_campagne}.xls" - - expect(response_service.nom_du_fichier).to eq(nom_du_fichier_attendu) + Timecop.freeze(Time.zone.local(2025, 2, 28, 1, 2, 3)) do + expect(response_service.nom_du_fichier).to eq('20250228010203-roger-code123.xls') + end end end end diff --git a/spec/support/import_question_clic.xls b/spec/support/import_question_clic.xls index 0bab7964c..db8cf7c74 100644 Binary files a/spec/support/import_question_clic.xls and b/spec/support/import_question_clic.xls differ diff --git a/spec/support/import_question_clic_dans_texte.xls b/spec/support/import_question_clic_dans_texte.xls index 87d1f09ed..e3b68114a 100644 Binary files a/spec/support/import_question_clic_dans_texte.xls and b/spec/support/import_question_clic_dans_texte.xls differ diff --git a/spec/support/import_question_glisser.xls b/spec/support/import_question_glisser.xls index d7e08df25..68bd74b1c 100644 Binary files a/spec/support/import_question_glisser.xls and b/spec/support/import_question_glisser.xls differ diff --git a/spec/support/import_question_glisser_deposer.xls b/spec/support/import_question_glisser_deposer.xls index 4143de3df..18e63353e 100644 Binary files a/spec/support/import_question_glisser_deposer.xls and b/spec/support/import_question_glisser_deposer.xls differ diff --git a/spec/support/import_question_qcm.xls b/spec/support/import_question_qcm.xls index a9de8ebcb..171a396f7 100644 Binary files a/spec/support/import_question_qcm.xls and b/spec/support/import_question_qcm.xls differ diff --git a/spec/support/import_question_saisie.xls b/spec/support/import_question_saisie.xls index 02cba1190..d15f14526 100644 Binary files a/spec/support/import_question_saisie.xls and b/spec/support/import_question_saisie.xls differ