Browse Source

add validations

pull/1633/head
Phil Lee 3 years ago
parent
commit
1f2fae4dfe
  1. 77
      app/services/bulk_upload/sales/year2022/row_parser.rb
  2. 2
      config/locales/en.yml
  3. 102
      spec/services/bulk_upload/sales/year2022/row_parser_spec.rb

77
app/services/bulk_upload/sales/year2022/row_parser.rb

@ -265,14 +265,71 @@ class BulkUpload::Sales::Year2022::RowParser
validates :field_4, presence: { message: I18n.t("validations.not_answered", question: "sale completion date (year)"), category: :setup }, on: :after_log validates :field_4, presence: { message: I18n.t("validations.not_answered", question: "sale completion date (year)"), category: :setup }, on: :after_log
validates :field_4, format: { with: /\A\d{2}\z/, message: I18n.t("validations.setup.saledate.year_not_two_digits") }, on: :after_log validates :field_4, format: { with: /\A\d{2}\z/, message: I18n.t("validations.setup.saledate.year_not_two_digits") }, on: :after_log
validates :field_57,
inclusion: {
in: [2, 16, 18, 24, 28, 30, 31],
category: :setup,
question: QUESTIONS[:field_57].downcase,
},
if: proc { field_57.present? && shared_ownership? },
on: :before_log
validates :field_57,
presence: {
message: I18n.t("validations.not_answered", question: "shared ownership type"),
},
if: :shared_ownership?,
on: :after_log
validates :field_76,
inclusion: {
in: [8, 14, 27, 9, 29, 21, 22],
category: :setup,
question: QUESTIONS[:field_76].downcase,
},
if: proc { field_76.present? && discounted_ownership? },
on: :before_log
validates :field_76,
presence: {
message: I18n.t("validations.not_answered", question: "shared ownership type"),
},
if: :discounted_ownership?,
on: :after_log
validates :field_84,
inclusion: {
in: [10, 12],
category: :setup,
question: QUESTIONS[:field_84].downcase,
},
if: proc { field_84.present? && outright_sale? },
on: :before_log
validates :field_84,
presence: {
message: I18n.t("validations.not_answered", question: "shared ownership type"),
},
if: :outright_sale?,
on: :after_log
validates :field_85,
presence: {
message: I18n.t("validations.not_answered", question: "type of outright sale"),
category: :setup,
},
if: proc { field_84 == 12 },
on: :after_log
validates :field_109, presence: { message: I18n.t("validations.not_answered", question: "more than 2 buyers"), category: :setup }, if: :joint_purchase?, on: :after_log
validates :field_113, presence: { message: I18n.t("validations.not_answered", question: "ownership type"), category: :setup }, on: :after_log validates :field_113, presence: { message: I18n.t("validations.not_answered", question: "ownership type"), category: :setup }, on: :after_log
validates :field_57, presence: { message: I18n.t("validations.not_answered", question: "shared ownership type"), category: :setup }, if: :shared_ownership?, on: :after_log
validates :field_76, presence: { message: I18n.t("validations.not_answered", question: "shared ownership type"), category: :setup }, if: :discounted_ownership?, on: :after_log validates :field_114, presence: { message: I18n.t("validations.not_answered", question: "company buyer"), category: :setup }, if: :outright_sale?, on: :after_log
validates :field_84, presence: { message: I18n.t("validations.not_answered", question: "shared ownership type"), category: :setup }, if: :outright_sale?, on: :after_log
validates :field_115, presence: { message: I18n.t("validations.not_answered", question: "will the buyers live in the property"), category: :setup }, if: :outright_sale?, on: :after_log validates :field_115, presence: { message: I18n.t("validations.not_answered", question: "will the buyers live in the property"), category: :setup }, if: :outright_sale?, on: :after_log
validates :field_116, presence: { message: I18n.t("validations.not_answered", question: "joint purchase"), category: :setup }, if: :joint_purchase_asked?, on: :after_log validates :field_116, presence: { message: I18n.t("validations.not_answered", question: "joint purchase"), category: :setup }, if: :joint_purchase_asked?, on: :after_log
validates :field_114, presence: { message: I18n.t("validations.not_answered", question: "company buyer"), category: :setup }, if: :outright_sale?, on: :after_log
validates :field_109, presence: { message: I18n.t("validations.not_answered", question: "more than 2 buyers"), category: :setup }, if: :joint_purchase?, on: :after_log
validate :validate_buyer1_economic_status, on: :before_log validate :validate_buyer1_economic_status, on: :before_log
validate :validate_nulls, on: :after_log validate :validate_nulls, on: :after_log
@ -288,6 +345,8 @@ class BulkUpload::Sales::Year2022::RowParser
validate :validate_incomplete_soft_validations, on: :after_log validate :validate_incomplete_soft_validations, on: :after_log
validate :validate_if_log_already_exists, on: :after_log, if: -> { FeatureToggle.bulk_upload_duplicate_log_check_enabled? } validate :validate_if_log_already_exists, on: :after_log, if: -> { FeatureToggle.bulk_upload_duplicate_log_check_enabled? }
validate :validate_data_protection_answered, on: :after_log
def self.question_for_field(field) def self.question_for_field(field)
QUESTIONS[field] QUESTIONS[field]
end end
@ -351,6 +410,12 @@ class BulkUpload::Sales::Year2022::RowParser
private private
def validate_data_protection_answered
unless field_112 == 1
errors.add(:field_112, I18n.t("validations.not_answered", question: QUESTIONS[:field_112].downcase), category: :setup)
end
end
def buyer_not_interviewed? def buyer_not_interviewed?
field_6 == 1 field_6 == 1
end end
@ -957,6 +1022,8 @@ private
def validate_valid_radio_option def validate_valid_radio_option
log.attributes.each do |question_id, _v| log.attributes.each do |question_id, _v|
next if question_id == "type"
question = log.form.get_question(question_id, log) question = log.form.get_question(question_id, log)
next unless question&.type == "radio" next unless question&.type == "radio"

2
config/locales/en.yml

@ -41,6 +41,8 @@ en:
activemodel: activemodel:
errors: errors:
models: models:
bulk_upload/sales/year2022/row_parser:
inclusion: Enter a valid value for %{question}
bulk_upload/sales/year2023/row_parser: bulk_upload/sales/year2023/row_parser:
inclusion: Enter a valid value for %{question} inclusion: Enter a valid value for %{question}
bulk_upload/lettings/validator: bulk_upload/lettings/validator:

102
spec/services/bulk_upload/sales/year2022/row_parser_spec.rb

@ -198,7 +198,7 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute)
expect(errors).to eql(%i[field_2 field_3 field_4 field_113 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_113 field_92 field_112])
end end
end end
@ -214,7 +214,7 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute)
expect(errors).to eql(%i[field_2 field_3 field_4 field_57 field_116 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_57 field_116 field_92 field_112])
end end
end end
@ -232,7 +232,7 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute)
expect(errors).to eql(%i[field_2 field_3 field_4 field_109 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_109 field_92 field_112])
end end
end end
@ -248,7 +248,7 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute)
expect(errors).to eql(%i[field_2 field_3 field_4 field_76 field_116 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_76 field_116 field_92 field_112])
end end
end end
@ -266,7 +266,7 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute)
expect(errors).to eql(%i[field_2 field_3 field_4 field_109 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_109 field_92 field_112])
end end
end end
@ -280,9 +280,10 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
end end
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute).sort
expect(errors).to eql(%i[field_2 field_3 field_4 field_84 field_115 field_114 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_84 field_115 field_114 field_92])
expect(errors).to eql(%i[field_2 field_3 field_4 field_84 field_114 field_92 field_112])
end end
end end
@ -291,22 +292,23 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
{ {
bulk_upload:, bulk_upload:,
field_1: "test id", field_1: "test id",
field_113: "3",
field_84: "12", field_84: "12",
field_85: "other sale type",
field_113: "3",
field_114: "2", field_114: "2",
} }
end end
it "has errors on correct setup fields" do it "has errors on correct setup fields" do
errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute) errors = parser.errors.select { |e| e.options[:category] == :setup }.map(&:attribute).sort
expect(errors).to eql(%i[field_2 field_3 field_4 field_115 field_116 field_92]) expect(errors).to eql(%i[field_2 field_3 field_4 field_115 field_116 field_92 field_112].sort)
end end
end end
describe "#field_57" do # type of shared ownership scheme describe "#field_57" do # type of shared ownership scheme
context "when an invalid option" do context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_57: "100" }) } let(:attributes) { setup_section_params.merge(field_57: "100", field_113: "1") }
it "returns setup error" do it "returns setup error" do
expect(parser.errors.where(:field_57, category: :setup).map(&:message)).to eql(["Enter a valid value for what is the type of shared ownership sale?"]) expect(parser.errors.where(:field_57, category: :setup).map(&:message)).to eql(["Enter a valid value for what is the type of shared ownership sale?"])
@ -314,6 +316,36 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
end end
end end
describe "#field_76" do # type of discounted ownership scheme
context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_76: "100", field_113: "2" }) }
it "returns setup error" do
expect(parser.errors.where(:field_76, category: :setup).map(&:message)).to eql(["Enter a valid value for what is the type of discounted ownership sale?"])
end
end
end
describe "#field_84" do # type of outright sale
context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_84: "100", field_113: "3" }) }
it "returns setup error" do
expect(parser.errors.where(:field_84, category: :setup).map(&:message)).to eql(["Enter a valid value for what is the type of outright sale?"])
end
end
end
describe "#field_85" do # type of other outright sale
context "when cant be blank" do
let(:attributes) { setup_section_params.merge({ field_85: nil, field_84: "12" }) }
it "returns setup error" do
expect(parser.errors.where(:field_85, category: :setup).map(&:message)).to eql(["You must answer type of outright sale"])
end
end
end
describe "#field_92" do # owning org describe "#field_92" do # owning org
context "when no data given" do context "when no data given" do
let(:attributes) { { bulk_upload:, field_92: "" } } let(:attributes) { { bulk_upload:, field_92: "" } }
@ -461,6 +493,26 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
end end
end end
describe "#field_109" do # more that 2 joint purchasers?
context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_109: "100", field_116: "1" }) }
it "returns setup error" do
expect(parser.errors.where(:field_109, category: :setup).map(&:message)).to eql(["Enter a valid value for are there more than two joint purchasers of this property?"])
end
end
end
describe "#field_112" do # data protection
context "when not accepted" do
let(:attributes) { setup_section_params.merge(field_112: nil) }
it "returns setup error" do
expect(parser.errors.where(:field_112, category: :setup).map(&:message)).to eql(["You must answer data protection question"])
end
end
end
describe "#field_113" do # purchase made thru ownership scheme? describe "#field_113" do # purchase made thru ownership scheme?
context "when an invalid option" do context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_113: "100" }) } let(:attributes) { setup_section_params.merge({ field_113: "100" }) }
@ -471,6 +523,36 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
end end
end end
describe "#field_114" do # is buyer a company?
context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_114: "100", field_113: "3" }) }
it "returns setup error" do
expect(parser.errors.where(:field_114, category: :setup).map(&:message)).to eql(["Enter a valid value for is the buyer a company?"])
end
end
end
describe "#field_115" do # will buyers live in property?
context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_115: "100", field_113: "3", field_114: "2" }) }
it "returns setup error" do
expect(parser.errors.where(:field_115, category: :setup).map(&:message)).to eql(["Enter a valid value for will the buyers live in the property?"])
end
end
end
describe "#field_116" do # joint purchase?
context "when an invalid option" do
let(:attributes) { setup_section_params.merge({ field_116: "100" }) }
it "returns setup error" do
expect(parser.errors.where(:field_116, category: :setup).map(&:message)).to eql(["Enter a valid value for is this a joint purchase?"])
end
end
end
describe "#field_117" do describe "#field_117" do
context "when not a possible value" do context "when not a possible value" do
let(:attributes) { valid_attributes.merge({ field_117: "3" }) } let(:attributes) { valid_attributes.merge({ field_117: "3" }) }

Loading…
Cancel
Save