Skip to content
Snippets Groups Projects
Commit 3159dc6c authored by Per 29 mei 2024 gedeeld account, daarvoor marten's avatar Per 29 mei 2024 gedeeld account, daarvoor marten
Browse files

Merge branch 'mv-validate-description' into 'main'

Add validation for length of short_description and description

See merge request !22
parents c3b628e0 9fb71d31
Branches
Tags
1 merge request!22Add validation for length of short_description and description
Pipeline #92941 passed
...@@ -15,8 +15,8 @@ module Quby ...@@ -15,8 +15,8 @@ module Quby
def validate(definition) def validate(definition)
questionnaire = DSL.build_from_definition(definition) questionnaire = DSL.build_from_definition(definition)
validate_metadata(questionnaire)
validate_fields(questionnaire) validate_fields(questionnaire)
validate_title(questionnaire)
validate_questions(questionnaire) validate_questions(questionnaire)
validate_scores(questionnaire) validate_scores(questionnaire)
validate_table_edgecases(questionnaire) validate_table_edgecases(questionnaire)
...@@ -32,6 +32,20 @@ module Quby ...@@ -32,6 +32,20 @@ module Quby
backtrace: exception.backtrace[0..20]}) backtrace: exception.backtrace[0..20]})
end 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) def validate_fields(questionnaire)
questionnaire.fields.input_keys questionnaire.fields.input_keys
.find { |k| !k.is_a?(Symbol) } .find { |k| !k.is_a?(Symbol) }
...@@ -41,12 +55,6 @@ module Quby ...@@ -41,12 +55,6 @@ module Quby
&.tap { |k| fail "Answer key #{k} is not a symbol" } &.tap { |k| fail "Answer key #{k} is not a symbol" }
end end
def validate_title(questionnaire)
if questionnaire.title.blank?
fail "Questionnaire title is missing."
end
end
def validate_questions(questionnaire) def validate_questions(questionnaire)
questionnaire.answer_keys.each do |key| questionnaire.answer_keys.each do |key|
validate_key_format(key) validate_key_format(key)
......
...@@ -58,6 +58,22 @@ module Quby::Compiler::Services ...@@ -58,6 +58,22 @@ module Quby::Compiler::Services
end end
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 describe 'questions with activemodel validation errors' do
it "throws an error if the question to be hidden does not exist" do it "throws an error if the question to be hidden does not exist" do
invalid_definition = make_definition(<<-END) invalid_definition = make_definition(<<-END)
...@@ -813,8 +829,8 @@ module Quby::Compiler::Services ...@@ -813,8 +829,8 @@ module Quby::Compiler::Services
describe 'when using lookup tables' do describe 'when using lookup tables' do
it 'can validate an externally referenced table' do it 'can validate an externally referenced table' do
definition = Quby::Compiler::Entities::Definition.new( definition = Quby::Compiler::Entities::Definition.new(
key: 'test', key: 'test',
sourcecode: "title 'foo'; import_lookup_tree 'bar'", sourcecode: "title 'foo'; import_lookup_tree 'bar'",
path: 'fake definition test', path: 'fake definition test',
lookup_tables: {'bar' => ""} lookup_tables: {'bar' => ""}
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment