Browse Source

bulk upload with 60% errors will not create logs

pull/1252/head
Phil Lee 3 years ago
parent
commit
1d69d2eb03
  1. 10
      app/services/bulk_upload/lettings/validator.rb
  2. 47
      spec/services/bulk_upload/lettings/validator_spec.rb

10
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

47
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

Loading…
Cancel
Save