Browse Source

CLDC-2456 Sales collection year test fixes (#1689)

* feat: setup to replicate failures to fix

* feat: wip test fixes

* feat: remainder of current state test fixes

* feat: set form date to past to trigger errors to fix

* feat: revert, don't want this in final diff

* feat: fix row_parser tests

* feat: sales log importer and validator fixes

* feat: remainder of test fixes

* refactor: lint
pull/1676/head v0.3.29
natdeanlewissoftwire 2 years ago committed by GitHub
parent
commit
825076a522
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      spec/factories/sales_log.rb
  2. 8
      spec/features/sales_log_spec.rb
  3. 2
      spec/fixtures/files/sales_logs_csv_export_codes.csv
  4. 2
      spec/fixtures/files/sales_logs_csv_export_labels.csv
  5. 11
      spec/models/sales_log_spec.rb
  6. 32
      spec/requests/sales_logs_controller_spec.rb
  7. 7
      spec/services/bulk_upload/lettings/validator_spec.rb
  8. 6
      spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb
  9. 2
      spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb
  10. 9
      spec/services/bulk_upload/sales/log_creator_spec.rb
  11. 14
      spec/services/bulk_upload/sales/validator_spec.rb
  12. 16
      spec/services/bulk_upload/sales/year2022/row_parser_spec.rb
  13. 23
      spec/services/bulk_upload/sales/year2023/row_parser_spec.rb
  14. 9
      spec/services/csv/sales_log_csv_service_spec.rb
  15. 9
      spec/services/imports/sales_logs_import_service_spec.rb

16
spec/factories/sales_log.rb

@ -2,14 +2,14 @@ FactoryBot.define do
factory :sales_log do factory :sales_log do
created_by { FactoryBot.create(:user) } created_by { FactoryBot.create(:user) }
owning_organisation { created_by.organisation } owning_organisation { created_by.organisation }
created_at { Time.utc(2023, 2, 8, 16, 52, 15) } created_at { Time.zone.now }
updated_at { Time.utc(2023, 2, 8, 16, 52, 15) } updated_at { Time.zone.now }
trait :in_progress do trait :in_progress do
purchid { "PC123" } purchid { "PC123" }
ownershipsch { 2 } ownershipsch { 2 }
type { 8 } type { 8 }
jointpur { 2 } jointpur { 2 }
saledate { Time.utc(2023, 2, 2, 10, 36, 49) } saledate { Time.zone.today }
end end
trait :shared_ownership do trait :shared_ownership do
ownershipsch { 1 } ownershipsch { 1 }
@ -39,7 +39,7 @@ FactoryBot.define do
purchid { rand(999_999_999).to_s } purchid { rand(999_999_999).to_s }
ownershipsch { 2 } ownershipsch { 2 }
type { 8 } type { 8 }
saledate { Time.utc(2023, 2, 2, 10, 36, 49) } saledate { Time.zone.today }
jointpur { 1 } jointpur { 1 }
beds { 2 } beds { 2 }
jointmore { 1 } jointmore { 1 }
@ -81,6 +81,9 @@ FactoryBot.define do
income2nk { 0 } income2nk { 0 }
income2 { 10_000 } income2 { 10_000 }
inc2mort { 1 } inc2mort { 1 }
uprn_known { 0 }
address_line1 { "Address line 1" }
town_or_city { "Town or city" }
la_known { 1 } la_known { 1 }
la { "E09000003" } la { "E09000003" }
savingsnk { 1 } savingsnk { 1 }
@ -125,9 +128,14 @@ FactoryBot.define do
is_la_inferred { false } is_la_inferred { false }
mortgagelender { 5 } mortgagelender { 5 }
extrabor { 1 } extrabor { 1 }
ethnic_group2 { 17 }
nationalbuy2 { 13 }
buy2living { 3 }
proplen_asked { 1 }
end end
trait :with_uprn do trait :with_uprn do
uprn { rand(999_999_999_999).to_s } uprn { rand(999_999_999_999).to_s }
uprn_known { 1 }
end end
trait :deleted do trait :deleted do
status { 4 } status { 4 }

8
spec/features/sales_log_spec.rb

@ -38,16 +38,16 @@ RSpec.describe "Sales Log Features" do
visit("/sales-logs") visit("/sales-logs")
click_button("Create a new sales log") click_button("Create a new sales log")
click_link("Set up this sales log") click_link("Set up this sales log")
fill_in("sales_log[saledate(1i)]", with: "2022") fill_in("sales_log[saledate(1i)]", with: Time.zone.today.year)
fill_in("sales_log[saledate(2i)]", with: "08") fill_in("sales_log[saledate(2i)]", with: Time.zone.today.month)
fill_in("sales_log[saledate(3i)]", with: "10") fill_in("sales_log[saledate(3i)]", with: Time.zone.today.day)
click_button("Save and continue") click_button("Save and continue")
fill_in("sales_log[purchid]", with: "PC123") fill_in("sales_log[purchid]", with: "PC123")
click_button("Save and continue") click_button("Save and continue")
log_id = page.current_path.scan(/\d/).join log_id = page.current_path.scan(/\d/).join
visit("sales-logs/#{log_id}/setup/check-answers") visit("sales-logs/#{log_id}/setup/check-answers")
expect(page).to have_content("Sale completion date") expect(page).to have_content("Sale completion date")
expect(page).to have_content("2022") expect(page).to have_content(Time.zone.today.year)
expect(page).to have_content("Purchaser code") expect(page).to have_content("Purchaser code")
expect(page).to have_content("PC123") expect(page).to have_content("PC123")
end end

2
spec/fixtures/files/sales_logs_csv_export_codes.csv vendored

@ -1,2 +1,2 @@
id,status,created_at,updated_at,old_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,created_by_name,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,beds,proptype,builtype,pcodenk,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant id,status,created_at,updated_at,old_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,created_by_name,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,beds,proptype,builtype,pcodenk,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant
,completed,2023-02-08T16:52:15+00:00,2023-02-08T16:52:15+00:00,,2022,single log,false,DLUHC,Danny Rojas,2,2,2023,,2,8,,,,1,1,2,1,1,0,,,,,,,SW1A,1AA,1,E09000003,Barnet,1,2,1,30,X,17,17,18,1,1,P,35,X,,,,1,1,6,C,14,X,9,X,18,X,3,R,40,X,2,R,40,X,1,1,1,,,0,,,1,1,1,1,,,,1,4,5,1,1,0,10000,1,0,10000,1,4,1,,1,2,10,,,,,,,,,,,,,,,,,110000.0,,1,20000.0,5,,10,1,80000.0,,,1,100.0,,10000.0 ,completed,2023-02-08T00:00:00+00:00,2023-02-08T00:00:00+00:00,,2022,single log,false,DLUHC,Danny Rojas,8,2,2023,,2,8,,,,1,1,2,1,1,0,,,Address line 1,,Town or city,,SW1A,1AA,1,E09000003,Barnet,1,2,1,30,X,17,17,18,1,1,P,35,X,17,,13,1,1,6,C,14,X,9,X,18,X,3,R,40,X,2,R,40,X,1,1,1,,,0,,,1,1,1,1,,3,,1,4,5,1,1,0,10000,1,0,10000,1,4,1,,1,2,10,,,,,,,,,,,,,,,,,110000.0,,1,20000.0,5,,10,1,80000.0,,,1,100.0,,10000.0

1 id status created_at updated_at old_id collection_start_year creation_method is_dpo owning_organisation_name created_by_name day month year purchid ownershipsch type othtype companybuy buylivein jointpur jointmore beds proptype builtype pcodenk uprn uprn_confirmed address_line1 address_line2 town_or_city county pcode1 pcode2 la_known la la_label wchair noint privacynotice age1 sex1 ethnic_group ethnic national ecstat1 buy1livein relat2 age2 sex2 ethnic_group2 ethnicbuy2 nationalbuy2 ecstat2 buy2livein hholdcount relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 prevten ppcodenk ppostc1 ppostc2 previous_la_known prevloc prevloc_label pregyrha pregother pregla pregghb pregblank buy2living prevtenbuy2 hhregres hhregresstill armedforcesspouse disabled wheel income1nk income1 inc1mort income2nk income2 inc2mort hb savingsnk savings prevown prevshared proplen staircase stairbought stairowned staircasesale resale exday exmonth exyear hoday homonth hoyear lanomagr soctenant frombeds fromprop socprevten value equity mortgageused mortgage mortgagelender mortgagelenderother mortlen extrabor deposit cashdis mrent has_mscharge mscharge discount grant
2 completed 2023-02-08T16:52:15+00:00 2023-02-08T00:00:00+00:00 2023-02-08T16:52:15+00:00 2023-02-08T00:00:00+00:00 2022 single log false DLUHC Danny Rojas 2 8 2 2023 2 8 1 1 2 1 1 0 Address line 1 Town or city SW1A 1AA 1 E09000003 Barnet 1 2 1 30 X 17 17 18 1 1 P 35 X 17 13 1 1 6 C 14 X 9 X 18 X 3 R 40 X 2 R 40 X 1 1 1 0 1 1 1 1 3 1 4 5 1 1 0 10000 1 0 10000 1 4 1 1 2 10 110000.0 1 20000.0 5 10 1 80000.0 1 100.0 10000.0

2
spec/fixtures/files/sales_logs_csv_export_labels.csv vendored

@ -1,2 +1,2 @@
id,status,created_at,updated_at,old_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,created_by_name,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,beds,proptype,builtype,pcodenk,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant id,status,created_at,updated_at,old_id,collection_start_year,creation_method,is_dpo,owning_organisation_name,created_by_name,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,beds,proptype,builtype,pcodenk,uprn,uprn_confirmed,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la_known,la,la_label,wchair,noint,privacynotice,age1,sex1,ethnic_group,ethnic,national,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationalbuy2,ecstat2,buy2livein,hholdcount,relat3,age3,sex3,ecstat3,relat4,age4,sex4,ecstat4,relat5,age5,sex5,ecstat5,relat6,age6,sex6,ecstat6,prevten,ppcodenk,ppostc1,ppostc2,previous_la_known,prevloc,prevloc_label,pregyrha,pregother,pregla,pregghb,pregblank,buy2living,prevtenbuy2,hhregres,hhregresstill,armedforcesspouse,disabled,wheel,income1nk,income1,inc1mort,income2nk,income2,inc2mort,hb,savingsnk,savings,prevown,prevshared,proplen,staircase,stairbought,stairowned,staircasesale,resale,exday,exmonth,exyear,hoday,homonth,hoyear,lanomagr,soctenant,frombeds,fromprop,socprevten,value,equity,mortgageused,mortgage,mortgagelender,mortgagelenderother,mortlen,extrabor,deposit,cashdis,mrent,has_mscharge,mscharge,discount,grant
,completed,2023-02-08T16:52:15+00:00,2023-02-08T16:52:15+00:00,,2022,single log,false,DLUHC,Danny Rojas,2,2,2023,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,2,Flat or maisonette,Purpose built,Yes,,,,,,,SW1A,1AA,Yes,E09000003,Barnet,Yes,Yes,1,30,Non-binary,Buyer 1 prefers not to say,17,United Kingdom,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,,,,Full-time - 30 hours or more,Yes,6,Child,14,Non-binary,Child under 16,Other,18,Non-binary,"In government training into work, such as New Deal",Person prefers not to say,40,Non-binary,Part-time - Less than 30 hours,Person prefers not to say,40,Non-binary,Full-time - 30 hours or more,Local authority tenant,No,,,No,,,1,1,1,1,,,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,Don’t know ,No,,Yes,2,10,,,,,,,,,,,,,,,,,110000.0,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,10000.0 ,completed,2023-02-08T00:00:00+00:00,2023-02-08T00:00:00+00:00,,2022,single log,false,DLUHC,Danny Rojas,8,2,2023,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,2,Flat or maisonette,Purpose built,Yes,,,Address line 1,,Town or city,,SW1A,1AA,Yes,E09000003,Barnet,Yes,Yes,1,30,Non-binary,Buyer 1 prefers not to say,17,United Kingdom,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,17,,13,Full-time - 30 hours or more,Yes,6,Child,14,Non-binary,Child under 16,Other,18,Non-binary,"In government training into work, such as New Deal",Person prefers not to say,40,Non-binary,Part-time - Less than 30 hours,Person prefers not to say,40,Non-binary,Full-time - 30 hours or more,Local authority tenant,No,,,No,,,1,1,1,1,,3,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,Don’t know ,No,,Yes,2,10,,,,,,,,,,,,,,,,,110000.0,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,10000.0

1 id status created_at updated_at old_id collection_start_year creation_method is_dpo owning_organisation_name created_by_name day month year purchid ownershipsch type othtype companybuy buylivein jointpur jointmore beds proptype builtype pcodenk uprn uprn_confirmed address_line1 address_line2 town_or_city county pcode1 pcode2 la_known la la_label wchair noint privacynotice age1 sex1 ethnic_group ethnic national ecstat1 buy1livein relat2 age2 sex2 ethnic_group2 ethnicbuy2 nationalbuy2 ecstat2 buy2livein hholdcount relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 prevten ppcodenk ppostc1 ppostc2 previous_la_known prevloc prevloc_label pregyrha pregother pregla pregghb pregblank buy2living prevtenbuy2 hhregres hhregresstill armedforcesspouse disabled wheel income1nk income1 inc1mort income2nk income2 inc2mort hb savingsnk savings prevown prevshared proplen staircase stairbought stairowned staircasesale resale exday exmonth exyear hoday homonth hoyear lanomagr soctenant frombeds fromprop socprevten value equity mortgageused mortgage mortgagelender mortgagelenderother mortlen extrabor deposit cashdis mrent has_mscharge mscharge discount grant
2 completed 2023-02-08T16:52:15+00:00 2023-02-08T00:00:00+00:00 2023-02-08T16:52:15+00:00 2023-02-08T00:00:00+00:00 2022 single log false DLUHC Danny Rojas 2 8 2 2023 Yes - a discounted ownership scheme Right to Acquire (RTA) Yes Yes 2 Flat or maisonette Purpose built Yes Address line 1 Town or city SW1A 1AA Yes E09000003 Barnet Yes Yes 1 30 Non-binary Buyer 1 prefers not to say 17 United Kingdom Full-time - 30 hours or more Yes Partner 35 Non-binary 17 13 Full-time - 30 hours or more Yes 6 Child 14 Non-binary Child under 16 Other 18 Non-binary In government training into work, such as New Deal Person prefers not to say 40 Non-binary Part-time - Less than 30 hours Person prefers not to say 40 Non-binary Full-time - 30 hours or more Local authority tenant No No 1 1 1 1 3 Yes Yes No Yes Yes Yes 10000 Yes Yes 10000 Yes Don’t know No Yes 2 10 110000.0 Yes 20000.0 Cambridge Building Society 10 Yes 80000.0 Yes 100.0 10000.0

11
spec/models/sales_log_spec.rb

@ -125,7 +125,7 @@ RSpec.describe SalesLog, type: :model do
end end
it "is set to completed for a log with a saledate before 23/24" do it "is set to completed for a log with a saledate before 23/24" do
completed_sales_log.update!(proplen: nil, saledate: Time.zone.local(2022, 5, 1)) completed_sales_log.update!(proplen: nil, proplen_asked: 0, saledate: Time.zone.local(2022, 5, 1))
expect(completed_sales_log.in_progress?).to be(false) expect(completed_sales_log.in_progress?).to be(false)
expect(completed_sales_log.not_started?).to be(false) expect(completed_sales_log.not_started?).to be(false)
expect(completed_sales_log.completed?).to be(true) expect(completed_sales_log.completed?).to be(true)
@ -133,7 +133,7 @@ RSpec.describe SalesLog, type: :model do
end end
it "is set to in_progress for a log with a saledate after 23/24" do it "is set to in_progress for a log with a saledate after 23/24" do
completed_sales_log.update!(proplen: nil, saledate: Time.zone.local(2023, 5, 1)) completed_sales_log.update!(proplen: nil, proplen_asked: 0, saledate: Time.zone.local(2023, 5, 1))
expect(completed_sales_log.in_progress?).to be(true) expect(completed_sales_log.in_progress?).to be(true)
expect(completed_sales_log.not_started?).to be(false) expect(completed_sales_log.not_started?).to be(false)
expect(completed_sales_log.completed?).to be(false) expect(completed_sales_log.completed?).to be(false)
@ -163,6 +163,13 @@ RSpec.describe SalesLog, type: :model do
describe "derived variables" do describe "derived variables" do
let(:sales_log) { create(:sales_log, :completed) } let(:sales_log) { create(:sales_log, :completed) }
around do |example|
Timecop.freeze(Time.zone.local(2022, 7, 4)) do
example.run
end
Timecop.return
end
it "correctly derives and saves exday, exmonth and exyear" do it "correctly derives and saves exday, exmonth and exyear" do
sales_log.update!(exdate: Time.gm(2022, 5, 4), saledate: Time.gm(2022, 7, 4), ownershipsch: 1, type: 18, staircase: 2, resale: 2, proplen: 0) sales_log.update!(exdate: Time.gm(2022, 5, 4), saledate: Time.gm(2022, 7, 4), ownershipsch: 1, type: 18, staircase: 2, resale: 2, proplen: 0)
record_from_db = described_class.find(sales_log.id) record_from_db = described_class.find(sales_log.id)

32
spec/requests/sales_logs_controller_spec.rb

@ -65,7 +65,7 @@ RSpec.describe SalesLogsController, type: :request do
context "with a request containing invalid json parameters" do context "with a request containing invalid json parameters" do
let(:params) do let(:params) do
{ {
"saledate": Date.new(2022, 4, 1), "saledate": Time.zone.today,
"purchid": "1", "purchid": "1",
"ownershipsch": 1, "ownershipsch": 1,
"type": 2, "type": 2,
@ -236,17 +236,35 @@ RSpec.describe SalesLogsController, type: :request do
end end
context "with year filter" do context "with year filter" do
around do |example|
Timecop.freeze(2022, 12, 1) do
example.run
end
Timecop.return
end
before do
Timecop.freeze(2022, 4, 1)
sales_log_2022.update!(saledate: Time.zone.local(2022, 4, 1))
Timecop.freeze(2023, 1, 1)
sales_log_2022.update!(saledate: Time.zone.local(2023, 1, 1))
end
after do
Timecop.unfreeze
end
let!(:sales_log_2022) do let!(:sales_log_2022) do
FactoryBot.create(:sales_log, :in_progress, FactoryBot.create(:sales_log, :completed,
owning_organisation: organisation, owning_organisation: organisation,
saledate: Time.zone.local(2022, 4, 1)) created_by: user,
saledate: Time.zone.today)
end end
let!(:sales_log_2023) do let!(:sales_log_2023) do
sales_log = FactoryBot.build(:sales_log, :completed, FactoryBot.create(:sales_log,
owning_organisation: organisation, owning_organisation: organisation,
saledate: Time.zone.local(2023, 1, 1)) created_by: user,
sales_log.save!(validate: false) saledate: Time.zone.today)
sales_log
end end
it "shows sales logs for multiple selected years" do it "shows sales logs for multiple selected years" do

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

@ -387,6 +387,13 @@ RSpec.describe BulkUpload::Lettings::Validator do
let(:log_1) { build(:lettings_log, :completed, renttype: 1, created_by: user) } 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_2) { build(:lettings_log, :completed, renttype: 1, created_by: user) }
around do |example|
Timecop.freeze(Time.zone.local(2023, 2, 22)) do
example.run
end
Timecop.return
end
before do before do
file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_2022_csv_row) file.write(BulkUpload::LettingsLogToCsv.new(log: log_1, line_ending: "\r\n", col_offset: 0).to_2022_csv_row)
file.write(BulkUpload::LettingsLogToCsv.new(log: log_2, line_ending: "\r\n", col_offset: 0).to_2022_csv_row) file.write(BulkUpload::LettingsLogToCsv.new(log: log_2, line_ending: "\r\n", col_offset: 0).to_2022_csv_row)

6
spec/services/bulk_upload/lettings/year2022/row_parser_spec.rb

@ -13,7 +13,7 @@ RSpec.describe BulkUpload::Lettings::Year2022::RowParser do
let(:managing_org) { create(:organisation, :with_old_visible_id) } let(:managing_org) { create(:organisation, :with_old_visible_id) }
let(:scheme) { create(:scheme, :with_old_visible_id, owning_organisation: owning_org) } let(:scheme) { create(:scheme, :with_old_visible_id, owning_organisation: owning_org) }
let(:location) { create(:location, :with_old_visible_id, scheme:) } let(:location) { create(:location, :with_old_visible_id, scheme:) }
let(:mock_interrupion_ids) {} let(:mock_interruption_ids) {}
let(:setup_section_params) do let(:setup_section_params) do
{ {
@ -148,7 +148,7 @@ RSpec.describe BulkUpload::Lettings::Year2022::RowParser do
end end
before do before do
mock_interrupion_ids mock_interruption_ids
create(:organisation_relationship, parent_organisation: owning_org, child_organisation: managing_org) create(:organisation_relationship, parent_organisation: owning_org, child_organisation: managing_org)
end end
@ -993,7 +993,7 @@ RSpec.describe BulkUpload::Lettings::Year2022::RowParser do
context "when soft validation is triggered and the mappings for errors are not defined" do context "when soft validation is triggered and the mappings for errors are not defined" do
let(:attributes) { setup_section_params.merge({ field_12: 22, field_35: 5 }) } let(:attributes) { setup_section_params.merge({ field_12: 22, field_35: 5 }) }
# rubocop:disable RSpec/AnyInstance # rubocop:disable RSpec/AnyInstance
let(:mock_interrupion_ids) { allow_any_instance_of(Form::Page).to receive(:interruption_screen_question_ids).and_return(%w[fake_question_id]) } let(:mock_interruption_ids) { allow_any_instance_of(Form::Page).to receive(:interruption_screen_question_ids).and_return(%w[fake_question_id]) }
# rubocop:enable RSpec/AnyInstance # rubocop:enable RSpec/AnyInstance
it "does not crash" do it "does not crash" do

2
spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb

@ -6,7 +6,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do
let(:now) { Time.zone.now.beginning_of_day } let(:now) { Time.zone.now.beginning_of_day }
let(:attributes) { { bulk_upload: } } let(:attributes) { { bulk_upload: } }
let(:bulk_upload) { create(:bulk_upload, :lettings, user:, needstype: nil) } let(:bulk_upload) { create(:bulk_upload, :lettings, user:, needstype: nil, year: 2023) }
let(:user) { create(:user, organisation: owning_org) } let(:user) { create(:user, organisation: owning_org) }
let(:owning_org) { create(:organisation, :with_old_visible_id) } let(:owning_org) { create(:organisation, :with_old_visible_id) }

9
spec/services/bulk_upload/sales/log_creator_spec.rb

@ -10,6 +10,15 @@ RSpec.describe BulkUpload::Sales::LogCreator do
let(:path) { file_fixture("completed_2022_23_sales_bulk_upload.csv") } let(:path) { file_fixture("completed_2022_23_sales_bulk_upload.csv") }
describe "#call" do describe "#call" do
around do |example|
Timecop.freeze(Time.zone.local(2023, 2, 22)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
context "when a valid csv with new log" do context "when a valid csv with new log" do
it "creates a new log" do it "creates a new log" do
expect { service.call }.to change(SalesLog, :count) expect { service.call }.to change(SalesLog, :count)

14
spec/services/bulk_upload/sales/validator_spec.rb

@ -61,10 +61,15 @@ RSpec.describe BulkUpload::Sales::Validator do
let(:path) { file.path } let(:path) { file.path }
before do before do
Timecop.freeze(Time.utc(2022, 6, 3))
file.write(BulkUpload::SalesLogToCsv.new(log:, line_ending: "\r\n", col_offset: 0).to_2022_csv_row) file.write(BulkUpload::SalesLogToCsv.new(log:, line_ending: "\r\n", col_offset: 0).to_2022_csv_row)
file.close file.close
end end
after do
Timecop.unfreeze
end
it "is not valid" do it "is not valid" do
expect(validator).not_to be_valid expect(validator).not_to be_valid
end end
@ -144,6 +149,15 @@ RSpec.describe BulkUpload::Sales::Validator do
end end
describe "#create_logs?" do describe "#create_logs?" do
around do |example|
Timecop.freeze(Time.zone.local(2023, 2, 22)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
context "when all logs are valid" do context "when all logs are valid" do
let(:target_path) { file_fixture("completed_2022_23_sales_bulk_upload.csv") } let(:target_path) { file_fixture("completed_2022_23_sales_bulk_upload.csv") }

16
spec/services/bulk_upload/sales/year2022/row_parser_spec.rb

@ -107,6 +107,15 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
} }
end end
around do |example|
Timecop.freeze(Time.zone.local(2023, 2, 22)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
describe "#blank_row?" do describe "#blank_row?" do
context "when a new object" do context "when a new object" do
it "returns true" do it "returns true" do
@ -200,6 +209,13 @@ RSpec.describe BulkUpload::Sales::Year2022::RowParser do
context "when valid row" do context "when valid row" do
let(:attributes) { valid_attributes } let(:attributes) { valid_attributes }
around do |example|
Timecop.freeze(Date.new(2023, 2, 22)) do
example.run
end
Timecop.return
end
it "returns true" do it "returns true" do
expect(parser).to be_valid expect(parser).to be_valid
end end

23
spec/services/bulk_upload/sales/year2023/row_parser_spec.rb

@ -6,11 +6,9 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
let(:now) { Time.zone.parse("01/03/2023") } let(:now) { Time.zone.parse("01/03/2023") }
let(:attributes) { { bulk_upload: } } let(:attributes) { { bulk_upload: } }
let(:bulk_upload) { create(:bulk_upload, :sales, user:) } let(:bulk_upload) { create(:bulk_upload, :sales, user:, year: 2023) }
let(:user) { create(:user, organisation: owning_org) } let(:user) { create(:user, organisation: owning_org) }
let(:owning_org) { create(:organisation, :with_old_visible_id) } let(:owning_org) { create(:organisation, :with_old_visible_id) }
let(:setup_section_params) do let(:setup_section_params) do
{ {
bulk_upload:, bulk_upload:,
@ -26,7 +24,6 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
field_14: "2", # joint purchase field_14: "2", # joint purchase
} }
end end
let(:valid_attributes) do let(:valid_attributes) do
{ {
bulk_upload:, bulk_upload:,
@ -34,7 +31,7 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
field_1: owning_org.old_visible_id, field_1: owning_org.old_visible_id,
field_3: "22", field_3: "22",
field_4: "2", field_4: "2",
field_5: "23", field_5: "24",
field_6: "test id", field_6: "test id",
field_7: "1", field_7: "1",
field_8: "2", field_8: "2",
@ -60,6 +57,8 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
field_37: "R", field_37: "R",
field_38: "32", field_38: "32",
field_39: "F", field_39: "F",
field_40: "17",
field_41: "13",
field_43: "2", field_43: "2",
field_44: "1", field_44: "1",
field_45: "0", field_45: "0",
@ -70,6 +69,7 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
field_66: "E09000008", field_66: "E09000008",
field_69: "1", field_69: "1",
field_70: "1", field_70: "1",
field_71: "3",
field_73: "3", field_73: "3",
field_75: "5", field_75: "5",
field_76: "3", field_76: "3",
@ -85,11 +85,11 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
field_87: "1", field_87: "1",
field_88: "10", field_88: "10",
field_89: "10", field_89: "10",
field_91: "2", field_90: "1",
field_92: "30", field_92: "30",
field_93: "3", field_93: "3",
field_94: "22", field_94: "22",
field_95: "23", field_95: "24",
field_96: "3", field_96: "3",
field_97: "22", field_97: "22",
field_98: "3", field_98: "3",
@ -110,6 +110,15 @@ RSpec.describe BulkUpload::Sales::Year2023::RowParser do
} }
end end
around do |example|
Timecop.freeze(Time.zone.local(2024, 2, 22)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
describe "#blank_row?" do describe "#blank_row?" do
context "when a new object" do context "when a new object" do
it "returns true" do it "returns true" do

9
spec/services/csv/sales_log_csv_service_spec.rb

@ -7,6 +7,15 @@ RSpec.describe Csv::SalesLogCsvService do
let(:service) { described_class.new(export_type: "labels") } let(:service) { described_class.new(export_type: "labels") }
let(:csv) { CSV.parse(service.prepare_csv(SalesLog.all)) } let(:csv) { CSV.parse(service.prepare_csv(SalesLog.all)) }
around do |example|
Timecop.freeze(Time.utc(2023, 2, 8)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
it "calls the form handler to get all questions in order when initialized" do it "calls the form handler to get all questions in order when initialized" do
allow(FormHandler).to receive(:instance).and_return(form_handler_mock) allow(FormHandler).to receive(:instance).and_return(form_handler_mock)
allow(form_handler_mock).to receive(:ordered_sales_questions_for_all_years).and_return([]) allow(form_handler_mock).to receive(:ordered_sales_questions_for_all_years).and_return([])

9
spec/services/imports/sales_logs_import_service_spec.rb

@ -16,6 +16,15 @@ RSpec.describe Imports::SalesLogsImportService do
File.open("#{directory}/#{filename}.xml") File.open("#{directory}/#{filename}.xml")
end end
around do |example|
Timecop.freeze(Time.zone.local(2023, 2, 1)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
before do before do
allow(Organisation).to receive(:find_by).and_return(nil) allow(Organisation).to receive(:find_by).and_return(nil)
allow(Organisation).to receive(:find_by).with(old_visible_id: organisation.old_visible_id).and_return(organisation) allow(Organisation).to receive(:find_by).with(old_visible_id: organisation.old_visible_id).and_return(organisation)

Loading…
Cancel
Save