Browse Source

bulk upload log creation blanks invalid fields

pull/1208/head
Phil Lee 3 years ago
parent
commit
bb46bd8192
  1. 3
      app/services/bulk_upload/lettings/log_creator.rb
  2. 4
      spec/rails_helper.rb
  3. 37
      spec/services/bulk_upload/lettings/log_creator_spec.rb
  4. 254
      spec/support/bulk_upload/log_to_csv.rb

3
app/services/bulk_upload/lettings/log_creator.rb

@ -8,6 +8,9 @@ class BulkUpload::Lettings::LogCreator
def call def call
row_parsers.each do |row_parser| row_parsers.each do |row_parser|
row_parser.valid?
row_parser.log.blank_invalid_non_setup_fields!
row_parser.log.bulk_upload = bulk_upload row_parser.log.bulk_upload = bulk_upload
row_parser.log.save row_parser.log.save
end end

4
spec/rails_helper.rb

@ -32,8 +32,8 @@ Capybara.javascript_driver = :headless
# of increasing the boot-up time by auto-requiring all files in the support # of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually # directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary. # require only the support files necessary.
#
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } Dir[Rails.root.join("spec", "support", "**", "*.rb")].sort.each { |f| require f }
# Checks for pending migrations and applies them before tests are run. # Checks for pending migrations and applies them before tests are run.
# If you are not using ActiveRecord, you can remove these lines. # If you are not using ActiveRecord, you can remove these lines.

37
spec/services/bulk_upload/lettings/log_creator_spec.rb

@ -24,6 +24,43 @@ RSpec.describe BulkUpload::Lettings::LogCreator do
end end
end end
context "when a valid csv with row with one invalid non setup field" do
let(:file) { Tempfile.new }
let(:path) { file.path }
let(:log) do
build(
:lettings_log,
:completed,
renttype: 3,
age1: 5,
owning_organisation: owning_org,
managing_organisation: owning_org,
national: 18,
waityear: 9,
joint: 2,
tenancy: 9,
ppcodenk: 0,
)
end
before do
5.times { file.write "\n" }
file.write(BulkUpload::LogToCsv.new(log:).to_csv_row)
file.rewind
end
it "creates the log" do
expect { service.call }.to change(LettingsLog, :count).by(1)
end
it "blanks invalid field" do
service.call
record = LettingsLog.last
expect(record.age1).to be_blank
end
end
context "when valid csv with existing log" do context "when valid csv with existing log" do
xit "what should happen?" xit "what should happen?"
end end

254
spec/support/bulk_upload/log_to_csv.rb

@ -0,0 +1,254 @@
class BulkUpload::LogToCsv
attr_reader :log
def initialize(log:)
@log = log
end
def to_csv_row
[
nil, # 0
log.renttype, # 1
nil,
nil,
log.scheme&.old_visible_id,
log.location&.old_visible_id,
nil,
log.tenancycode,
log.startertenancy,
log.tenancy,
log.tenancyother, # 10
log.tenancylength,
log.age1,
log.age2,
log.age3,
log.age4,
log.age5,
log.age6,
log.age7,
log.age8,
log.sex1, # 20
log.sex2,
log.sex3,
log.sex4,
log.sex5,
log.sex6,
log.sex7,
log.sex8,
log.relat2,
log.relat3,
log.relat4, # 30
log.relat5,
log.relat6,
log.relat7,
log.relat8,
log.ecstat1,
log.ecstat2,
log.ecstat3,
log.ecstat4,
log.ecstat5,
log.ecstat6, # 40
log.ecstat7,
log.ecstat8,
log.ethnic,
log.national,
log.armedforces,
log.reservist,
log.preg_occ,
log.hb,
log.benefits,
log.earnings, # 50
net_income_known,
nil,
log.reasonother,
nil,
nil,
nil,
nil,
nil,
nil,
nil, # 60
log.prevten,
log.prevloc,
((log.ppostcode_full || "").split(" ") || [""]).first,
((log.ppostcode_full || "").split(" ") || [""]).last,
previous_postcode_known,
log.layear,
log.waityear,
homeless,
log.reasonpref,
log.rp_homeless, # 70
log.rp_insan_unsat,
log.rp_medwel,
log.rp_hardship,
log.rp_dontknow,
cbl,
chr,
cap,
log.referral,
log.period,
log.brent, # 80
log.scharge,
log.pscharge,
log.supcharg,
log.tcharge,
log.chcharge,
log.household_charge,
log.hbrentshortfall,
log.tshortfall,
log.voiddate&.day,
log.voiddate&.month, # 90
log.voiddate&.strftime("%y"),
log.mrcdate&.day,
log.mrcdate&.month,
log.mrcdate&.strftime("%y"),
nil,
log.startdate&.day,
log.startdate&.month,
log.startdate&.strftime("%y"),
log.offered,
log.propcode, # 100
log.beds,
log.unittype_gn,
log.builtype,
log.wchair,
log.unitletas,
log.rsnvac,
log.la,
((log.postcode_full || "").split(" ") || [""]).first,
((log.postcode_full || "").split(" ") || [""]).last,
nil, # 110
log.owning_organisation&.old_visible_id,
nil,
log.managing_organisation&.old_visible_id,
leftreg,
nil,
log.incfreq,
log.sheltered,
log.illness,
log.illness_type_1,
log.illness_type_2, # 120
log.illness_type_3,
log.illness_type_4,
log.illness_type_5,
log.illness_type_6,
log.illness_type_7,
log.illness_type_8,
log.illness_type_9,
log.illness_type_10,
london_affordable_rent,
intermediate_rent_type, # 130
log.irproduct_other,
log.declaration,
log.joint,
renewal,
"\n",
].join(",")
end
def renewal
case log.renewal
when 1
1
when 0
2
end
end
def london_affordable_rent
case log.renttype
when Imports::LettingsLogsImportService::RENT_TYPE[:london_affordable_rent]
1
end
end
def intermediate_rent_type
case log.renttype
when Imports::LettingsLogsImportService::RENT_TYPE[:rent_to_buy]
1
when Imports::LettingsLogsImportService::RENT_TYPE[:london_living_rent]
2
when Imports::LettingsLogsImportService::RENT_TYPE[:other_intermediate_rent_product]
3
end
end
def leftreg
case log.leftreg
when 3
3
when 1
4
when 2
5
when 0
6
end
end
def net_income_known
case log.net_income_known
when 0
1
when 1
2
when 2
4
end
end
def previous_postcode_known
case log.ppcodenk
when 1
1
when 0
2
end
end
def homeless
case log.homeless
when 1
1
when 11
12
end
end
def cbl
case log.cbl
when 0
2
when 1
1
end
end
def chr
case log.chr
when 0
2
when 1
1
end
end
def cap
case log.cap
when 0
2
when 1
1
end
end
end
Loading…
Cancel
Save