From 9fb71d31a4b63a57032a493eaa8fcca841f1c5f4 Mon Sep 17 00:00:00 2001 From: Marten Veldthuis <marten@veldthuis.com> Date: Mon, 26 Jul 2021 13:54:56 +0200 Subject: [PATCH] Add validation for length of short_description and description --- .../compiler/services/definition_validator.rb | 22 +++++++++++++------ .../services/definition_validator_spec.rb | 20 +++++++++++++++-- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/quby/compiler/services/definition_validator.rb b/lib/quby/compiler/services/definition_validator.rb index 6cf8c58..7193874 100644 --- a/lib/quby/compiler/services/definition_validator.rb +++ b/lib/quby/compiler/services/definition_validator.rb @@ -15,8 +15,8 @@ module Quby def validate(definition) questionnaire = DSL.build_from_definition(definition) + validate_metadata(questionnaire) validate_fields(questionnaire) - validate_title(questionnaire) validate_questions(questionnaire) validate_scores(questionnaire) validate_table_edgecases(questionnaire) @@ -32,6 +32,20 @@ module Quby backtrace: exception.backtrace[0..20]}) end + def validate_metadata(questionnaire) + if questionnaire.title.blank? + fail "Questionnaire title is missing." + end + + if questionnaire.short_description && questionnaire.short_description.size > 255 + fail "Questionnaire short_description is too long." + end + + if questionnaire.description && questionnaire.description.size > 255 + fail "Questionnaire description is too long." + end + end + def validate_fields(questionnaire) questionnaire.fields.input_keys .find { |k| !k.is_a?(Symbol) } @@ -41,12 +55,6 @@ module Quby &.tap { |k| fail "Answer key #{k} is not a symbol" } end - def validate_title(questionnaire) - if questionnaire.title.blank? - fail "Questionnaire title is missing." - end - end - def validate_questions(questionnaire) questionnaire.answer_keys.each do |key| validate_key_format(key) diff --git a/spec/quby/compiler/services/definition_validator_spec.rb b/spec/quby/compiler/services/definition_validator_spec.rb index 09a1aac..84d7efb 100644 --- a/spec/quby/compiler/services/definition_validator_spec.rb +++ b/spec/quby/compiler/services/definition_validator_spec.rb @@ -58,6 +58,22 @@ module Quby::Compiler::Services end end + describe "questionnaire metadata cannot be too long" do + it "throws an error if the questionnaire short_description is too long" do + invalid_definition = make_definition("title 'foo'; short_description \"#{"x"*256}\"") + invalid_definition.valid? + expect(invalid_definition.errors[:sourcecode].first[:message]) + .to include("Questionnaire short_description is too long.") + end + + it "throws an error if the questionnaire description is too long" do + invalid_definition = make_definition("title 'foo'; description \"#{"x"*256}\"") + invalid_definition.valid? + expect(invalid_definition.errors[:sourcecode].first[:message]) + .to include("Questionnaire description is too long.") + end + end + describe 'questions with activemodel validation errors' do it "throws an error if the question to be hidden does not exist" do invalid_definition = make_definition(<<-END) @@ -813,8 +829,8 @@ module Quby::Compiler::Services describe 'when using lookup tables' do it 'can validate an externally referenced table' do definition = Quby::Compiler::Entities::Definition.new( - key: 'test', - sourcecode: "title 'foo'; import_lookup_tree 'bar'", + key: 'test', + sourcecode: "title 'foo'; import_lookup_tree 'bar'", path: 'fake definition test', lookup_tables: {'bar' => ""} ) -- GitLab