From 1d69d2eb03db40bc1392a8a95e37a385ff1e119b Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Mon, 30 Jan 2023 15:22:43 +0000 Subject: [PATCH] bulk upload with 60% errors will not create logs --- .../bulk_upload/lettings/validator.rb | 10 ++++ .../bulk_upload/lettings/validator_spec.rb | 47 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/app/services/bulk_upload/lettings/validator.rb b/app/services/bulk_upload/lettings/validator.rb index b06c8633a..468156820 100644 --- a/app/services/bulk_upload/lettings/validator.rb +++ b/app/services/bulk_upload/lettings/validator.rb @@ -172,10 +172,20 @@ class BulkUpload::Lettings::Validator def create_logs? return false if row_parsers.any? { |row_parser| row_parser.log.form.setup_sections[0].subsections[0].is_incomplete?(row_parser.log) } + return false if over_60_percent_column_error_rate row_parsers.all? { |row_parser| row_parser.log.valid? } end + def over_60_percent_column_error_rate + fields = ("field_1".."field_134").to_a + threshold = (row_parsers.size * 0.6).ceil + + fields.any? do |field| + row_parsers.count { |row_parser| row_parser.errors[field].present? } > threshold + end + end + def self.question_for_field(field) QUESTIONS[field] end diff --git a/spec/services/bulk_upload/lettings/validator_spec.rb b/spec/services/bulk_upload/lettings/validator_spec.rb index ca21e0979..bf335c2c9 100644 --- a/spec/services/bulk_upload/lettings/validator_spec.rb +++ b/spec/services/bulk_upload/lettings/validator_spec.rb @@ -125,6 +125,7 @@ RSpec.describe BulkUpload::Lettings::Validator do end it "returns false" do + validator.call expect(validator).not_to be_create_logs end end @@ -140,6 +141,7 @@ RSpec.describe BulkUpload::Lettings::Validator do end it "returns true" do + validator.call expect(validator).to be_create_logs end end @@ -153,8 +155,53 @@ RSpec.describe BulkUpload::Lettings::Validator do end it "returns false" do + validator.call + expect(validator).not_to be_create_logs + end + end + + context "when a column is over 60% error threshold" do + let(:log_1) { build(:lettings_log, :completed, renttype: 1, created_by: user) } + let(:log_2) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + let(:log_3) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + let(:log_4) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + let(:log_5) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + + before do + file.write(BulkUpload::LogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_2, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_3, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_4, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_5, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.close + end + + it "returns false" do + validator.call expect(validator).not_to be_create_logs end end + + context "when a column is under 60% error threshold" do + let(:log_1) { build(:lettings_log, :completed, renttype: 1, created_by: user) } + let(:log_2) { build(:lettings_log, :completed, renttype: 1, created_by: user) } + let(:log_3) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + let(:log_4) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + let(:log_5) { build(:lettings_log, renttype: 2, created_by: user, builtype: nil, startdate: Time.zone.local(2022, 5, 1)) } + + before do + file.write(BulkUpload::LogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_2, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_3, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_4, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.write(BulkUpload::LogToCsv.new(log: log_5, line_ending: "\r\n", col_offset: 0).to_csv_row) + file.close + end + + it "returns true" do + validator.call + expect(validator).to be_create_logs + end + end end end