diff --git a/app/models/champs/piece_justificative_champ.rb b/app/models/champs/piece_justificative_champ.rb index 0a3526a07..8fcf58027 100644 --- a/app/models/champs/piece_justificative_champ.rb +++ b/app/models/champs/piece_justificative_champ.rb @@ -1,7 +1,8 @@ class Champs::PieceJustificativeChamp < Champ - PIECE_JUSTIFICATIVE_FILE_MAX_SIZE = 200.megabytes + MAX_SIZE = 200.megabytes - PIECE_JUSTIFICATIVE_FILE_ACCEPTED_FORMATS = [ + ACCEPTED_FORMATS = [ + "text/plain", "application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", @@ -16,6 +17,13 @@ class Champs::PieceJustificativeChamp < Champ "image/jpeg" ] + # TODO: once we're running on Rails 6, re-enable this validation. + # See https://github.com/betagouv/demarches-simplifiees.fr/issues/4926 + # + # validates :piece_justificative_file, + # content_type: ACCEPTED_FORMATS, + # size: { less_than: MAX_SIZE } + def main_value_name :piece_justificative_file end diff --git a/config/locales/active_storage_validations.fr.yml b/config/locales/active_storage_validations.fr.yml new file mode 100644 index 000000000..1494483b0 --- /dev/null +++ b/config/locales/active_storage_validations.fr.yml @@ -0,0 +1,4 @@ +fr: + errors: + messages: + content_type_invalid: n’est pas d’un type accepté diff --git a/config/locales/models/champs/fr.yml b/config/locales/models/champs/fr.yml index 9d9e6b2f0..7a0730a32 100644 --- a/config/locales/models/champs/fr.yml +++ b/config/locales/models/champs/fr.yml @@ -3,3 +3,4 @@ fr: attributes: champ: value: La valeur du champ + piece_justificative_file: La pièce justificative diff --git a/spec/models/champs/piece_justificative_champ_spec.rb b/spec/models/champs/piece_justificative_champ_spec.rb index 506eba015..c2f691884 100644 --- a/spec/models/champs/piece_justificative_champ_spec.rb +++ b/spec/models/champs/piece_justificative_champ_spec.rb @@ -1,4 +1,19 @@ +require 'active_storage_validations/matchers' + describe Champs::PieceJustificativeChamp do + include ActiveStorageValidations::Matchers + + # TODO: once we're running on Rails 6, re-enable the PieceJustificativeChamp validator, + # and re-enable this spec. + # + # See https://github.com/betagouv/demarches-simplifiees.fr/issues/4926 + describe "validations", pending: true do + subject(:champ_pj) { build(:champ_piece_justificative) } + + it { is_expected.to validate_size_of(:piece_justificative_file).less_than(Champs::PieceJustificativeChamp::MAX_SIZE) } + it { is_expected.to validate_content_type_of(:piece_justificative_file).allowing(Champs::PieceJustificativeChamp::ACCEPTED_FORMATS) } + end + describe '#for_api' do let(:champ_pj) { create(:champ_piece_justificative) } let(:metadata) { champ_pj.piece_justificative_file.blob.metadata }