diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb new file mode 100644 index 000000000..38bdcf303 --- /dev/null +++ b/app/helpers/formatting_helper.rb @@ -0,0 +1,6 @@ +module FormattingHelper + def ensure_punctuation(value) + return value if value.blank? + value.match?(/[[:punct:]]\z/) && !value.match?(/[(){}\[\]]\z/) ? value : "#{value}." + end +end diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 113ec9cbc..74c9f9d3f 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -1,4 +1,6 @@ class Form::Question + include FormattingHelper + attr_accessor :id, :header, :hint_text, :description, :questions, :disable_clearing_if_not_routed_or_dynamic_answer_options, :type, :min, :max, :step, :width, :fields_to_add, :result_field, :conditional_for, :readonly, :answer_options, :page, :check_answer_label, @@ -205,7 +207,7 @@ class Form::Question def error_display_label label = error_label || check_answer_label || header || id.humanize - label.match?(/[[:punct:]]\z/) && !label.match?(/[(){}\[\]]\z/) ? label : "#{label}." + ensure_punctuation(label) end def unanswered_error_message diff --git a/app/services/bulk_upload/lettings/year2023/row_parser.rb b/app/services/bulk_upload/lettings/year2023/row_parser.rb index 38f1ad2ee..ed7bd0a98 100644 --- a/app/services/bulk_upload/lettings/year2023/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2023/row_parser.rb @@ -2,6 +2,7 @@ class BulkUpload::Lettings::Year2023::RowParser include ActiveModel::Model include ActiveModel::Attributes include InterruptionScreenHelper + include FormattingHelper QUESTIONS = { field_1: "Which organisation owns this property?", @@ -289,7 +290,7 @@ class BulkUpload::Lettings::Year2023::RowParser }, inclusion: { in: (1..12).to_a, - message: I18n.t("validations.invalid_option", question: "letting type"), + message: I18n.t("validations.invalid_option", question: "letting type."), unless: -> { field_5.blank? }, category: :setup, }, @@ -543,9 +544,9 @@ private fields.each do |field| if setup_question?(question) - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field]), category: :setup) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase), category: :setup) else - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field])) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase)) end end end @@ -746,7 +747,7 @@ private def validate_data_types unless attribute_set["field_5"].value_before_type_cast&.match?(/^\d+\.?0*$/) - errors.add(:field_5, I18n.t("validations.invalid_number", question: "letting type")) + errors.add(:field_5, I18n.t("validations.invalid_number", question: "letting type.")) end end diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index 60b04c918..095e375be 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -2,6 +2,7 @@ class BulkUpload::Lettings::Year2024::RowParser include ActiveModel::Model include ActiveModel::Attributes include InterruptionScreenHelper + include FormattingHelper QUESTIONS = { field_1: "Which organisation owns this property?", @@ -567,9 +568,9 @@ private fields.each do |field| if setup_question?(question) - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field]), category: :setup) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase), category: :setup) else - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field])) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase)) end end end @@ -800,7 +801,7 @@ private def validate_data_types unless attribute_set["field_11"].value_before_type_cast&.match?(/^\d+\.?0*$/) - errors.add(:field_11, I18n.t("validations.invalid_number", question: "rent type")) + errors.add(:field_11, I18n.t("validations.invalid_number", question: "rent type.")) end end diff --git a/app/services/bulk_upload/sales/year2023/row_parser.rb b/app/services/bulk_upload/sales/year2023/row_parser.rb index c649b7f8f..0e0b4b49c 100644 --- a/app/services/bulk_upload/sales/year2023/row_parser.rb +++ b/app/services/bulk_upload/sales/year2023/row_parser.rb @@ -2,6 +2,7 @@ class BulkUpload::Sales::Year2023::RowParser include ActiveModel::Model include ActiveModel::Attributes include InterruptionScreenHelper + include FormattingHelper QUESTIONS = { field_1: "Which organisation owned this property before the sale?", @@ -1270,13 +1271,13 @@ private fields.each do |field| if errors[field].none? block_log_creation! - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field]), category: :setup) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase), category: :setup) end end else fields.each do |field| unless errors.any? { |e| fields.include?(e.attribute) } - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field])) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase)) end end end diff --git a/app/services/bulk_upload/sales/year2024/row_parser.rb b/app/services/bulk_upload/sales/year2024/row_parser.rb index 0103679fd..f0030d443 100644 --- a/app/services/bulk_upload/sales/year2024/row_parser.rb +++ b/app/services/bulk_upload/sales/year2024/row_parser.rb @@ -2,6 +2,7 @@ class BulkUpload::Sales::Year2024::RowParser include ActiveModel::Model include ActiveModel::Attributes include InterruptionScreenHelper + include FormattingHelper QUESTIONS = { field_1: "Which organisation owned this property before the sale?", @@ -1406,13 +1407,13 @@ private fields.each do |field| if errors[field].none? block_log_creation! - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field]), category: :setup) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase), category: :setup) end end else fields.each do |field| unless errors.any? { |e| fields.include?(e.attribute) } - errors.add(field, I18n.t("validations.invalid_option", question: QUESTIONS[field])) + errors.add(field, I18n.t("validations.invalid_option", question: ensure_punctuation(QUESTIONS[field])&.downcase)) end end end