|
|
|
|
@ -5,8 +5,9 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
let(:organisation) { create(:organisation, old_visible_id: "3", rent_periods: [2]) } |
|
|
|
|
let(:user) { create(:user, organisation:) } |
|
|
|
|
let(:log) { build(:lettings_log, :completed, renttype: 1, period: 2, assigned_to: user, owning_organisation: organisation, managing_organisation: organisation) } |
|
|
|
|
let(:bulk_upload) { create(:bulk_upload, user:, year: 2024) } |
|
|
|
|
let(:log) { build(:lettings_log, :completed, period: 2, assigned_to: user) } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:bulk_upload) { create(:bulk_upload, user:, year: log.collection_start_year) } |
|
|
|
|
let(:path) { file.path } |
|
|
|
|
let(:file) { Tempfile.new } |
|
|
|
|
|
|
|
|
|
@ -21,9 +22,8 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
context "and file has extra invalid headers" do |
|
|
|
|
let(:seed) { rand } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_2024_field_numbers + %w[invalid_field_number] } |
|
|
|
|
let(:field_values) { log_to_csv.to_2024_row + %w[value_for_invalid_field_number] } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_field_numbers + %w[invalid_field_number] } |
|
|
|
|
let(:field_values) { log_to_csv.to_row + %w[value_for_invalid_field_number] } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(log_to_csv.custom_field_numbers_row(seed:, field_numbers:)) |
|
|
|
|
@ -38,9 +38,8 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
context "and file has too few valid headers" do |
|
|
|
|
let(:seed) { rand } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_2024_field_numbers } |
|
|
|
|
let(:field_values) { log_to_csv.to_2024_row } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_field_numbers } |
|
|
|
|
let(:field_values) { log_to_csv.to_row } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
field_numbers.delete_at(20) |
|
|
|
|
@ -58,9 +57,8 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
context "and file has too many valid headers" do |
|
|
|
|
let(:seed) { rand } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_2024_field_numbers + %w[23] } |
|
|
|
|
let(:field_values) { log_to_csv.to_2024_row + %w[value] } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_field_numbers + %w[23] } |
|
|
|
|
let(:field_values) { log_to_csv.to_row + %w[value] } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(log_to_csv.custom_field_numbers_row(seed:, field_numbers:)) |
|
|
|
|
@ -77,10 +75,10 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
context "when uploading a 2023 logs for 2024 bulk upload" do |
|
|
|
|
let(:log) { build(:lettings_log, :completed, startdate: Time.zone.local(2023, 5, 6), tenancycode: "5234234234234") } |
|
|
|
|
let(:bulk_upload) { build(:bulk_upload, user:, year: 2024)} |
|
|
|
|
|
|
|
|
|
context "with headers" do |
|
|
|
|
let(:seed) { rand } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:field_numbers) { log_to_csv.default_2024_field_numbers } |
|
|
|
|
let(:field_values) { log_to_csv.to_2024_row } |
|
|
|
|
|
|
|
|
|
@ -100,7 +98,7 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
describe "#call" do |
|
|
|
|
context "with an invalid 2024 csv" do |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:log) { build(:lettings_log, :completed, startdate: Time.zone.local(2024, 7, 1), period: 2, assigned_to: user) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
values = log_to_csv.to_2024_row |
|
|
|
|
@ -129,12 +127,10 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context "with a valid 2024 csv" do |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
|
|
|
|
|
context "with a valid csv" do |
|
|
|
|
before do |
|
|
|
|
file.write(log_to_csv.default_2024_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.default_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.rewind |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -145,11 +141,11 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
context "with arbitrary ordered invalid csv" do |
|
|
|
|
let(:seed) { 321 } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:) } |
|
|
|
|
let(:log) { build(:lettings_log, :completed, startdate: Time.zone.local(2024, 7, 1), period: 2, assigned_to: user) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
log.needstype = nil |
|
|
|
|
values = log_to_csv.to_2024_row |
|
|
|
|
values[3] = nil |
|
|
|
|
file.write(log_to_csv.default_2024_field_numbers_row(seed:)) |
|
|
|
|
file.write(log_to_csv.to_custom_csv_row(seed:, field_values: values)) |
|
|
|
|
file.close |
|
|
|
|
@ -175,14 +171,10 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context "when duplicate rows present" do |
|
|
|
|
let(:file) { Tempfile.new } |
|
|
|
|
let(:path) { file.path } |
|
|
|
|
let(:log) { build(:lettings_log, :completed) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log:, line_ending: "\r\n").default_2024_field_numbers_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log:, line_ending: "\r\n").to_2024_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log:, line_ending: "\r\n").to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.default_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.close |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -196,12 +188,12 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
{ line_ending: "\r\n", name: "windows" }, |
|
|
|
|
].each do |test_case| |
|
|
|
|
context "with #{test_case[:name]} line endings" do |
|
|
|
|
context "with a valid file" do |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:, line_ending: test_case[:line_ending]) } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:, line_ending: test_case[:line_ending]) } |
|
|
|
|
|
|
|
|
|
context "with a valid file" do |
|
|
|
|
before do |
|
|
|
|
file.write(log_to_csv.default_2024_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.default_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.rewind |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -212,11 +204,10 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
|
|
|
|
|
context "with an invalid file" do |
|
|
|
|
let(:log) { build(:lettings_log, :completed, assigned_to: user, owning_organisation: organisation, managing_organisation: organisation, declaration: nil) } |
|
|
|
|
let(:log_to_csv) { BulkUpload::LettingsLogToCsv.new(log:, line_ending: test_case[:line_ending]) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(log_to_csv.default_2024_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.default_field_numbers_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.rewind |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -227,13 +218,11 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context "without headers" do |
|
|
|
|
let(:log) { build(:lettings_log, :completed) } |
|
|
|
|
let(:file) { Tempfile.new } |
|
|
|
|
let(:path) { file.path } |
|
|
|
|
context "with a 2024 csv without headers" do |
|
|
|
|
let(:log) { build(:lettings_log, :completed, startdate: Time.zone.local(2024, 7, 1), period: 2, assigned_to: user) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log:, line_ending: "\r\n", col_offset: 0).to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.close |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -244,29 +233,29 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
describe "#create_logs?" do |
|
|
|
|
context "when a log is not valid?" do |
|
|
|
|
let(:log_1) { build(:lettings_log, :completed, assigned_to: user) } |
|
|
|
|
let(:log_2) { build(:lettings_log, :completed, assigned_to: user) } |
|
|
|
|
context "when a log has a clearable, non-setup error" do |
|
|
|
|
let(:log_1) { build(:lettings_log, :completed, period: 2, assigned_to: user) } |
|
|
|
|
let(:log_2) { build(:lettings_log, :completed, period: 2, assigned_to: user) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_2024_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_2, line_ending: "\r\n", col_offset: 0, overrides: { illness: 100 }).to_2024_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, col_offset: 0).to_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_2, col_offset: 0, overrides: { age1: 5 }).to_csv_row) |
|
|
|
|
file.close |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
it "returns false" do |
|
|
|
|
validator.call |
|
|
|
|
expect(validator).not_to be_create_logs |
|
|
|
|
expect(validator).to be_create_logs |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context "when all logs valid?" do |
|
|
|
|
let(:log_1) { build(:lettings_log, :completed, renttype: 1, assigned_to: user) } |
|
|
|
|
let(:log_2) { build(:lettings_log, :completed, renttype: 1, assigned_to: user) } |
|
|
|
|
let(:log_1) { build(:lettings_log, :completed, period: 2, assigned_to: user) } |
|
|
|
|
let(:log_2) { build(:lettings_log, :completed, period: 2, assigned_to: user) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_2024_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_2, line_ending: "\r\n", col_offset: 0).to_2024_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, col_offset: 0).to_csv_row) |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_2, col_offset: 0).to_csv_row) |
|
|
|
|
file.close |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -276,13 +265,13 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context "when a single log wants to block log creation" do |
|
|
|
|
context "when a log wants to block log creation" do |
|
|
|
|
let(:unaffiliated_org) { create(:organisation) } |
|
|
|
|
|
|
|
|
|
let(:log_1) { build(:lettings_log, :completed, renttype: 1, assigned_to: user, owning_organisation: unaffiliated_org) } |
|
|
|
|
let(:log) { build(:lettings_log, :completed, assigned_to: user, owning_organisation: unaffiliated_org) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.close |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
@ -293,10 +282,10 @@ RSpec.describe BulkUpload::Lettings::Validator do
|
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
context "when a log has incomplete setup section" do |
|
|
|
|
let(:log) { build(:lettings_log, :completed, renttype: 1, declaration: nil, assigned_to: user) } |
|
|
|
|
let(:log) { build(:lettings_log, :completed, declaration: nil, assigned_to: user) } |
|
|
|
|
|
|
|
|
|
before do |
|
|
|
|
file.write(BulkUpload::LettingsLogToCsv.new(log:, line_ending: "\r\n", col_offset: 0).to_2024_csv_row) |
|
|
|
|
file.write(log_to_csv.to_csv_row) |
|
|
|
|
file.close |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
|