Browse Source

test: for validator 2022 as well as 2023

pull/1557/head
Sam Seed 3 years ago
parent
commit
01e5b7bfb8
  1. 204
      spec/services/bulk_upload/lettings/validator_spec.rb
  2. 20
      spec/support/bulk_upload/log_to_csv.rb

204
spec/services/bulk_upload/lettings/validator_spec.rb

@ -6,96 +6,182 @@ RSpec.describe BulkUpload::Lettings::Validator do
let(:organisation) { create(:organisation, old_visible_id: "3") } let(:organisation) { create(:organisation, old_visible_id: "3") }
let(:user) { create(:user, organisation:) } let(:user) { create(:user, organisation:) }
let(:log) { build(:lettings_log, :completed) } let(:log) { build(:lettings_log, :completed) }
let(:bulk_upload) { create(:bulk_upload, user:, year: 2022) } let(:bulk_upload) { create(:bulk_upload, user:) }
let(:path) { file.path } let(:path) { file.path }
let(:file) { Tempfile.new } let(:file) { Tempfile.new }
describe "validations" do describe "validations" do
let(:bulk_upload) { create(:bulk_upload, user:, year: 2023) }
context "when file is empty" do context "when file is empty" do
it "is not valid" do it "is not valid" do
expect(validator).not_to be_valid expect(validator).not_to be_valid
end end
end end
context "when file has no headers and too many columns" do context "2022" do
before do let(:bulk_upload) { create(:bulk_upload, user:, year: 2022) }
file.write(("a" * 143).chars.join(","))
file.write("\n")
file.rewind
end
it "is not valid" do context "when file has no headers and too many columns" do
expect(validator).not_to be_valid before do
expect(validator.errors["base"]).to eql(["too many columns, please ensure you have used the correct template"]) file.write(("a" * 136).chars.join(","))
file.write("\n")
file.rewind
end
it "is not valid" do
expect(validator).not_to be_valid
expect(validator.errors["base"]).to eql(["too many columns, please ensure you have used the correct template"])
end
end end
end
context "when file has no headers and doesn't have too many columns" do context "when file has no headers and doesn't have too many columns" do
before do before do
file.write(("a" * 142).chars.join(",")) file.write(("a" * 135).chars.join(","))
file.write("\n") file.write("\n")
file.rewind file.rewind
end
it "is valid" do
expect(validator).to be_valid
end
end end
it "is valid" do context "when file has extra invalid headers" do
expect(validator).to be_valid let(:seed) { rand }
let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2022_field_numbers + %w[invalid_field_number] }
let(:field_values) { log_to_csv.to_2022_row + %w[value_for_invalid_field_number] }
before do
file.write(log_to_csv.custom_2022_field_numbers_row(seed:, field_numbers:))
file.write(log_to_csv.to_custom_2022_csv_row(seed:, field_values:))
file.rewind
end
it "is valid" do
expect(validator).to be_valid
end
end end
end
context "when file has extra invalid headers" do context "when file has too few valid headers" do
let(:seed) { rand } let(:seed) { rand }
let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) } let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2023_field_numbers + %w[invalid_field_number] } let(:field_numbers) { log_to_csv.default_2022_field_numbers }
let(:field_values) { log_to_csv.to_2023_row + %w[value_for_invalid_field_number] } let(:field_values) { log_to_csv.to_2022_row }
before do before do
file.write(log_to_csv.custom_2023_field_numbers_row(seed:, field_numbers:)) field_numbers.delete_at(20)
file.write(log_to_csv.to_custom_2023_csv_row(seed:, field_values:)) field_values.delete_at(20)
file.rewind file.write(log_to_csv.custom_2022_field_numbers_row(seed:, field_numbers:))
file.write(log_to_csv.to_custom_2022_csv_row(seed:, field_values:))
file.rewind
end
it "is not valid" do
expect(validator).not_to be_valid
expect(validator.errors["base"]).to eql(["incorrect number of fields, please ensure you have used the correct template"])
end
end end
it "is valid" do context "when file has too many valid headers" do
expect(validator).to be_valid let(:seed) { rand }
let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2022_field_numbers + %w[23] }
let(:field_values) { log_to_csv.to_2022_row + %w[value] }
before do
file.write(log_to_csv.custom_2022_field_numbers_row(seed:, field_numbers:))
file.write(log_to_csv.to_custom_2022_csv_row(seed:, field_values:))
file.rewind
end
it "is not valid" do
expect(validator).not_to be_valid
expect(validator.errors["base"]).to eql(["incorrect number of fields, please ensure you have used the correct template"])
end
end end
end end
context "when file has too few valid headers" do context "2023" do
let(:seed) { rand } let(:bulk_upload) { create(:bulk_upload, user:, year: 2023) }
let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2023_field_numbers }
let(:field_values) { log_to_csv.to_2023_row }
before do context "when file has no headers and too many columns" do
field_numbers.delete_at(20) before do
field_values.delete_at(20) file.write(("a" * 143).chars.join(","))
file.write(log_to_csv.custom_2023_field_numbers_row(seed:, field_numbers:)) file.write("\n")
file.write(log_to_csv.to_custom_2023_csv_row(seed:, field_values:)) file.rewind
file.rewind end
it "is not valid" do
expect(validator).not_to be_valid
expect(validator.errors["base"]).to eql(["too many columns, please ensure you have used the correct template"])
end
end end
it "is not valid" do context "when file has no headers and doesn't have too many columns" do
expect(validator).not_to be_valid before do
expect(validator.errors["base"]).to eql(["incorrect number of fields, please ensure you have used the correct template"]) file.write(("a" * 142).chars.join(","))
file.write("\n")
file.rewind
end
it "is valid" do
expect(validator).to be_valid
end
end end
end
context "when file has too many valid headers" do context "when file has extra invalid headers" do
let(:seed) { rand } let(:seed) { rand }
let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) } let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2023_field_numbers + %w[23] } let(:field_numbers) { log_to_csv.default_2023_field_numbers + %w[invalid_field_number] }
let(:field_values) { log_to_csv.to_2023_row + %w[value] } let(:field_values) { log_to_csv.to_2023_row + %w[value_for_invalid_field_number] }
before do before do
file.write(log_to_csv.custom_2023_field_numbers_row(seed:, field_numbers:)) file.write(log_to_csv.custom_2023_field_numbers_row(seed:, field_numbers:))
file.write(log_to_csv.to_custom_2023_csv_row(seed:, field_values:)) file.write(log_to_csv.to_custom_2023_csv_row(seed:, field_values:))
file.rewind file.rewind
end
it "is valid" do
expect(validator).to be_valid
end
end end
it "is not valid" do context "when file has too few valid headers" do
expect(validator).not_to be_valid let(:seed) { rand }
expect(validator.errors["base"]).to eql(["incorrect number of fields, please ensure you have used the correct template"]) let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2023_field_numbers }
let(:field_values) { log_to_csv.to_2023_row }
before do
field_numbers.delete_at(20)
field_values.delete_at(20)
file.write(log_to_csv.custom_2023_field_numbers_row(seed:, field_numbers:))
file.write(log_to_csv.to_custom_2023_csv_row(seed:, field_values:))
file.rewind
end
it "is not valid" do
expect(validator).not_to be_valid
expect(validator.errors["base"]).to eql(["incorrect number of fields, please ensure you have used the correct template"])
end
end
context "when file has too many valid headers" do
let(:seed) { rand }
let(:log_to_csv) { BulkUpload::LogToCsv.new(log:) }
let(:field_numbers) { log_to_csv.default_2023_field_numbers + %w[23] }
let(:field_values) { log_to_csv.to_2023_row + %w[value] }
before do
file.write(log_to_csv.custom_2023_field_numbers_row(seed:, field_numbers:))
file.write(log_to_csv.to_custom_2023_csv_row(seed:, field_values:))
file.rewind
end
it "is not valid" do
expect(validator).not_to be_valid
expect(validator.errors["base"]).to eql(["incorrect number of fields, please ensure you have used the correct template"])
end
end end
end end

20
spec/support/bulk_upload/log_to_csv.rb

@ -20,6 +20,26 @@ class BulkUpload::LogToCsv
(row_prefix + to_2022_sales_row).flatten.join(",") + line_ending (row_prefix + to_2022_sales_row).flatten.join(",") + line_ending
end end
def to_custom_2022_csv_row(seed: nil, field_values: to_2022_row)
if seed
row = field_values.shuffle(random: Random.new(seed))
end
(row_prefix + row).flatten.join(",") + line_ending
end
def default_2022_field_numbers
(1..134).to_a
end
def custom_2022_field_numbers_row(seed: nil, field_numbers: default_2022_field_numbers)
if seed
["Bulk upload field number"] + field_numbers.shuffle(random: Random.new(seed))
else
["Bulk upload field number"] + field_numbers
end.flatten.join(",") + line_ending
end
def to_2023_csv_row(seed: nil) def to_2023_csv_row(seed: nil)
if seed if seed
row = to_2023_row.shuffle(random: Random.new(seed)) row = to_2023_row.shuffle(random: Random.new(seed))

Loading…
Cancel
Save