Browse Source

Merge branch 'main' into CLDC-1969-completed-sections-count-bug

pull/1509/head
natdeanlewissoftwire 3 years ago
parent
commit
0401b6b01c
  1. 14
      app/models/form_handler.rb
  2. 2
      app/models/forms/bulk_upload_lettings/year.rb
  3. 2
      app/models/location.rb
  4. 2
      app/models/scheme.rb
  5. 2
      app/views/locations/toggle_active.html.erb
  6. 18
      config/forms/2022_2023.json
  7. 16
      config/local_authorities_data/initial_local_authorities.csv
  8. 15
      config/local_authorities_data/local_authority_links_2022.csv
  9. 8
      db/seeds.rb
  10. 9
      spec/components/check_answers_summary_list_card_component_spec.rb
  11. 4
      spec/components/log_summary_component_spec.rb
  12. 8
      spec/factories/lettings_log.rb
  13. 2
      spec/features/schemes_spec.rb
  14. 2
      spec/fixtures/exports/general_needs_log.csv
  15. 8
      spec/fixtures/exports/general_needs_log.xml
  16. 6
      spec/fixtures/exports/general_needs_log_23_24.xml
  17. 2
      spec/fixtures/exports/supported_housing_logs.xml
  18. 10
      spec/helpers/locations_helper_spec.rb
  19. 28
      spec/helpers/schemes_helper_spec.rb
  20. 2
      spec/models/form/lettings/pages/address_spec.rb
  21. 9
      spec/models/form/lettings/questions/la_spec.rb
  22. 9
      spec/models/form/lettings/questions/prevloc_spec.rb
  23. 6
      spec/models/form/lettings/questions/uprn_confirmation_spec.rb
  24. 7
      spec/models/form/sales/pages/address_spec.rb
  25. 4
      spec/models/form/sales/pages/uprn_confirmation_spec.rb
  26. 3
      spec/models/form/sales/pages/uprn_spec.rb
  27. 18
      spec/models/form/sales/questions/prevloc_spec.rb
  28. 18
      spec/models/form/sales/questions/property_local_authority_spec.rb
  29. 9
      spec/models/form/sales/questions/uprn_confirmation_spec.rb
  30. 3
      spec/models/form/sales/questions/uprn_spec.rb
  31. 2
      spec/models/form_handler_spec.rb
  32. 4
      spec/models/forms/bulk_upload_sales/year_spec.rb
  33. 30
      spec/models/location_spec.rb
  34. 12
      spec/models/sales_log_spec.rb
  35. 6
      spec/models/scheme_spec.rb
  36. 9
      spec/models/validations/sales/setup_validations_spec.rb
  37. 11
      spec/models/validations/soft_validations_spec.rb
  38. 4
      spec/requests/bulk_upload_controller_spec.rb
  39. 4
      spec/requests/bulk_upload_lettings_logs_controller_spec.rb
  40. 6
      spec/requests/lettings_logs_controller_spec.rb
  41. 17
      spec/services/bulk_upload/lettings/validator_spec.rb
  42. 51
      spec/services/bulk_upload/processor_spec.rb

14
app/models/form_handler.rb

@ -57,7 +57,11 @@ class FormHandler
forms["current_lettings"] = Form.new(nil, current_collection_start_year, LETTINGS_SECTIONS, "lettings") if forms["current_lettings"].blank?
forms["next_lettings"] = Form.new(nil, next_collection_start_year, LETTINGS_SECTIONS, "lettings") if forms["next_lettings"].blank?
forms
if Rails.env.test?
forms.merge({ fake_lettings_2021: Form.new("spec/fixtures/forms/2021_2022.json"), real_lettings_2021: Form.new("config/forms/2021_2022.json") })
else
forms
end
end
def lettings_form_for_start_year(year)
@ -97,6 +101,14 @@ class FormHandler
@forms = get_all_forms
end
def earliest_open_collection_start_date(now: Time.zone.now)
if in_crossover_period?(now:)
collection_start_date(now) - 1.year
else
collection_start_date(now)
end
end
private
def get_all_forms

2
app/models/forms/bulk_upload_lettings/year.rb

@ -35,8 +35,8 @@ module Forms
def possible_years
[
FormHandler.instance.lettings_forms["next_lettings"].start_date.year,
FormHandler.instance.lettings_forms["current_lettings"].start_date.year,
FormHandler.instance.lettings_forms["previous_lettings"].start_date.year,
]
end
end

2
app/models/location.rb

@ -70,7 +70,7 @@ class Location < ApplicationRecord
def available_from
return startdate if startdate.present?
FormHandler.instance.collection_start_date(created_at)
FormHandler.instance.earliest_open_collection_start_date(now: created_at)
end
def open_deactivation

2
app/models/scheme.rb

@ -219,7 +219,7 @@ class Scheme < ApplicationRecord
end
def available_from
FormHandler.instance.collection_start_date(created_at)
FormHandler.instance.earliest_open_collection_start_date(now: created_at)
end
def open_deactivation

2
app/views/locations/toggle_active.html.erb

@ -11,7 +11,7 @@
<%= form_with model: @location_deactivation_period, url: toggle_location_form_path(action, @location), method: "patch", local: true do |f| %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds">
<% collection_start_date = FormHandler.instance.current_collection_start_date %>
<% collection_start_date = FormHandler.instance.earliest_open_collection_start_date(now: @location.available_from) %>
<%= f.govuk_error_summary %>
<%= f.govuk_radio_buttons_fieldset date_type_question(action),
legend: { text: I18n.t("questions.location.toggle_active.apply_from") },

18
config/forms/2022_2023.json

@ -145,7 +145,6 @@
"E09000001": "City of London",
"E07000071": "Colchester",
"E07000029": "Copeland",
"E07000150": "Corby",
"E06000052": "Cornwall",
"E07000079": "Cotswold",
"E06000047": "County Durham",
@ -156,7 +155,6 @@
"E07000096": "Dacorum",
"E06000005": "Darlington",
"E07000107": "Dartford",
"E07000151": "Daventry",
"E06000015": "Derby",
"E07000035": "Derbyshire Dales",
"E08000017": "Doncaster",
@ -169,7 +167,6 @@
"E07000085": "East Hampshire",
"E07000242": "East Hertfordshire",
"E07000137": "East Lindsey",
"E07000152": "East Northamptonshire",
"E06000011": "East Riding of Yorkshire",
"E07000193": "East Staffordshire",
"E07000244": "East Suffolk",
@ -225,7 +222,6 @@
"E06000053": "Isles of Scilly",
"E09000019": "Islington",
"E09000020": "Kensington and Chelsea",
"E07000153": "Kettering",
"E07000146": "King’s Lynn and West Norfolk",
"E06000010": "Kingston upon Hull, City of",
"E09000021": "Kingston upon Thames",
@ -268,11 +264,11 @@
"E07000139": "North Kesteven",
"E06000013": "North Lincolnshire",
"E07000147": "North Norfolk",
"E06000061": "North Northamptonshire",
"E06000024": "North Somerset",
"E08000022": "North Tyneside",
"E07000218": "North Warwickshire",
"E07000134": "North West Leicestershire",
"E07000154": "Northampton",
"E06000057": "Northumberland",
"E07000148": "Norwich",
"E06000018": "Nottingham",
@ -324,7 +320,6 @@
"E07000141": "South Kesteven",
"E07000031": "South Lakeland",
"E07000149": "South Norfolk",
"E07000155": "South Northamptonshire",
"E07000179": "South Oxfordshire",
"E07000126": "South Ribble",
"E07000189": "South Somerset",
@ -377,12 +372,12 @@
"E07000103": "Watford",
"E07000216": "Waverley",
"E07000065": "Wealden",
"E07000156": "Wellingborough",
"E07000241": "Welwyn Hatfield",
"E06000037": "West Berkshire",
"E07000047": "West Devon",
"E07000127": "West Lancashire",
"E07000142": "West Lindsey",
"E06000062": "West Northamptonshire",
"E07000181": "West Oxfordshire",
"E07000245": "West Suffolk",
"E09000033": "Westminster",
@ -6603,7 +6598,6 @@
"E07000071": "Colchester",
"W06000003": "Conwy",
"E07000029": "Copeland",
"E07000150": "Corby",
"E06000052": "Cornwall",
"E07000079": "Cotswold",
"E06000047": "County Durham",
@ -6614,7 +6608,6 @@
"E07000096": "Dacorum",
"E06000005": "Darlington",
"E07000107": "Dartford",
"E07000151": "Daventry",
"W06000004": "Denbighshire",
"E06000015": "Derby",
"E07000035": "Derbyshire Dales",
@ -6634,7 +6627,6 @@
"E07000242": "East Hertfordshire",
"E07000137": "East Lindsey",
"S12000010": "East Lothian",
"E07000152": "East Northamptonshire",
"S12000011": "East Renfrewshire",
"E06000011": "East Riding of Yorkshire",
"E07000193": "East Staffordshire",
@ -6698,7 +6690,6 @@
"E06000053": "Isles of Scilly",
"E09000019": "Islington",
"E09000020": "Kensington and Chelsea",
"E07000153": "Kettering",
"E07000146": "King’s Lynn and West Norfolk",
"E06000010": "Kingston upon Hull, City of",
"E09000021": "Kingston upon Thames",
@ -6754,11 +6745,11 @@
"S12000050": "North Lanarkshire",
"E06000013": "North Lincolnshire",
"E07000147": "North Norfolk",
"E06000061": "North Northamptonshire",
"E06000024": "North Somerset",
"E08000022": "North Tyneside",
"E07000218": "North Warwickshire",
"E07000134": "North West Leicestershire",
"E07000154": "Northampton",
"E06000057": "Northumberland",
"E07000148": "Norwich",
"E06000018": "Nottingham",
@ -6820,7 +6811,6 @@
"E07000031": "South Lakeland",
"S12000029": "South Lanarkshire",
"E07000149": "South Norfolk",
"E07000155": "South Northamptonshire",
"E07000179": "South Oxfordshire",
"E07000126": "South Ribble",
"E07000189": "South Somerset",
@ -6877,7 +6867,6 @@
"E07000103": "Watford",
"E07000216": "Waverley",
"E07000065": "Wealden",
"E07000156": "Wellingborough",
"E07000241": "Welwyn Hatfield",
"E06000037": "West Berkshire",
"E07000047": "West Devon",
@ -6885,6 +6874,7 @@
"E07000127": "West Lancashire",
"E07000142": "West Lindsey",
"S12000040": "West Lothian",
"E06000062": "West Northamptonshire",
"E07000181": "West Oxfordshire",
"E07000245": "West Suffolk",
"E09000033": "Westminster",

16
config/local_authorities_data/initial_local_authorities.csv

@ -74,7 +74,7 @@ E09000001,City of London,2021,
S12000005,Clackmannanshire,2021,
E07000071,Colchester,2021,
W06000003,Conwy,2021,
E07000150,Corby,2021,
E07000150,Corby,2021,2022
E06000052,Cornwall,2021,
E07000079,Cotswold,2021,
E06000047,County Durham,2021,
@ -85,7 +85,7 @@ E06000063,Cumberland,2023,
E07000096,Dacorum,2021,
E06000005,Darlington,2021,
E07000107,Dartford,2021,
E07000151,Daventry,2021,
E07000151,Daventry,2021,2022
W06000004,Denbighshire,2021,
E06000015,Derby,2021,
E07000035,Derbyshire Dales,2021,
@ -105,7 +105,7 @@ E07000085,East Hampshire,2021,
E07000242,East Hertfordshire,2021,
E07000137,East Lindsey,2021,
S12000010,East Lothian,2021,
E07000152,East Northamptonshire,2021,
E07000152,East Northamptonshire,2021,2022,
S12000011,East Renfrewshire,2021,
E06000011,East Riding of Yorkshire,2021,
E07000193,East Staffordshire,2021,
@ -166,7 +166,7 @@ E06000046,Isle of Wight,2021,
E06000053,Isles of Scilly,2021,
E09000019,Islington,2021,
E09000020,Kensington and Chelsea,2021,
E07000153,Kettering,2021,
E07000153,Kettering,2021,2022,
E07000146,King’s Lynn and West Norfolk,2021,
E06000010,"Kingston upon Hull, City of",2021,
E09000021,Kingston upon Thames,2021,
@ -225,7 +225,7 @@ E06000024,North Somerset,2021,
E08000022,North Tyneside,2021,
E07000218,North Warwickshire,2021,
E07000134,North West Leicestershire,2021,
E07000154,Northampton,2021,
E07000154,Northampton,2021,2022,
E06000057,Northumberland,2021,
E07000148,Norwich,2021,
E06000018,Nottingham,2021,
@ -281,7 +281,7 @@ E07000140,South Holland,2021,
E07000141,South Kesteven,2021,
S12000029,South Lanarkshire,2021,
E07000149,South Norfolk,2021,
E07000155,South Northamptonshire,2021,
E07000155,South Northamptonshire,2021,2022,
E07000179,South Oxfordshire,2021,
E07000126,South Ribble,2021,
E07000196,South Staffordshire,2021,
@ -337,7 +337,7 @@ E07000222,Warwick,2021,
E07000103,Watford,2021,
E07000216,Waverley,2021,
E07000065,Wealden,2021,
E07000156,Wellingborough,2021,
E07000156,Wellingborough,2021,2022,
E07000241,Welwyn Hatfield,2021,
E06000037,West Berkshire,2021,
E07000047,West Devon,2021,
@ -386,3 +386,5 @@ E07000187,Mendip,2021,2023,
E07000188,Sedgemoor,2021,2023,
E07000246,Somerset West and Taunton,2021,2023,
E07000189,South Somerset,2021,2023,
E06000061,North Northamptonshire,2022,
E06000062,West Northamptonshire,2022,

Can't render this file because it has a wrong number of fields in line 108.

15
config/local_authorities_data/local_authority_links_2022.csv

@ -0,0 +1,15 @@
local_authority_code,linked_local_authority_code
E06000061,E07000150
E06000061,E07000152
E06000061,E07000153
E06000061,E07000156
E07000150,E06000061
E07000152,E06000061
E07000153,E06000061
E07000156,E06000061
E06000062,E07000151
E06000062,E07000154
E06000062,E07000155
E07000151,E06000062
E07000154,E06000062
E07000155,E06000062
1 local_authority_code linked_local_authority_code
2 E06000061 E07000150
3 E06000061 E07000152
4 E06000061 E07000153
5 E06000061 E07000156
6 E07000150 E06000061
7 E07000152 E06000061
8 E07000153 E06000061
9 E07000156 E06000061
10 E06000062 E07000151
11 E06000062 E07000154
12 E06000062 E07000155
13 E07000151 E06000062
14 E07000154 E06000062
15 E07000155 E06000062

8
db/seeds.rb

@ -316,9 +316,11 @@ unless Rails.env.test?
end
if (Rails.env.development? || Rails.env.review?) && LocalAuthorityLink.count.zero?
links_data_path = "config/local_authorities_data/local_authority_links_2023.csv"
service = Imports::LocalAuthorityLinksService.new(path: links_data_path)
service.call
links_data_paths = ["config/local_authorities_data/local_authority_links_2023.csv", "config/local_authorities_data/local_authority_links_2022.csv"]
links_data_paths.each do |path|
service = Imports::LocalAuthorityLinksService.new(path:)
service.call
end
pp "Seeded local authority links"
end

9
spec/components/check_answers_summary_list_card_component_spec.rb

@ -6,6 +6,15 @@ RSpec.describe CheckAnswersSummaryListCardComponent, type: :component do
let(:rendered) { render_inline(component) }
context "when before 23/24 collection" do
before do
Timecop.freeze(Time.zone.local(2023, 1, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
end
context "when given a set of questions" do
let(:user) { build(:user) }
let(:log) { build(:lettings_log, :completed, age2: 99, startdate: Time.zone.local(2021, 5, 1)) }

4
spec/components/log_summary_component_spec.rb

@ -16,8 +16,8 @@ RSpec.describe LogSummaryComponent, type: :component do
expect(result).to have_text(lettings_log.tenancycode)
expect(result).to have_text(lettings_log.propcode)
expect(result).to have_text("General needs")
expect(result).to have_text("Tenancy starts #{Time.zone.today.strftime('%e %B %Y')}")
expect(result).to have_text("Created #{Time.zone.today.strftime('%e %B %Y')}")
expect(result).to have_text("Tenancy starts #{Time.zone.today.strftime('%e %B %Y').strip}")
expect(result).to have_text("Created #{Time.zone.today.strftime('%e %B %Y').strip}")
expect(result).to have_text("by Danny Rojas")
expect(result).to have_content("Owned by\n DLUHC")
expect(result).to have_content("Managed by\n DLUHC")

8
spec/factories/lettings_log.rb

@ -60,8 +60,8 @@ FactoryBot.define do
illness { 1 }
preg_occ { 2 }
startertenancy { 1 }
tenancylength { nil }
tenancy { 1 }
tenancylength { 2 }
tenancy { 4 }
ppostcode_full { Faker::Address.postcode }
rsnvac { 6 }
unittype_gn { 7 }
@ -142,6 +142,10 @@ FactoryBot.define do
declaration { 1 }
first_time_property_let_as_social_housing { 0 }
referral { 2 }
uprn_known { 0 }
joint { 3 }
address_line1 { "fake address" }
town_or_city { "London" }
end
trait :export do
tenancycode { "987654" }

2
spec/features/schemes_spec.rb

@ -761,7 +761,7 @@ RSpec.describe "Schemes scheme Features" do
expect(page).to have_content("Deactivated")
end
it "allows to reactivate a location" do
xit "allows to reactivate a location" do
click_link("Reactivate this location")
expect(page).to have_current_path("/schemes/#{scheme.id}/locations/#{deactivated_location.id}/new-reactivation")
expect(page).to have_content("Reactivate #{deactivated_location.name}")

2
spec/fixtures/exports/general_needs_log.csv vendored

@ -1,2 +1,2 @@
status,tenancycode,age1,sex1,ethnic,national,prevten,ecstat1,hhmemb,age2,sex2,ecstat2,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,leftreg,reservist,illness,preg_occ,startertenancy,tenancylength,tenancy,ppostcode_full,rsnvac,unittype_gn,beds,offered,wchair,earnings,incfreq,benefits,period,layear,waityear,postcode_full,reasonpref,cbl,chr,cap,reasonother,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,illness_type_1,illness_type_2,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,irproduct_other,reason,propcode,la,prevloc,hb,hbrentshortfall,mrcdate,incref,startdate,armedforces,unitletas,builtype,voiddate,renttype,needstype,lettype,totchild,totelder,totadult,nocharge,referral,brent,scharge,pscharge,supcharg,tcharge,tshortfall,chcharge,ppcodenk,has_benefits,renewal,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat2,relat3,relat4,relat5,relat6,relat7,relat8,lar,irproduct,joint,sheltered,hhtype,new_old,vacdays,uprn,uprn_known,uprn_confirmed,address_line1,address_line2,town_or_city,county,formid,owningorgid,owningorgname,hcnum,maningorgid,maningorgname,manhcnum,createddate,uploaddate
2,BZ737,35,F,2,13,6,0,2,32,M,6,,,,,,,,,,,,,,,,,,,1,4,4,1,1,2,1,5,1,SE2 6RT,6,7,3,2,1,68,1,1,2,2,7,NW1 5TY,1,2,1,2,,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,,,4,123,E09000003,E07000105,6,1,2020-05-05T10:36:49+01:00,0,2022-02-02T10:36:49+00:00,1,2,1,2019-11-03T00:00:00+00:00,2,1,7,0,0,2,0,2,200.0,50.0,40.0,35.0,325.0,12.0,,1,1,0,100.0,25.0,20.0,17.5,162.5,6.0,0,1,,2,P,,,,,,,,,,,4,2,638,,,,,,,,{id},{owning_org_id},DLUHC,1234,{managing_org_id},DLUHC,1234,2022-05-01T00:00:00+01:00,2022-05-01T00:00:00+01:00
2,BZ737,35,F,2,13,6,0,2,32,M,6,,,,,,,,,,,,,,,,,,,1,4,4,1,1,2,1,5,4,SE2 6RT,6,7,3,2,1,68,1,1,2,2,7,NW1 5TY,1,2,1,2,,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,,,4,123,E09000003,E07000105,6,1,2020-05-05T10:36:49+01:00,0,2022-02-02T10:36:49+00:00,1,2,1,2019-11-03T00:00:00+00:00,2,1,7,0,0,2,0,2,200.0,50.0,40.0,35.0,325.0,12.0,,1,1,0,100.0,25.0,20.0,17.5,162.5,6.0,0,1,,2,P,,,,,,,,,3,,4,2,638,,0,,fake address,,London,,{id},{owning_org_id},DLUHC,1234,{managing_org_id},DLUHC,1234,2022-05-01T00:00:00+01:00,2022-05-01T00:00:00+01:00

1 status tenancycode age1 sex1 ethnic national prevten ecstat1 hhmemb age2 sex2 ecstat2 age3 sex3 ecstat3 age4 sex4 ecstat4 age5 sex5 ecstat5 age6 sex6 ecstat6 age7 sex7 ecstat7 age8 sex8 ecstat8 homeless underoccupation_benefitcap leftreg reservist illness preg_occ startertenancy tenancylength tenancy ppostcode_full rsnvac unittype_gn beds offered wchair earnings incfreq benefits period layear waityear postcode_full reasonpref cbl chr cap reasonother housingneeds_a housingneeds_b housingneeds_c housingneeds_f housingneeds_g housingneeds_h illness_type_1 illness_type_2 illness_type_3 illness_type_4 illness_type_8 illness_type_5 illness_type_6 illness_type_7 illness_type_9 illness_type_10 rp_homeless rp_insan_unsat rp_medwel rp_hardship rp_dontknow tenancyother irproduct_other reason propcode la prevloc hb hbrentshortfall mrcdate incref startdate armedforces unitletas builtype voiddate renttype needstype lettype totchild totelder totadult nocharge referral brent scharge pscharge supcharg tcharge tshortfall chcharge ppcodenk has_benefits renewal wrent wscharge wpschrge wsupchrg wtcharge wtshortfall refused housingneeds wchchrg newprop relat2 relat3 relat4 relat5 relat6 relat7 relat8 lar irproduct joint sheltered hhtype new_old vacdays uprn uprn_known uprn_confirmed address_line1 address_line2 town_or_city county formid owningorgid owningorgname hcnum maningorgid maningorgname manhcnum createddate uploaddate
2 2 BZ737 35 F 2 13 6 0 2 32 M 6 1 4 4 1 1 2 1 5 1 4 SE2 6RT 6 7 3 2 1 68 1 1 2 2 7 NW1 5TY 1 2 1 2 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 4 123 E09000003 E07000105 6 1 2020-05-05T10:36:49+01:00 0 2022-02-02T10:36:49+00:00 1 2 1 2019-11-03T00:00:00+00:00 2 1 7 0 0 2 0 2 200.0 50.0 40.0 35.0 325.0 12.0 1 1 0 100.0 25.0 20.0 17.5 162.5 6.0 0 1 2 P 3 4 2 638 0 fake address London {id} {owning_org_id} DLUHC 1234 {managing_org_id} DLUHC 1234 2022-05-01T00:00:00+01:00 2022-05-01T00:00:00+01:00

8
spec/fixtures/exports/general_needs_log.xml vendored

@ -39,7 +39,7 @@
<preg_occ>2</preg_occ>
<startertenancy>1</startertenancy>
<tenancylength>5</tenancylength>
<tenancy>1</tenancy>
<tenancy>4</tenancy>
<ppostcode_full>SE2 6RT</ppostcode_full>
<rsnvac>6</rsnvac>
<unittype_gn>7</unittype_gn>
@ -136,11 +136,11 @@
<new_old>2</new_old>
<vacdays>638</vacdays>
<uprn/>
<uprn_known/>
<uprn_known>0</uprn_known>
<uprn_confirmed/>
<address_line1/>
<address_line1>fake address</address_line1>
<address_line2/>
<town_or_city/>
<town_or_city>London</town_or_city>
<county/>
<formid>{id}</formid>
<owningorgid>{owning_org_id}</owningorgid>

6
spec/fixtures/exports/general_needs_log_23_24.xml vendored

@ -38,8 +38,8 @@
<illness>1</illness>
<preg_occ>2</preg_occ>
<startertenancy>1</startertenancy>
<tenancylength/>
<tenancy/>
<tenancylength>5</tenancylength>
<tenancy>4</tenancy>
<ppostcode_full>SE2 6RT</ppostcode_full>
<rsnvac>6</rsnvac>
<unittype_gn>7</unittype_gn>
@ -131,7 +131,7 @@
<relat8/>
<lar/>
<irproduct/>
<joint/>
<joint>3</joint>
<sheltered/>
<hhtype>4</hhtype>
<new_old>2</new_old>

2
spec/fixtures/exports/supported_housing_logs.xml vendored

@ -39,7 +39,7 @@
<preg_occ>2</preg_occ>
<startertenancy>1</startertenancy>
<tenancylength/>
<tenancy>1</tenancy>
<tenancy>4</tenancy>
<ppostcode_full>LE5 1QP</ppostcode_full>
<rsnvac>6</rsnvac>
<beds/>

10
spec/helpers/locations_helper_spec.rb

@ -200,15 +200,15 @@ RSpec.describe LocationsHelper do
context "when viewing availability" do
context "with no deactivations" do
it "displays previous collection start date as availability date if created_at is earlier than collection start date" do
location.update!(startdate: nil)
it "displays current collection start date as availability date if created_at is later than collection start date" do
location.update!(startdate: nil, created_at: Time.zone.local(2023, 8, 16))
availability_attribute = display_location_attributes(location).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2021")
expect(availability_attribute).to eq("Active from 1 April 2023")
end
it "displays current collection start date as availability date if created_at is later than collection start date" do
location.update!(startdate: nil, created_at: Time.zone.local(2022, 4, 16))
it "displays previous collection start date as availability date if created_at is later than collection start date and in crossover" do
location.update!(startdate: nil, created_at: Time.zone.local(2023, 4, 16))
availability_attribute = display_location_attributes(location).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022")

28
spec/helpers/schemes_helper_spec.rb

@ -125,7 +125,7 @@ RSpec.describe SchemesHelper do
{ name: "Secondary client group", value: "Refugees (permanent)" },
{ name: "Level of support given", value: "High level" },
{ name: "Intended length of stay", value: "Permanent" },
{ name: "Availability", value: "Active from 1 April 2022" },
{ name: "Availability", value: "Active from 1 April 2021" },
{ name: "Status", value: status_tag(:incomplete) },
]
expect(display_scheme_attributes(scheme, support_user)).to eq(attributes)
@ -144,7 +144,7 @@ RSpec.describe SchemesHelper do
{ name: "Secondary client group", value: "Refugees (permanent)" },
{ name: "Level of support given", value: "High level" },
{ name: "Intended length of stay", value: "Permanent" },
{ name: "Availability", value: "Active from 1 April 2022" },
{ name: "Availability", value: "Active from 1 April 2021" },
{ name: "Status", value: status_tag(:incomplete) },
]
expect(display_scheme_attributes(scheme, coordinator_user)).to eq(attributes)
@ -170,7 +170,7 @@ RSpec.describe SchemesHelper do
{ name: "Secondary client group", value: "Refugees (permanent)" },
{ name: "Level of support given", value: "High level" },
{ name: "Intended length of stay", value: "Permanent" },
{ name: "Availability", value: "Active from 1 April 2022" },
{ name: "Availability", value: "Active from 1 April 2021" },
{ name: "Status", value: status_tag(:active) },
]
expect(display_scheme_attributes(scheme, support_user)).to eq(attributes)
@ -189,7 +189,7 @@ RSpec.describe SchemesHelper do
{ name: "Secondary client group", value: "Refugees (permanent)" },
{ name: "Level of support given", value: "High level" },
{ name: "Intended length of stay", value: "Permanent" },
{ name: "Availability", value: "Active from 1 April 2022" },
{ name: "Availability", value: "Active from 1 April 2021" },
{ name: "Status", value: status_tag(:active) },
]
expect(display_scheme_attributes(scheme, coordinator_user)).to eq(attributes)
@ -212,17 +212,11 @@ RSpec.describe SchemesHelper do
context "when viewing availability" do
context "with no deactivations" do
it "displays created_at as availability date" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from #{scheme.created_at.to_formatted_s(:govuk_date)}")
end
it "displays current collection start date as availability date if created_at is later than collection start date" do
scheme.update!(created_at: Time.zone.local(2022, 4, 16))
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022")
expect(availability_attribute).to eq("Active from 1 April 2021")
end
end
@ -237,7 +231,7 @@ RSpec.describe SchemesHelper do
it "displays the timeline of availability" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022 to 9 August 2022\nDeactivated on 10 August 2022\nActive from 1 September 2022 to 14 September 2022\nDeactivated on 15 September 2022\nActive from 28 September 2022")
expect(availability_attribute).to eq("Active from 1 April 2021 to 9 August 2022\nDeactivated on 10 August 2022\nActive from 1 September 2022 to 14 September 2022\nDeactivated on 15 September 2022\nActive from 28 September 2022")
end
end
@ -251,7 +245,7 @@ RSpec.describe SchemesHelper do
it "displays the timeline of availability" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022 to 9 August 2022\nDeactivated on 10 August 2022\nActive from 1 September 2022 to 14 September 2022\nDeactivated on 15 September 2022")
expect(availability_attribute).to eq("Active from 1 April 2021 to 9 August 2022\nDeactivated on 10 August 2022\nActive from 1 September 2022 to 14 September 2022\nDeactivated on 15 September 2022")
end
end
end
@ -267,7 +261,7 @@ RSpec.describe SchemesHelper do
it "displays the timeline of availability" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 18 June 2022 to 23 September 2022\nDeactivated on 24 September 2022\nActive from 28 September 2022")
expect(availability_attribute).to eq("Active from 1 April 2021 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 18 June 2022 to 23 September 2022\nDeactivated on 24 September 2022\nActive from 28 September 2022")
end
end
@ -281,7 +275,7 @@ RSpec.describe SchemesHelper do
it "displays the timeline of availability" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 28 September 2022")
expect(availability_attribute).to eq("Active from 1 April 2021 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 28 September 2022")
end
end
end
@ -298,7 +292,7 @@ RSpec.describe SchemesHelper do
it "displays the timeline of availability" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 28 September 2022 to 23 October 2022\nDeactivated on 24 October 2022\nActive from 28 October 2022")
expect(availability_attribute).to eq("Active from 1 April 2021 to 14 June 2022\nDeactivated on 15 June 2022\nActive from 28 September 2022 to 23 October 2022\nDeactivated on 24 October 2022\nActive from 28 October 2022")
end
end
end
@ -313,7 +307,7 @@ RSpec.describe SchemesHelper do
it "displays the timeline of availability" do
availability_attribute = display_scheme_attributes(scheme, support_user).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2022 to 9 October 2022\nDeactivated on 10 October 2022\nActive from 11 December 2022")
expect(availability_attribute).to eq("Active from 1 April 2021 to 9 October 2022\nDeactivated on 10 October 2022\nActive from 11 December 2022")
end
end
end

2
spec/models/form/lettings/pages/address_spec.rb

@ -62,7 +62,7 @@ RSpec.describe Form::Lettings::Pages::Address, type: :model do
context "when uprn_confirmed == 1 && uprn_known != 0" do
let(:log) do
create(:lettings_log, uprn_known: 1, uprn_confirmed: 1)
create(:lettings_log, uprn_known: 1, uprn_confirmed: 1, uprn: "123456789")
end
it "returns true" do

9
spec/models/form/lettings/questions/la_spec.rb

@ -175,13 +175,8 @@ RSpec.describe Form::Lettings::Questions::La, type: :model do
"E07000147" => "North Norfolk",
"E07000148" => "Norwich",
"E07000149" => "South Norfolk",
"E07000150" => "Corby",
"E07000151" => "Daventry",
"E07000152" => "East Northamptonshire",
"E07000153" => "Kettering",
"E07000154" => "Northampton",
"E07000155" => "South Northamptonshire",
"E07000156" => "Wellingborough",
"E06000061" => "North Northamptonshire",
"E06000062" => "West Northamptonshire",
"E07000170" => "Ashfield",
"E07000171" => "Bassetlaw",
"E07000172" => "Broxtowe",

9
spec/models/form/lettings/questions/prevloc_spec.rb

@ -87,7 +87,6 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"S12000005" => "Clackmannanshire",
"E07000071" => "Colchester",
"W06000003" => "Conwy",
"E07000150" => "Corby",
"E06000052" => "Cornwall",
"E07000079" => "Cotswold",
"E06000047" => "County Durham",
@ -98,7 +97,6 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"E07000096" => "Dacorum",
"E06000005" => "Darlington",
"E07000107" => "Dartford",
"E07000151" => "Daventry",
"W06000004" => "Denbighshire",
"E06000015" => "Derby",
"E07000035" => "Derbyshire Dales",
@ -118,7 +116,6 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"E07000242" => "East Hertfordshire",
"E07000137" => "East Lindsey",
"S12000010" => "East Lothian",
"E07000152" => "East Northamptonshire",
"S12000011" => "East Renfrewshire",
"E06000011" => "East Riding of Yorkshire",
"E07000193" => "East Staffordshire",
@ -179,7 +176,6 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"E06000053" => "Isles of Scilly",
"E09000019" => "Islington",
"E09000020" => "Kensington and Chelsea",
"E07000153" => "Kettering",
"E07000146" => "King’s Lynn and West Norfolk",
"E06000010" => "Kingston upon Hull, City of",
"E09000021" => "Kingston upon Thames",
@ -234,12 +230,12 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"S12000050" => "North Lanarkshire",
"E06000013" => "North Lincolnshire",
"E07000147" => "North Norfolk",
"E06000061" => "North Northamptonshire",
"E06000024" => "North Somerset",
"E08000022" => "North Tyneside",
"E07000218" => "North Warwickshire",
"E06000065" => "North Yorkshire",
"E07000134" => "North West Leicestershire",
"E07000154" => "Northampton",
"E06000057" => "Northumberland",
"E07000148" => "Norwich",
"E06000018" => "Nottingham",
@ -295,7 +291,6 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"E07000141" => "South Kesteven",
"S12000029" => "South Lanarkshire",
"E07000149" => "South Norfolk",
"E07000155" => "South Northamptonshire",
"E07000179" => "South Oxfordshire",
"E07000126" => "South Ribble",
"E07000196" => "South Staffordshire",
@ -351,7 +346,6 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"E07000103" => "Watford",
"E07000216" => "Waverley",
"E07000065" => "Wealden",
"E07000156" => "Wellingborough",
"E07000241" => "Welwyn Hatfield",
"E06000037" => "West Berkshire",
"E07000047" => "West Devon",
@ -359,6 +353,7 @@ RSpec.describe Form::Lettings::Questions::Prevloc, type: :model do
"E07000127" => "West Lancashire",
"E07000142" => "West Lindsey",
"S12000040" => "West Lothian",
"E06000062" => "West Northamptonshire",
"E07000181" => "West Oxfordshire",
"E07000245" => "West Suffolk",
"E09000033" => "Westminster",

6
spec/models/form/lettings/questions/uprn_confirmation_spec.rb

@ -50,7 +50,7 @@ RSpec.describe Form::Lettings::Questions::UprnConfirmation, type: :model do
context "when address is present" do
it "returns formatted value" do
log = create(:lettings_log, address_line1: "1, Test Street", town_or_city: "Test Town", county: "Test County", postcode_full: "AA1 1AA", uprn: "1234")
log = create(:lettings_log, address_line1: "1, Test Street", town_or_city: "Test Town", county: "Test County", postcode_full: "AA1 1AA", uprn: "1234", uprn_known: 1)
expect(question.notification_banner(log)).to eq(
{
@ -80,9 +80,11 @@ RSpec.describe Form::Lettings::Questions::UprnConfirmation, type: :model do
end
context "when uprn_known != 1 && uprn_confirmed == 1" do
let(:log) { create(:lettings_log, uprn_known: 1, uprn_confirmed: 1) }
let(:log) { create(:lettings_log) }
it "returns true" do
log.uprn_known = 1
log.uprn_confirmed = 1
expect(question.hidden_in_check_answers?(log)).to eq(true)
end
end

7
spec/models/form/sales/pages/address_spec.rb

@ -42,7 +42,7 @@ RSpec.describe Form::Sales::Pages::Address, type: :model do
context "when uprn_confirmed != 1" do
let(:log) do
create(:sales_log, uprn_known: 1, uprn_confirmed: 0)
create(:sales_log, uprn_known: 1, uprn: "12345", uprn_confirmed: 0)
end
it "returns true" do
@ -52,17 +52,18 @@ RSpec.describe Form::Sales::Pages::Address, type: :model do
context "when uprn_known == 0" do
let(:log) do
create(:sales_log, uprn_known: 0, uprn_confirmed: 0)
create(:sales_log, uprn_confirmed: 0)
end
it "returns true" do
log.uprn_known = 0
expect(page.routed_to?(log)).to eq(true)
end
end
context "when uprn_confirmed == 1 && uprn_known != 0" do
let(:log) do
create(:sales_log, uprn_known: 1, uprn_confirmed: 1)
create(:sales_log, uprn_known: 1, uprn: "12345", uprn_confirmed: 1)
end
it "returns true" do

4
spec/models/form/sales/pages/uprn_confirmation_spec.rb

@ -33,9 +33,11 @@ RSpec.describe Form::Sales::Pages::UprnConfirmation, type: :model do
describe "has correct routed_to?" do
context "when uprn present && uprn_known == 1 " do
let(:log) { create(:sales_log, uprn_known: 1, uprn: "123456789") }
let(:log) { create(:sales_log) }
it "returns true" do
log.uprn_known = 1
log.uprn = "123456789"
expect(page.routed_to?(log)).to eq(true)
end
end

3
spec/models/form/sales/pages/uprn_spec.rb

@ -45,9 +45,10 @@ RSpec.describe Form::Sales::Pages::Uprn, type: :model do
end
context "when uprn_known == 1" do
let(:log) { create(:sales_log, uprn_known: 1) }
let(:log) { create(:sales_log) }
it "returns true" do
log.uprn_known = 1
expect(page.routed_to?(log)).to eq(true)
end
end

18
spec/models/form/sales/questions/prevloc_spec.rb

@ -118,7 +118,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000071" => "Colchester",
"W06000003" => "Conwy",
"E07000029" => "Copeland",
"E07000150" => "Corby",
"E06000052" => "Cornwall",
"E07000079" => "Cotswold",
"E06000047" => "County Durham",
@ -129,7 +128,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000096" => "Dacorum",
"E06000005" => "Darlington",
"E07000107" => "Dartford",
"E07000151" => "Daventry",
"W06000004" => "Denbighshire",
"E06000015" => "Derby",
"E07000035" => "Derbyshire Dales",
@ -149,7 +147,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000242" => "East Hertfordshire",
"E07000137" => "East Lindsey",
"S12000010" => "East Lothian",
"E07000152" => "East Northamptonshire",
"S12000011" => "East Renfrewshire",
"E06000011" => "East Riding of Yorkshire",
"E07000193" => "East Staffordshire",
@ -213,7 +210,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E06000053" => "Isles of Scilly",
"E09000019" => "Islington",
"E09000020" => "Kensington and Chelsea",
"E07000153" => "Kettering",
"E07000146" => "King’s Lynn and West Norfolk",
"E06000010" => "Kingston upon Hull, City of",
"E09000021" => "Kingston upon Thames",
@ -269,11 +265,11 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"S12000050" => "North Lanarkshire",
"E06000013" => "North Lincolnshire",
"E07000147" => "North Norfolk",
"E06000061" => "North Northamptonshire",
"E06000024" => "North Somerset",
"E08000022" => "North Tyneside",
"E07000218" => "North Warwickshire",
"E07000134" => "North West Leicestershire",
"E07000154" => "Northampton",
"E06000057" => "Northumberland",
"E07000148" => "Norwich",
"E06000018" => "Nottingham",
@ -335,7 +331,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000031" => "South Lakeland",
"S12000029" => "South Lanarkshire",
"E07000149" => "South Norfolk",
"E07000155" => "South Northamptonshire",
"E07000179" => "South Oxfordshire",
"E07000126" => "South Ribble",
"E07000189" => "South Somerset",
@ -392,7 +387,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000103" => "Watford",
"E07000216" => "Waverley",
"E07000065" => "Wealden",
"E07000156" => "Wellingborough",
"E07000241" => "Welwyn Hatfield",
"E06000037" => "West Berkshire",
"E07000047" => "West Devon",
@ -400,6 +394,7 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000127" => "West Lancashire",
"E07000142" => "West Lindsey",
"S12000040" => "West Lothian",
"E06000062" => "West Northamptonshire",
"E07000181" => "West Oxfordshire",
"E07000245" => "West Suffolk",
"E09000033" => "Westminster",
@ -507,7 +502,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"S12000005" => "Clackmannanshire",
"E07000071" => "Colchester",
"W06000003" => "Conwy",
"E07000150" => "Corby",
"E06000052" => "Cornwall",
"E07000079" => "Cotswold",
"E06000047" => "County Durham",
@ -518,7 +512,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000096" => "Dacorum",
"E06000005" => "Darlington",
"E07000107" => "Dartford",
"E07000151" => "Daventry",
"W06000004" => "Denbighshire",
"E06000015" => "Derby",
"E07000035" => "Derbyshire Dales",
@ -538,7 +531,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000242" => "East Hertfordshire",
"E07000137" => "East Lindsey",
"S12000010" => "East Lothian",
"E07000152" => "East Northamptonshire",
"S12000011" => "East Renfrewshire",
"E06000011" => "East Riding of Yorkshire",
"E07000193" => "East Staffordshire",
@ -599,7 +591,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E06000053" => "Isles of Scilly",
"E09000019" => "Islington",
"E09000020" => "Kensington and Chelsea",
"E07000153" => "Kettering",
"E07000146" => "King’s Lynn and West Norfolk",
"E06000010" => "Kingston upon Hull, City of",
"E09000021" => "Kingston upon Thames",
@ -654,12 +645,12 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"S12000050" => "North Lanarkshire",
"E06000013" => "North Lincolnshire",
"E07000147" => "North Norfolk",
"E06000061" => "North Northamptonshire",
"E06000024" => "North Somerset",
"E08000022" => "North Tyneside",
"E07000218" => "North Warwickshire",
"E06000065" => "North Yorkshire",
"E07000134" => "North West Leicestershire",
"E07000154" => "Northampton",
"E06000057" => "Northumberland",
"E07000148" => "Norwich",
"E06000018" => "Nottingham",
@ -715,7 +706,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000141" => "South Kesteven",
"S12000029" => "South Lanarkshire",
"E07000149" => "South Norfolk",
"E07000155" => "South Northamptonshire",
"E07000179" => "South Oxfordshire",
"E07000126" => "South Ribble",
"E07000196" => "South Staffordshire",
@ -771,7 +761,6 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000103" => "Watford",
"E07000216" => "Waverley",
"E07000065" => "Wealden",
"E07000156" => "Wellingborough",
"E07000241" => "Welwyn Hatfield",
"E06000037" => "West Berkshire",
"E07000047" => "West Devon",
@ -779,6 +768,7 @@ RSpec.describe Form::Sales::Questions::Prevloc, type: :model do
"E07000127" => "West Lancashire",
"E07000142" => "West Lindsey",
"S12000040" => "West Lothian",
"E06000062" => "West Northamptonshire",
"E07000181" => "West Oxfordshire",
"E07000245" => "West Suffolk",
"E09000033" => "Westminster",

18
spec/models/form/sales/questions/property_local_authority_spec.rb

@ -208,13 +208,8 @@ RSpec.describe Form::Sales::Questions::PropertyLocalAuthority, type: :model do
"E07000147" => "North Norfolk",
"E07000148" => "Norwich",
"E07000149" => "South Norfolk",
"E07000150" => "Corby",
"E07000151" => "Daventry",
"E07000152" => "East Northamptonshire",
"E07000153" => "Kettering",
"E07000154" => "Northampton",
"E07000155" => "South Northamptonshire",
"E07000156" => "Wellingborough",
"E06000061" => "North Northamptonshire",
"E06000062" => "West Northamptonshire",
"E07000163" => "Craven",
"E07000164" => "Hambleton",
"E07000165" => "Harrogate",
@ -526,13 +521,8 @@ RSpec.describe Form::Sales::Questions::PropertyLocalAuthority, type: :model do
"E07000147" => "North Norfolk",
"E07000148" => "Norwich",
"E07000149" => "South Norfolk",
"E07000150" => "Corby",
"E07000151" => "Daventry",
"E07000152" => "East Northamptonshire",
"E07000153" => "Kettering",
"E07000154" => "Northampton",
"E07000155" => "South Northamptonshire",
"E07000156" => "Wellingborough",
"E06000061" => "North Northamptonshire",
"E06000062" => "West Northamptonshire",
"E07000170" => "Ashfield",
"E07000171" => "Bassetlaw",
"E07000172" => "Broxtowe",

9
spec/models/form/sales/questions/uprn_confirmation_spec.rb

@ -50,7 +50,7 @@ RSpec.describe Form::Sales::Questions::UprnConfirmation, type: :model do
context "when address is present" do
it "returns formatted value" do
log = create(:sales_log, address_line1: "1, Test Street", town_or_city: "Test Town", county: "Test County", postcode_full: "AA1 1AA", uprn: "1234")
log = create(:sales_log, address_line1: "1, Test Street", town_or_city: "Test Town", county: "Test County", postcode_full: "AA1 1AA", uprn: "1234", uprn_known: 1)
expect(question.notification_banner(log)).to eq(
{
@ -72,15 +72,18 @@ RSpec.describe Form::Sales::Questions::UprnConfirmation, type: :model do
end
context "when uprn_known == 1 && uprn_confirmed == nil" do
let(:log) { create(:sales_log, uprn_known: 1, uprn_confirmed: nil) }
let(:log) { create(:sales_log) }
it "returns false" do
log.uprn_known = 1
log.uprn = "12345"
log.uprn_confirmed = nil
expect(question.hidden_in_check_answers?(log)).to eq(false)
end
end
context "when uprn_known != 1 && uprn_confirmed == 1" do
let(:log) { create(:sales_log, uprn_known: 1, uprn_confirmed: 1) }
let(:log) { create(:sales_log, uprn_known: 1, uprn: "12345", uprn_confirmed: 1) }
it "returns true" do
expect(question.hidden_in_check_answers?(log)).to eq(true)

3
spec/models/form/sales/questions/uprn_spec.rb

@ -74,9 +74,10 @@ RSpec.describe Form::Sales::Questions::Uprn, type: :model do
describe "has the correct hidden_in_check_answers" do
context "when uprn_known == 1" do
let(:log) { create(:sales_log, uprn_known: 1) }
let(:log) { create(:sales_log) }
it "returns false" do
log.uprn_known = 1
expect(question.hidden_in_check_answers?(log)).to eq(false)
end
end

2
spec/models/form_handler_spec.rb

@ -168,7 +168,7 @@ RSpec.describe FormHandler do
describe "#in_crossover_period?" do
context "when not in overlapping period" do
it "returns false" do
expect(form_handler.in_crossover_period?(now: Date.new(2022, 1, 1))).to be_falsey
expect(form_handler.in_crossover_period?(now: Date.new(2023, 1, 1))).to be_falsey
end
end

4
spec/models/forms/bulk_upload_sales/year_spec.rb

@ -5,8 +5,8 @@ RSpec.describe Forms::BulkUploadSales::Year do
describe "#options" do
it "returns correct years" do
expect(form.options.map(&:id)).to eql([2022, 2021])
expect(form.options.map(&:name)).to eql(%w[2022/2023 2021/2022])
expect(form.options.map(&:id)).to eql([2023, 2022])
expect(form.options.map(&:name)).to eql(%w[2023/2024 2022/2023])
end
end
end

30
spec/models/location_spec.rb

@ -154,7 +154,6 @@ RSpec.describe Location, type: :model do
"E09000001" => "City of London",
"E07000071" => "Colchester",
"E07000029" => "Copeland",
"E07000150" => "Corby",
"E06000052" => "Cornwall",
"E07000079" => "Cotswold",
"E06000047" => "County Durham",
@ -165,7 +164,6 @@ RSpec.describe Location, type: :model do
"E07000096" => "Dacorum",
"E06000005" => "Darlington",
"E07000107" => "Dartford",
"E07000151" => "Daventry",
"E06000015" => "Derby",
"E07000035" => "Derbyshire Dales",
"E08000017" => "Doncaster",
@ -178,7 +176,6 @@ RSpec.describe Location, type: :model do
"E07000085" => "East Hampshire",
"E07000242" => "East Hertfordshire",
"E07000137" => "East Lindsey",
"E07000152" => "East Northamptonshire",
"E06000011" => "East Riding of Yorkshire",
"E07000193" => "East Staffordshire",
"E07000244" => "East Suffolk",
@ -232,7 +229,6 @@ RSpec.describe Location, type: :model do
"E06000053" => "Isles of Scilly",
"E09000019" => "Islington",
"E09000020" => "Kensington and Chelsea",
"E07000153" => "Kettering",
"E07000146" => "King’s Lynn and West Norfolk",
"E06000010" => "Kingston upon Hull, City of",
"E09000021" => "Kingston upon Thames",
@ -275,11 +271,11 @@ RSpec.describe Location, type: :model do
"E07000139" => "North Kesteven",
"E06000013" => "North Lincolnshire",
"E07000147" => "North Norfolk",
"E06000061" => "North Northamptonshire",
"E06000024" => "North Somerset",
"E08000022" => "North Tyneside",
"E07000218" => "North Warwickshire",
"E07000134" => "North West Leicestershire",
"E07000154" => "Northampton",
"E06000057" => "Northumberland",
"E07000148" => "Norwich",
"E06000018" => "Nottingham",
@ -331,7 +327,6 @@ RSpec.describe Location, type: :model do
"E07000141" => "South Kesteven",
"E07000031" => "South Lakeland",
"E07000149" => "South Norfolk",
"E07000155" => "South Northamptonshire",
"E07000179" => "South Oxfordshire",
"E07000126" => "South Ribble",
"E07000189" => "South Somerset",
@ -384,12 +379,12 @@ RSpec.describe Location, type: :model do
"E07000103" => "Watford",
"E07000216" => "Waverley",
"E07000065" => "Wealden",
"E07000156" => "Wellingborough",
"E07000241" => "Welwyn Hatfield",
"E06000037" => "West Berkshire",
"E07000047" => "West Devon",
"E07000127" => "West Lancashire",
"E07000142" => "West Lindsey",
"E06000062" => "West Northamptonshire",
"E07000181" => "West Oxfordshire",
"E07000245" => "West Suffolk",
"E09000033" => "Westminster",
@ -481,7 +476,6 @@ RSpec.describe Location, type: :model do
"E07000118" => "Chorley",
"E09000001" => "City of London",
"E07000071" => "Colchester",
"E07000150" => "Corby",
"E06000052" => "Cornwall",
"E07000079" => "Cotswold",
"E06000047" => "County Durham",
@ -492,7 +486,6 @@ RSpec.describe Location, type: :model do
"E07000096" => "Dacorum",
"E06000005" => "Darlington",
"E07000107" => "Dartford",
"E07000151" => "Daventry",
"E06000015" => "Derby",
"E07000035" => "Derbyshire Dales",
"E08000017" => "Doncaster",
@ -505,7 +498,6 @@ RSpec.describe Location, type: :model do
"E07000085" => "East Hampshire",
"E07000242" => "East Hertfordshire",
"E07000137" => "East Lindsey",
"E07000152" => "East Northamptonshire",
"E06000011" => "East Riding of Yorkshire",
"E07000193" => "East Staffordshire",
"E07000244" => "East Suffolk",
@ -556,7 +548,6 @@ RSpec.describe Location, type: :model do
"E06000053" => "Isles of Scilly",
"E09000019" => "Islington",
"E09000020" => "Kensington and Chelsea",
"E07000153" => "Kettering",
"E07000146" => "King’s Lynn and West Norfolk",
"E06000010" => "Kingston upon Hull, City of",
"E09000021" => "Kingston upon Thames",
@ -598,12 +589,12 @@ RSpec.describe Location, type: :model do
"E07000139" => "North Kesteven",
"E06000013" => "North Lincolnshire",
"E07000147" => "North Norfolk",
"E06000061" => "North Northamptonshire",
"E06000024" => "North Somerset",
"E08000022" => "North Tyneside",
"E07000218" => "North Warwickshire",
"E07000134" => "North West Leicestershire",
"E06000065" => "North Yorkshire",
"E07000154" => "Northampton",
"E06000057" => "Northumberland",
"E07000148" => "Norwich",
"E06000018" => "Nottingham",
@ -649,7 +640,6 @@ RSpec.describe Location, type: :model do
"E07000140" => "South Holland",
"E07000141" => "South Kesteven",
"E07000149" => "South Norfolk",
"E07000155" => "South Northamptonshire",
"E07000179" => "South Oxfordshire",
"E07000126" => "South Ribble",
"E07000196" => "South Staffordshire",
@ -701,12 +691,12 @@ RSpec.describe Location, type: :model do
"E07000103" => "Watford",
"E07000216" => "Waverley",
"E07000065" => "Wealden",
"E07000156" => "Wellingborough",
"E07000241" => "Welwyn Hatfield",
"E06000037" => "West Berkshire",
"E07000047" => "West Devon",
"E07000127" => "West Lancashire",
"E07000142" => "West Lindsey",
"E06000062" => "West Northamptonshire",
"E07000181" => "West Oxfordshire",
"E07000245" => "West Suffolk",
"E09000033" => "Westminster",
@ -953,8 +943,8 @@ RSpec.describe Location, type: :model do
context "and the location was created at the start of the 2022/23 collection window" do
let(:location) { FactoryBot.build(:location, created_at: Time.zone.local(2022, 4, 6), startdate: nil) }
it "returns the beginning of 22/23 collection window" do
expect(location.available_from).to eq(Time.zone.local(2022, 4, 1))
it "returns the beginning of 21/22 collection window" do
expect(location.available_from).to eq(Time.zone.local(2021, 4, 1))
end
end
@ -969,16 +959,16 @@ RSpec.describe Location, type: :model do
context "and the location was created at the start of the 2021/22 collection window" do
let(:location) { FactoryBot.build(:location, created_at: Time.zone.local(2021, 4, 6), startdate: nil) }
it "returns the beginning of 21/22 collection window" do
expect(location.available_from).to eq(Time.zone.local(2021, 4, 1))
it "returns the beginning of 20/21 collection window" do
expect(location.available_from).to eq(Time.zone.local(2020, 4, 1))
end
end
context "and the location was created at the end of the 2021/22 collection window" do
let(:location) { FactoryBot.build(:location, created_at: Time.zone.local(2022, 2, 6), startdate: nil) }
it "returns the beginning of 21/22 collection window" do
expect(location.available_from).to eq(Time.zone.local(2021, 4, 1))
it "returns the beginning of 20/21 collection window" do
expect(location.available_from).to eq(Time.zone.local(2020, 4, 1))
end
end
end

12
spec/models/sales_log_spec.rb

@ -91,6 +91,15 @@ RSpec.describe SalesLog, type: :model do
let(:sales_log) { build(:sales_log, created_by: created_by_user) }
let(:sales_log_2) { build(:sales_log, saledate: Time.zone.local(2022, 5, 1), created_by: created_by_user) }
before do
Timecop.freeze(Time.zone.local(2023, 1, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
end
it "has returns the correct form based on the start date" do
expect(sales_log.form_name).to be_nil
expect(sales_log.form).to be_a(Form)
@ -528,6 +537,7 @@ RSpec.describe SalesLog, type: :model do
it "updates sales log fields" do
sales_log.uprn = "1111111"
sales_log.uprn_confirmed = 1
allow_any_instance_of(UprnClient).to receive(:call)
allow_any_instance_of(UprnClient).to receive(:result).and_return({
@ -558,7 +568,7 @@ RSpec.describe SalesLog, type: :model do
end
context "when service errors" do
let(:sales_log) { create(:sales_log, uprn: "123456789", uprn_confirmed: 1) }
let(:sales_log) { create(:sales_log, uprn_known: 1, uprn: "123456789", uprn_confirmed: 1) }
let(:error_message) { "error" }
it "adds error to sales log" do

6
spec/models/scheme_spec.rb

@ -182,7 +182,7 @@ RSpec.describe Scheme, type: :model do
let(:scheme) { FactoryBot.build(:scheme, created_at: Time.zone.local(2022, 4, 6)) }
it "returns the beginning of 22/23 collection window" do
expect(scheme.available_from).to eq(Time.zone.local(2022, 4, 1))
expect(scheme.available_from).to eq(Time.zone.local(2021, 4, 1))
end
end
@ -198,7 +198,7 @@ RSpec.describe Scheme, type: :model do
let(:scheme) { FactoryBot.build(:scheme, created_at: Time.zone.local(2021, 4, 6)) }
it "returns the beginning of 21/22 collection window" do
expect(scheme.available_from).to eq(Time.zone.local(2021, 4, 1))
expect(scheme.available_from).to eq(Time.zone.local(2020, 4, 1))
end
end
@ -206,7 +206,7 @@ RSpec.describe Scheme, type: :model do
let(:scheme) { FactoryBot.build(:scheme, created_at: Time.zone.local(2022, 2, 6)) }
it "returns the beginning of 21/22 collection window" do
expect(scheme.available_from).to eq(Time.zone.local(2021, 4, 1))
expect(scheme.available_from).to eq(Time.zone.local(2020, 4, 1))
end
end
end

9
spec/models/validations/sales/setup_validations_spec.rb

@ -7,6 +7,15 @@ RSpec.describe Validations::Sales::SetupValidations do
describe "#validate_saledate_collection_year" do
context "with sales_in_crossover_period == false" do
before do
Timecop.freeze(Time.zone.local(2023, 1, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
end
context "when saledate is blank" do
let(:record) { build(:sales_log, saledate: nil) }

11
spec/models/validations/soft_validations_spec.rb

@ -4,6 +4,15 @@ RSpec.describe Validations::SoftValidations do
let(:organisation) { FactoryBot.create(:organisation, provider_type: "PRP") }
let(:record) { FactoryBot.create(:lettings_log, owning_organisation: organisation) }
before do
Timecop.freeze(Time.zone.local(2021, 10, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
end
describe "rent min max validations" do
before do
LaRentRange.create!(
@ -23,7 +32,7 @@ RSpec.describe Validations::SoftValidations do
record.rent_type = 0
record.beds = 1
record.period = 1
record.startdate = Time.zone.local(2021, 10, 10)
record.startdate = Time.zone.today
end
context "when validating soft min" do

4
spec/requests/bulk_upload_controller_spec.rb

@ -69,13 +69,13 @@ RSpec.describe BulkUploadController, type: :request do
end
context "when not crossover period" do
let(:time) { Time.utc(2022, 2, 8) }
let(:time) { Time.utc(2023, 2, 8) }
it "redirects to bulk upload path" do
expect(request).to redirect_to(
bulk_upload_lettings_log_path(
id: "prepare-your-file",
form: { year: 2021 },
form: { year: 2022 },
),
)
end

4
spec/requests/bulk_upload_lettings_logs_controller_spec.rb

@ -10,10 +10,10 @@ RSpec.describe BulkUploadLettingsLogsController, type: :request do
describe "GET /lettings-logs/bulk-upload-logs/start" do
context "when not in crossover period" do
let(:expected_year) { 2021 }
let(:expected_year) { 2022 }
it "redirects to /prepare-your-file" do
Timecop.freeze(2022, 1, 1) do
Timecop.freeze(2023, 1, 1) do
get "/lettings-logs/bulk-upload-logs/start", params: {}
expect(response).to redirect_to("/lettings-logs/bulk-upload-logs/prepare-your-file?form%5Byear%5D=#{expected_year}")

6
spec/requests/lettings_logs_controller_spec.rb

@ -372,6 +372,7 @@ RSpec.describe LettingsLogsController, type: :request do
context "with year and status filter" do
before do
Timecop.freeze(Time.zone.local(2022, 3, 1))
Singleton.__init__(FormHandler)
lettings_log_2021.update!(startdate: Time.zone.local(2022, 3, 1))
Timecop.freeze(Time.zone.local(2022, 12, 1))
end
@ -856,9 +857,11 @@ RSpec.describe LettingsLogsController, type: :request do
sign_in user
get "/lettings-logs/#{lettings_log.id}", headers:, params: {}
Timecop.freeze(2021, 4, 1)
Singleton.__init__(FormHandler)
completed_lettings_log.update!(startdate: Time.zone.local(2021, 4, 1), voiddate: Time.zone.local(2021, 4, 1), mrcdate: Time.zone.local(2021, 4, 1))
completed_lettings_log.reload
Timecop.unfreeze
Singleton.__init__(FormHandler)
end
it "shows the tasklist for lettings logs you have access to" do
@ -883,7 +886,7 @@ RSpec.describe LettingsLogsController, type: :request do
expect(page).to have_link("review and make changes to this log", href: "/lettings-logs/#{completed_lettings_log.id}/review")
end
it "displays a closed collection window message for previous collection year logs" do
xit "displays a closed collection window message for previous collection year logs" do
get "/lettings-logs/#{completed_lettings_log.id}", headers:, params: {}
expect(completed_lettings_log.form.end_date).to eq(Time.zone.local(2022, 7, 1))
expect(completed_lettings_log.status).to eq("completed")
@ -984,6 +987,7 @@ RSpec.describe LettingsLogsController, type: :request do
context "when accessing the check answers page" do
before do
Timecop.freeze(2021, 4, 1)
Singleton.__init__(FormHandler)
completed_lettings_log.update!(startdate: Time.zone.local(2021, 4, 1), voiddate: Time.zone.local(2021, 4, 1), mrcdate: Time.zone.local(2021, 4, 1))
Timecop.unfreeze
stub_request(:get, /api.postcodes.io/)

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

@ -54,20 +54,15 @@ RSpec.describe BulkUpload::Lettings::Validator do
it "create validation error with correct values" do
validator.call
error = BulkUploadError.find_by(field: "field_11")
error = BulkUploadError.find_by(row: "7", field: "field_96", category: "setup")
expect(error.field).to eql("field_11")
expect(error.error).to eql("You must only answer the length of the tenancy if it's fixed-term")
expect(error.field).to eql("field_96")
expect(error.error).to eql("You must answer tenancy start date")
expect(error.tenant_code).to eql("123")
expect(error.property_ref).to be_nil
expect(error.row).to eql("7")
expect(error.cell).to eql("L7")
expect(error.col).to eql("L")
expect(error.category).to be_nil
error = BulkUploadError.find_by(row: "7", category: "setup", field: "field_111")
expect(error.category).to eql("setup")
expect(error.cell).to eql("CS7")
expect(error.col).to eql("CS")
end
end
@ -157,6 +152,7 @@ RSpec.describe BulkUpload::Lettings::Validator do
end
it "returns truthy" do
validator.call
expect(validator).to be_create_logs
end
end
@ -165,6 +161,7 @@ RSpec.describe BulkUpload::Lettings::Validator do
let(:path) { file_fixture("2022_23_lettings_bulk_upload.csv") }
it "returns falsey" do
validator.call
expect(validator).not_to be_create_logs
end
end

51
spec/services/bulk_upload/processor_spec.rb

@ -3,7 +3,9 @@ require "rails_helper"
RSpec.describe BulkUpload::Processor do
subject(:processor) { described_class.new(bulk_upload:) }
let(:bulk_upload) { create(:bulk_upload, :lettings) }
let(:bulk_upload) { create(:bulk_upload, :lettings, user:) }
let(:user) { create(:user, organisation: owning_org) }
let(:owning_org) { create(:organisation, old_visible_id: 123) }
describe "#call" do
context "when the bulk upload itself is not considered valid" do
@ -239,7 +241,8 @@ RSpec.describe BulkUpload::Processor do
end
context "when processing a bulk with perfect data" do
let(:path) { file_fixture("2022_23_lettings_bulk_upload.csv") }
let(:file) { Tempfile.new }
let(:path) { file.path }
let(:mock_downloader) do
instance_double(
@ -250,34 +253,36 @@ RSpec.describe BulkUpload::Processor do
)
end
let(:mock_validator) do
instance_double(
BulkUpload::Lettings::Validator,
call: nil,
create_logs?: true,
any_setup_errors?: false,
invalid?: false,
)
end
let(:mock_creator) do
instance_double(
BulkUpload::Lettings::LogCreator,
call: nil,
path:,
let(:log) do
build(
:lettings_log,
:completed,
renttype: 3,
age1: 20,
owning_organisation: owning_org,
managing_organisation: owning_org,
created_by: nil,
national: 18,
waityear: 9,
joint: 2,
tenancy: 9,
ppcodenk: 0,
voiddate: nil,
mrcdate: nil,
startdate: Date.new(2022, 10, 1),
tenancylength: nil,
)
end
before do
file.write(BulkUpload::LogToCsv.new(log:, col_offset: 0).to_2022_csv_row)
file.rewind
allow(BulkUpload::Downloader).to receive(:new).with(bulk_upload:).and_return(mock_downloader)
allow(BulkUpload::Lettings::Validator).to receive(:new).and_return(mock_validator)
allow(BulkUpload::Lettings::LogCreator).to receive(:new).with(bulk_upload:, path:).and_return(mock_creator)
end
it "creates logs" do
processor.call
expect(mock_creator).to have_received(:call)
expect { processor.call }.to change(LettingsLog, :count).by(1)
end
it "does not send fix errors email" do
@ -293,8 +298,6 @@ RSpec.describe BulkUpload::Processor do
allow(BulkUploadMailer).to receive(:send_bulk_upload_complete_mail).and_return(mail_double)
create(:lettings_log, :completed, bulk_upload:)
processor.call
expect(BulkUploadMailer).to have_received(:send_bulk_upload_complete_mail)

Loading…
Cancel
Save