diff --git a/spec/components/check_answers_summary_list_card_component_spec.rb b/spec/components/check_answers_summary_list_card_component_spec.rb index 0390530c6..aa9ad1be5 100644 --- a/spec/components/check_answers_summary_list_card_component_spec.rb +++ b/spec/components/check_answers_summary_list_card_component_spec.rb @@ -43,6 +43,8 @@ RSpec.describe CheckAnswersSummaryListCardComponent, type: :component do end context "when log was not created via a bulk upload and has an unanswered question" do + let(:log) { create(:lettings_log, :in_progress) } + it "displays normal copy with muted colour " do expect(rendered).to have_selector("span", class: "app-!-colour-muted", text: "You didn’t answer this question") end diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 4bb2eac36..cbbdc6c37 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -23,15 +23,6 @@ FactoryBot.define do age1 { 17 } age2 { 19 } end - trait :conditional_section_complete do - tenancycode { Faker::Name.initials(number: 10) } - age1 { 34 } - sex1 { "M" } - ethnic { 2 } - national { 18 } - ecstat1 { 2 } - hhmemb { 1 } - end trait :duplicate do setup_completed status { 1 } @@ -168,14 +159,15 @@ FactoryBot.define do town_or_city { "London" } ppcodenk { 1 } tshortfall_known { 1 } - end - trait :completed2024 do - completed - address_line1_input { address_line1 } - postcode_full_input { postcode_full } - nationality_all_group { 826 } - uprn { 1 } - uprn_selection { 1 } + after(:build) do |log, _evaluator| + if log.startdate >= Time.zone.local(2024, 4, 1) + log.address_line1_input = log.address_line1 + log.postcode_full_input = log.postcode_full + log.nationality_all_group = 826 + log.uprn = "10033558653" + log.uprn_selection = 1 + end + end end trait :export do tenancycode { "987654" } diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 9212b6e76..27d960040 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -1,6 +1,8 @@ FactoryBot.define do factory :sales_log do assigned_to { association :user } + before(:create) { |log, _evaluator| log.assigned_to ||= create(:user) } + created_by { assigned_to } owning_organisation { assigned_to.organisation } managing_organisation { owning_organisation } @@ -11,7 +13,7 @@ FactoryBot.define do ownershipsch { 2 } type { 8 } jointpur { 2 } - saledate { Time.zone.today } + saledate_today end trait :shared_ownership do ownershipsch { 1 } @@ -45,7 +47,7 @@ FactoryBot.define do trait :duplicate do shared_ownership_setup_complete purchid { "PC123" } - saledate { Time.zone.today } + saledate_today age1_known { 1 } age1 { 20 } sex1 { "F" } @@ -57,7 +59,7 @@ FactoryBot.define do purchid { rand(999_999_999).to_s } ownershipsch { 2 } type { 8 } - saledate { Time.zone.today } + saledate_today jointpur { 1 } beds { 2 } jointmore { 1 } @@ -150,15 +152,16 @@ FactoryBot.define do nationalbuy2 { 13 } buy2living { 3 } proplen_asked { 1 } - end - trait :completed2024 do - completed - address_line1_input { address_line1 } - postcode_full_input { postcode_full } - nationality_all_group { 826 } - nationality_all_buyer2_group { 826 } - uprn { 1 } - uprn_selection { 1 } + after(:build) do |log, _evaluator| + if log.saledate >= Time.zone.local(2024, 4, 1) + log.address_line1_input = log.address_line1 + log.postcode_full_input = log.postcode_full + log.nationality_all_group = 826 + log.nationality_all_buyer2_group = 826 + log.uprn = "10033558653" + log.uprn_selection = 1 + end + end end trait :with_uprn do uprn { rand(999_999_999_999).to_s } diff --git a/spec/features/form/form_navigation_spec.rb b/spec/features/form/form_navigation_spec.rb index 2c85a3d41..6484fe94c 100644 --- a/spec/features/form/form_navigation_spec.rb +++ b/spec/features/form/form_navigation_spec.rb @@ -191,7 +191,7 @@ RSpec.describe "Form Navigation" do let(:now) { Time.zone.local(2024, 5, 1) } context "with a lettings log" do - let(:lettings_log) { create(:lettings_log, :completed, startdate: Time.zone.local(2024, 5, 5), assigned_to: user) } + let(:lettings_log) { create(:lettings_log, :setup_completed, startdate: Time.zone.local(2024, 5, 5), assigned_to: user) } before do stub_request(:get, /api\.os\.uk/) @@ -211,7 +211,7 @@ RSpec.describe "Form Navigation" do fill_in("lettings-log-address-line1-input-field", with: "address") fill_in("lettings-log-postcode-full-input-field", with: "A1 1AA") click_button(text: "Search") - expect(page).to have_current_path("/lettings-logs/#{id}/uprn-selection?referrer=check_answers") + expect(page).to have_current_path("/lettings-logs/#{id}/uprn-selection?referrer=check_answers&unanswered_pages=property_local_authority") choose("lettings-log-uprn-selection-12345-field", allow_label_click: true) click_button(text: "Save changes") expect(page).to have_current_path("/lettings-logs/#{id}/property-information/check-answers") @@ -219,7 +219,7 @@ RSpec.describe "Form Navigation" do end context "with a sales log" do - let(:sales_log) { create(:sales_log, :completed, saledate: Time.zone.local(2024, 5, 5), assigned_to: user) } + let(:sales_log) { create(:sales_log, :outright_sale_setup_complete, saledate: Time.zone.local(2024, 5, 5), assigned_to: user) } before do stub_request(:get, /api\.os\.uk/) @@ -239,7 +239,7 @@ RSpec.describe "Form Navigation" do fill_in("sales-log-address-line1-input-field", with: "address") fill_in("sales-log-postcode-full-input-field", with: "A1 1AA") click_button(text: "Search") - expect(page).to have_current_path("/sales-logs/#{sales_log.id}/uprn-selection?referrer=check_answers") + expect(page).to have_current_path("/sales-logs/#{sales_log.id}/uprn-selection?referrer=check_answers&unanswered_pages=property_local_authority") choose("sales-log-uprn-selection-12345-field", allow_label_click: true) click_button(text: "Save changes") expect(page).to have_current_path("/sales-logs/#{sales_log.id}/property-information/check-answers") diff --git a/spec/fixtures/exports/general_needs_log_24_25.xml b/spec/fixtures/exports/general_needs_log_24_25.xml index a5211e35d..8f14a362f 100644 --- a/spec/fixtures/exports/general_needs_log_24_25.xml +++ b/spec/fixtures/exports/general_needs_log_24_25.xml @@ -1,7 +1,7 @@
- 1 + 2 BZ737 35 F @@ -50,7 +50,7 @@ 2 2 7 - SE2 6RT + AA1 1AA 1 2 1 @@ -82,7 +82,7 @@ 4 123 - E09000003 + E09000033 E07000105 6 1 @@ -137,12 +137,12 @@ 2 698 1 - - 0 - - Address line 1 + 1 + 1 + 1 + 1, Test Street - London + Test Town @@ -152,7 +152,7 @@ 2 - + 826 address line 1 as entered address line 2 as entered town or city as entered diff --git a/spec/fixtures/files/sales_logs_csv_export_codes_24.csv b/spec/fixtures/files/sales_logs_csv_export_codes_24.csv index 651c881d3..f1d8644a5 100644 --- a/spec/fixtures/files/sales_logs_csv_export_codes_24.csv +++ b/spec/fixtures/files/sales_logs_csv_export_codes_24.csv @@ -1,2 +1,2 @@ ID,STATUS,DUPLICATESET,CREATEDDATE,UPLOADDATE,COLLECTIONYEAR,CREATIONMETHOD,BULKUPLOADID,DATAPROTECT,OWNINGORGNAME,MANINGORGNAME,CREATEDBY,USERNAME,DAY,MONTH,YEAR,PURCHID,OWNERSHIP,TYPE,OTHTYPE,COMPANY,LIVEINBUYER,JOINT,JOINTMORE,NOINT,PRIVACYNOTICE,UPRN,ADDRESS1,ADDRESS2,TOWNCITY,COUNTY,POSTCODE,ISLAINFERRED,LANAME,LA,UPRNSELECTED,ADDRESS_SEARCH_VALUE_CHECK,ADDRESS1INPUT,POSTCODEINPUT,BULKADDRESS1,BULKADDRESS2,BULKTOWNCITY,BULKCOUNTY,BULKPOSTCODE,BULKLA,BEDS,PROPTYPE,BUILTYPE,WCHAIR,AGE1,SEX1,ETHNICGROUP1,ETHNIC,NATIONALITYALL1,ECSTAT1,LIVEINBUYER1,RELAT2,AGE2,SEX2,ETHNICGROUP2,ETHNIC2,NATIONALITYALL2,ECSTAT2,LIVEINBUYER2,HHTYPE,RELAT3,AGE3,SEX3,ECSTAT3,RELAT4,AGE4,SEX4,ECSTAT4,RELAT5,AGE5,SEX5,ECSTAT5,RELAT6,AGE6,SEX6,ECSTAT6,PREVTEN,PPCODENK,PPOSTC1,PPOSTC2,PREVIOUSLAKNOWN,PREVLOC,PREVLOCNAME,PREGYRHA,PREGOTHER,PREGLA,PREGGHB,PREGBLANK,BUY2LIVING,PREVTEN2,HHREGRES,HHREGRESSTILL,ARMEDFORCESSPOUSE,DISABLED,WHEEL,INC1NK,INCOME1,INC1MORT,INC2NK,INCOME2,INC2MORT,HB,SAVINGSNK,SAVINGS,PREVOWN,PREVSHARED,PROPLEN,STAIRCASE,STAIRBOUGHT,STAIROWNED,STAIRCASETOSALE,RESALE,EXDAY,EXMONTH,EXYEAR,HODAY,HOMONTH,HOYEAR,LANOMAGR,SOCTEN,FROMBEDS,FROMPROP,SOCPREVTEN,VALUE,VALUE_VALUE_CHECK,EQUITY,MORTGAGEUSED,MORTGAGE,MORTGAGELENDER,MORTGAGELENDEROTHER,MORTLEN1,EXTRABOR,DEPOSIT,CASHDIS,MRENT,HASMSCHARGE,MSCHARGE,MSCHARGE_VALUE_CHECK,DISCOUNT,GRANT -,in_progress,,2024-05-01T00:00:00+01:00,2024-05-01T00:00:00+01:00,2024,1,,false,DLUHC,DLUHC,billyboy@eyeklaud.com,billyboy@eyeklaud.com,1,5,2024,,2,8,,,,1,1,2,1,,Address line 1,,Town or city,,SW1A 1AA,true,Westminster,E09000033,,,,,address line 1 as entered,address line 2 as entered,town or city as entered,county as entered,AB1 2CD,la as entered,2,1,1,1,30,X,17,17,,1,1,P,35,X,17,,,1,1,3,C,14,X,9,X,-9,X,3,R,-9,R,10,,,,,1,0,SW1A,1AA,1,E09000033,Westminster,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 +,completed,,2024-05-01T00:00:00+01:00,2024-05-01T00:00:00+01:00,2024,1,,false,DLUHC,DLUHC,billyboy@eyeklaud.com,billyboy@eyeklaud.com,1,5,2024,,2,8,,,,1,1,2,1,1,"1, Test Street",,Test Town,,AA1 1AA,true,Westminster,E09000033,,,Address line 1,SW1A 1AA,address line 1 as entered,address line 2 as entered,town or city as entered,county as entered,AB1 2CD,la as entered,2,1,1,1,30,X,17,17,826,1,1,P,35,X,17,,826,1,1,3,C,14,X,9,X,-9,X,3,R,-9,R,10,,,,,1,0,SW1A,1AA,1,E09000033,Westminster,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 diff --git a/spec/fixtures/files/sales_logs_csv_export_labels_24.csv b/spec/fixtures/files/sales_logs_csv_export_labels_24.csv index 77e302899..07c84e8e1 100644 --- a/spec/fixtures/files/sales_logs_csv_export_labels_24.csv +++ b/spec/fixtures/files/sales_logs_csv_export_labels_24.csv @@ -1,2 +1,2 @@ ID,STATUS,DUPLICATESET,CREATEDDATE,UPLOADDATE,COLLECTIONYEAR,CREATIONMETHOD,BULKUPLOADID,DATAPROTECT,OWNINGORGNAME,MANINGORGNAME,CREATEDBY,USERNAME,DAY,MONTH,YEAR,PURCHID,OWNERSHIP,TYPE,OTHTYPE,COMPANY,LIVEINBUYER,JOINT,JOINTMORE,NOINT,PRIVACYNOTICE,UPRN,ADDRESS1,ADDRESS2,TOWNCITY,COUNTY,POSTCODE,ISLAINFERRED,LANAME,LA,UPRNSELECTED,ADDRESS_SEARCH_VALUE_CHECK,ADDRESS1INPUT,POSTCODEINPUT,BULKADDRESS1,BULKADDRESS2,BULKTOWNCITY,BULKCOUNTY,BULKPOSTCODE,BULKLA,BEDS,PROPTYPE,BUILTYPE,WCHAIR,AGE1,SEX1,ETHNICGROUP1,ETHNIC,NATIONALITYALL1,ECSTAT1,LIVEINBUYER1,RELAT2,AGE2,SEX2,ETHNICGROUP2,ETHNIC2,NATIONALITYALL2,ECSTAT2,LIVEINBUYER2,HHTYPE,RELAT3,AGE3,SEX3,ECSTAT3,RELAT4,AGE4,SEX4,ECSTAT4,RELAT5,AGE5,SEX5,ECSTAT5,RELAT6,AGE6,SEX6,ECSTAT6,PREVTEN,PPCODENK,PPOSTC1,PPOSTC2,PREVIOUSLAKNOWN,PREVLOC,PREVLOCNAME,PREGYRHA,PREGOTHER,PREGLA,PREGGHB,PREGBLANK,BUY2LIVING,PREVTEN2,HHREGRES,HHREGRESSTILL,ARMEDFORCESSPOUSE,DISABLED,WHEEL,INC1NK,INCOME1,INC1MORT,INC2NK,INCOME2,INC2MORT,HB,SAVINGSNK,SAVINGS,PREVOWN,PREVSHARED,PROPLEN,STAIRCASE,STAIRBOUGHT,STAIROWNED,STAIRCASETOSALE,RESALE,EXDAY,EXMONTH,EXYEAR,HODAY,HOMONTH,HOYEAR,LANOMAGR,SOCTEN,FROMBEDS,FROMPROP,SOCPREVTEN,VALUE,VALUE_VALUE_CHECK,EQUITY,MORTGAGEUSED,MORTGAGE,MORTGAGELENDER,MORTGAGELENDEROTHER,MORTLEN1,EXTRABOR,DEPOSIT,CASHDIS,MRENT,HASMSCHARGE,MSCHARGE,MSCHARGE_VALUE_CHECK,DISCOUNT,GRANT -,in_progress,,2024-05-01T00:00:00+01:00,2024-05-01T00:00:00+01:00,2024,single log,,false,DLUHC,DLUHC,billyboy@eyeklaud.com,billyboy@eyeklaud.com,1,5,2024,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,Yes,1,,Address line 1,,Town or city,,SW1A 1AA,Yes,Westminster,E09000033,,,,,address line 1 as entered,address line 2 as entered,town or city as entered,county as entered,AB1 2CD,la as entered,2,Flat or maisonette,Purpose built,Yes,30,Non-binary,Buyer prefers not to say,17,Australia,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,Buyer prefers not to say,,,Full-time - 30 hours or more,Yes,3,Child,14,Non-binary,Child under 16,Other,Not known,Non-binary,In government training into work,Prefers not to say,Not known,Prefers not to say,Prefers not to say,,,,,Local authority tenant,Yes,SW1A,1AA,Yes,E09000033,Westminster,1,1,1,1,,Don't know,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,Don’t know ,No,,Yes,No,10,,,,,,,,,,,,,,,,,110000.0,,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,,10000.0 +,completed,,2024-05-01T00:00:00+01:00,2024-05-01T00:00:00+01:00,2024,single log,,false,DLUHC,DLUHC,billyboy@eyeklaud.com,billyboy@eyeklaud.com,1,5,2024,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,Yes,1,1,"1, Test Street",,Test Town,,AA1 1AA,Yes,Westminster,E09000033,,,Address line 1,SW1A 1AA,address line 1 as entered,address line 2 as entered,town or city as entered,county as entered,AB1 2CD,la as entered,2,Flat or maisonette,Purpose built,Yes,30,Non-binary,Buyer prefers not to say,17,United Kingdom,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,Buyer prefers not to say,,United Kingdom,Full-time - 30 hours or more,Yes,3,Child,14,Non-binary,Child under 16,Other,Not known,Non-binary,In government training into work,Prefers not to say,Not known,Prefers not to say,Prefers not to say,,,,,Local authority tenant,Yes,AA1,1AA,Yes,E09000033,Westminster,1,1,1,1,,Don't know,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,Don’t know ,No,,Yes,No,10,,,,,,,,,,,,,,,,,110000.0,,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,,10000.0 diff --git a/spec/fixtures/files/sales_logs_csv_export_non_support_labels_24.csv b/spec/fixtures/files/sales_logs_csv_export_non_support_labels_24.csv index f25be1133..e6d1189ba 100644 --- a/spec/fixtures/files/sales_logs_csv_export_non_support_labels_24.csv +++ b/spec/fixtures/files/sales_logs_csv_export_non_support_labels_24.csv @@ -1,2 +1,2 @@ id,status,duplicate_set_id,created_at,updated_at,collection_start_year,creation_method,bulk_upload_id,is_dpo,owning_organisation_name,managing_organisation_name,assigned_to,day,month,year,purchid,ownershipsch,type,othtype,companybuy,buylivein,jointpur,jointmore,noint,privacynotice,uprn,uprn_confirmed,address_line1_input,postcode_full_input,uprn_selection,address_line1,address_line2,town_or_city,county,pcode1,pcode2,la,la_label,beds,proptype,builtype,wchair,age1,sex1,ethnic_group,ethnic,nationality_all,ecstat1,buy1livein,relat2,age2,sex2,ethnic_group2,ethnicbuy2,nationality_all_buyer2,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 -,in_progress,,2024-05-01T00:00:00+01:00,2024-05-01T00:00:00+01:00,2024,single log,,false,DLUHC,DLUHC,billyboy@eyeklaud.com,1,5,2024,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,Yes,1,,,,,,Address line 1,,Town or city,,SW1A,1AA,E09000033,Westminster,2,Flat or maisonette,Purpose built,Yes,30,Non-binary,Buyer prefers not to say,17,Australia,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,Buyer prefers not to say,,,Full-time - 30 hours or more,Yes,3,Child,14,Non-binary,Child under 16,Other,Not known,Non-binary,In government training into work,Prefers not to say,Not known,Prefers not to say,Prefers not to say,,,,,Local authority tenant,Yes,SW1A,1AA,Yes,E09000033,Westminster,1,1,1,1,,Don't know,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,Don’t know ,No,,Yes,No,10,,,,,,,,,,,,,,,,,110000.0,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,10000.0 +,completed,,2024-05-01T00:00:00+01:00,2024-05-01T00:00:00+01:00,2024,single log,,false,DLUHC,DLUHC,billyboy@eyeklaud.com,1,5,2024,,Yes - a discounted ownership scheme,Right to Acquire (RTA),,,,Yes,Yes,Yes,1,1,Yes,Address line 1,SW1A 1AA,,"1, Test Street",,Test Town,,AA1,1AA,E09000033,Westminster,2,Flat or maisonette,Purpose built,Yes,30,Non-binary,Buyer prefers not to say,17,United Kingdom,Full-time - 30 hours or more,Yes,Partner,35,Non-binary,Buyer prefers not to say,,United Kingdom,Full-time - 30 hours or more,Yes,3,Child,14,Non-binary,Child under 16,Other,Not known,Non-binary,In government training into work,Prefers not to say,Not known,Prefers not to say,Prefers not to say,,,,,Local authority tenant,Yes,AA1,1AA,Yes,E09000033,Westminster,1,1,1,1,,Don't know,,Yes,Yes,No,Yes,Yes,Yes,10000,Yes,Yes,10000,Yes,Don’t know ,No,,Yes,No,10,,,,,,,,,,,,,,,,,110000.0,,Yes,20000.0,Cambridge Building Society,,10,Yes,80000.0,,,Yes,100.0,,10000.0 diff --git a/spec/models/form/lettings/questions/uprn_spec.rb b/spec/models/form/lettings/questions/uprn_spec.rb index 17c36eb5f..966b9b970 100644 --- a/spec/models/form/lettings/questions/uprn_spec.rb +++ b/spec/models/form/lettings/questions/uprn_spec.rb @@ -56,7 +56,7 @@ RSpec.describe Form::Lettings::Questions::Uprn, type: :model do let(:log) do create( :lettings_log, - :completed, + :in_progress, address_line1: "1, Test Street", town_or_city: "Test Town", county: "Test County", diff --git a/spec/models/form/sales/questions/uprn_spec.rb b/spec/models/form/sales/questions/uprn_spec.rb index 4f3eeb3c7..fc0c5caa7 100644 --- a/spec/models/form/sales/questions/uprn_spec.rb +++ b/spec/models/form/sales/questions/uprn_spec.rb @@ -54,7 +54,7 @@ RSpec.describe Form::Sales::Questions::Uprn, type: :model do context "when address is present" do let(:log) do - create( + build( :sales_log, :completed, address_line1: "1, Test Street", @@ -81,7 +81,7 @@ RSpec.describe Form::Sales::Questions::Uprn, type: :model do it "returns formatted value" do expect(question.get_extra_check_answer_value(log)).to eq( - "\n\n1, Test Street\nTest Town\nAA1 1AA\nWestminster", + "\n\n1, Test Street\nTest Town\nAA1 1AA\nBarnet", ) end end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 0412c6ab2..c51f71d3f 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -14,7 +14,6 @@ RSpec.describe Form, type: :model do let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } let(:form) { lettings_log.form } let(:completed_lettings_log) { FactoryBot.build(:lettings_log, :completed) } - let(:conditional_section_complete_lettings_log) { FactoryBot.build(:lettings_log, :conditional_section_complete) } describe ".next_page" do let(:previous_page_id) { form.get_page("person_1_age") } diff --git a/spec/models/log_spec.rb b/spec/models/log_spec.rb index 21ff2849d..76fadad6b 100644 --- a/spec/models/log_spec.rb +++ b/spec/models/log_spec.rb @@ -7,23 +7,26 @@ RSpec.describe Log, type: :model do end describe "#calculate_status" do + let(:organisation) { build(:organisation, id: 1) } + let(:user) { build(:user, id: 1, organisation:) } + it "returns the correct status for a completed sales log" do - complete_sales_log = create(:sales_log, :completed, saledate: Time.zone.local(2023, 12, 12), status: nil) + complete_sales_log = build(:sales_log, :completed, assigned_to: user) expect(complete_sales_log.calculate_status).to eq "completed" end it "returns the correct status for an in progress sales log" do - in_progress_sales_log = create(:sales_log, :in_progress, saledate: Time.zone.local(2023, 12, 12), status: nil) + in_progress_sales_log = build(:sales_log, :in_progress, assigned_to: user) expect(in_progress_sales_log.calculate_status).to eq "in_progress" end it "returns the correct status for a completed lettings log" do - complete_lettings_log = create(:lettings_log, :completed, startdate: Time.zone.local(2023, 12, 12), voiddate: Time.zone.local(2023, 12, 11), mrcdate: Time.zone.local(2023, 12, 11), status: nil) + complete_lettings_log = build(:lettings_log, :completed, assigned_to: user) expect(complete_lettings_log.calculate_status).to eq "completed" end it "returns the correct status for an in progress lettings log" do - in_progress_lettings_log = create(:lettings_log, :in_progress, startdate: Time.zone.local(2023, 12, 12), status: nil) + in_progress_lettings_log = build(:lettings_log, :in_progress, assigned_to: user) expect(in_progress_lettings_log.calculate_status).to eq "in_progress" end end diff --git a/spec/presenters/homepage_presenter_spec.rb b/spec/presenters/homepage_presenter_spec.rb index bcb3e2fc4..857482abd 100644 --- a/spec/presenters/homepage_presenter_spec.rb +++ b/spec/presenters/homepage_presenter_spec.rb @@ -176,7 +176,8 @@ RSpec.describe HomepagePresenter do let(:startdate) { date_last_year } it "exposes the correct data for the data box" do - create_list(type, expected_count, status, assigned_to: user, startdate:) + logs = build_list(type, expected_count, status, assigned_to: user, startdate:) + logs.each { |log| log.save(validate: false) } data = presenter.last_year_in_progress_lettings_data expect(data[:count]).to be expected_count @@ -197,7 +198,7 @@ RSpec.describe HomepagePresenter do let(:startdate) { date_this_year } it "exposes the correct data for the data box" do - create_list(type, expected_count, :completed2024, assigned_to: user, startdate:) + create_list(type, expected_count, :completed, assigned_to: user, startdate:) data = presenter.current_year_completed_lettings_data expect(data[:count]).to be expected_count @@ -214,7 +215,8 @@ RSpec.describe HomepagePresenter do let(:startdate) { date_last_year } it "exposes the correct data for the data box" do - create_list(type, expected_count, status, assigned_to: user, startdate:) + logs = build_list(type, expected_count, status, assigned_to: user, startdate:) + logs.each { |log| log.save(validate: false) } data = presenter.last_year_completed_lettings_data expect(data[:count]).to be expected_count @@ -256,7 +258,8 @@ RSpec.describe HomepagePresenter do let(:saledate) { date_last_year } it "exposes the correct data for the data box" do - create_list(type, expected_count, status, assigned_to: user, saledate:) + logs = build_list(type, expected_count, status, assigned_to: user, saledate:) + logs.each { |log| log.save(validate: false) } data = presenter.last_year_in_progress_sales_data expect(data[:count]).to be expected_count @@ -277,7 +280,7 @@ RSpec.describe HomepagePresenter do let(:saledate) { date_this_year } it "exposes the correct data for the data box" do - create_list(type, expected_count, :completed2024, assigned_to: user, saledate:) + create_list(type, expected_count, :completed, assigned_to: user, saledate:) data = presenter.current_year_completed_sales_data expect(data[:count]).to be expected_count @@ -294,7 +297,8 @@ RSpec.describe HomepagePresenter do let(:saledate) { date_last_year } it "exposes the correct data for the data box" do - create_list(type, expected_count, status, assigned_to: user, saledate:) + logs = build_list(type, expected_count, status, assigned_to: user, saledate:) + logs.each { |log| log.save(validate: false) } data = presenter.last_year_completed_sales_data expect(data[:count]).to be expected_count diff --git a/spec/request_helper.rb b/spec/request_helper.rb index 0defd1ab7..15d178218 100644 --- a/spec/request_helper.rb +++ b/spec/request_helper.rb @@ -17,6 +17,17 @@ module RequestHelper WebMock.stub_request(:get, "https://api.postcodes.io/postcodes/SW1A1AA") .to_return(status: 200, body: "{\"status\":200,\"result\":{\"postcode\":\"ZZ1 1ZZ\",\"admin_district\":\"Westminster\",\"codes\":{\"admin_district\":\"E09000033\"}}}", headers: {}) + body = { results: [{ DPA: { UPRN: "10033558653" } }] }.to_json + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key&maxresults=10&minmatch=0.4&query=Address%20line%201,%20SW1A%201AA") + .to_return(status: 200, body:, headers: {}) + body = { results: [{ DPA: { "POSTCODE": "SW1A 1AA", "POST_TOWN": "London" } }] }.to_json + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key&uprn=1") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key&uprn=10033558653") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=10033558653") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:post, /api.notifications.service.gov.uk\/v2\/notifications\/email/) .to_return(status: 200, body: "", headers: {}) WebMock.stub_request(:post, /api.notifications.service.gov.uk\/v2\/notifications\/sms/) diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 19fda86af..292b8e095 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -1076,8 +1076,8 @@ RSpec.describe LettingsLogsController, type: :request do end context "when requesting a specific lettings log" do - let!(:completed_lettings_log) { FactoryBot.create(:lettings_log, :completed, owning_organisation: user.organisation, managing_organisation: user.organisation, assigned_to: user) } - let(:id) { completed_lettings_log.id } + let(:lettings_log) { create(:lettings_log, :in_progress, assigned_to: user) } + let(:id) { lettings_log.id } before do get "/lettings-logs/#{id}", headers: @@ -1089,7 +1089,7 @@ RSpec.describe LettingsLogsController, type: :request do it "returns a serialized lettings log" do json_response = JSON.parse(response.body) - expect(json_response["status"]).to eq(completed_lettings_log.status) + expect(json_response["status"]).to eq(lettings_log.status) end context "when requesting an invalid lettings log id" do @@ -1101,12 +1101,10 @@ RSpec.describe LettingsLogsController, type: :request do end context "when viewing a pending log" do - let(:completed_lettings_log) do - FactoryBot.create( + let(:lettings_log) do + create( :lettings_log, - :completed, - owning_organisation: user.organisation, - managing_organisation: user.organisation, + :in_progress, assigned_to: user, status: "pending", skip_update_status: true, @@ -1123,28 +1121,21 @@ RSpec.describe LettingsLogsController, type: :request do context "with a user that is not signed in" do it "does not let the user get lettings log tasklist pages they don't have access to" do - get "/lettings-logs/#{lettings_log.id}", headers:, params: {} + get lettings_log_path(lettings_log) expect(response).to redirect_to("/account/sign-in") end end context "with a signed in user" do + let(:lettings_log) { create(:lettings_log, :in_progress, assigned_to: user) } + 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)) - completed_lettings_log.reload + sign_in user end context "with lettings logs that are owned or managed by your organisation" do before do - sign_in user - get "/lettings-logs/#{lettings_log.id}", headers:, params: {} - end - - after do - Timecop.return - Singleton.__init__(FormHandler) + get lettings_log_path(lettings_log) end it "shows the tasklist for lettings logs you have access to" do @@ -1153,119 +1144,54 @@ RSpec.describe LettingsLogsController, type: :request do end it "displays a section status for a lettings log" do - assert_select ".govuk-tag", text: /Not started/, count: 6 - assert_select ".govuk-tag", text: /In progress/, count: 2 - assert_select ".govuk-tag", text: /Completed/, count: 0 - assert_select ".govuk-tag", text: /Cannot start yet/, count: 1 + assert_select ".govuk-tag", text: /Not started/, count: 3 + assert_select ".govuk-tag", text: /In progress/, count: 3 + assert_select ".govuk-tag", text: /Completed/, count: 1 + assert_select ".govuk-tag", text: /Cannot start yet/, count: 0 end - it "displays a link to update the log for currently editable logs" do - completed_lettings_log.update!(startdate: Time.zone.local(2021, 4, 1), tenancylength: nil) - completed_lettings_log.reload + context "and the log is completed" do + let(:lettings_log) { create(:lettings_log, :completed, assigned_to: user) } - get "/lettings-logs/#{completed_lettings_log.id}", headers:, params: {} - expect(completed_lettings_log.form.new_logs_end_date).to eq(Time.zone.local(2022, 11, 20)) - expect(completed_lettings_log.status).to eq("completed") - expect(page).to have_link("review and make changes to this log", href: "/lettings-logs/#{completed_lettings_log.id}/review") + it "displays a link to update the log for currently editable logs" do + expect(lettings_log.status).to eq("completed") + expect(page).to have_link("review and make changes to this log", href: "/lettings-logs/#{lettings_log.id}/review") + end end end context "with lettings logs from a closed collection period before the previous collection" do - before do - sign_in user - Timecop.return - Singleton.__init__(FormHandler) - get "/lettings-logs/#{completed_lettings_log.id}", headers:, params: {} + let(:lettings_log) do + log = build(:lettings_log, :in_progress, assigned_to: user, startdate: Time.zone.today - 2.years) + log.save!(validate: false) + log end - it "redirects to review page" do - expect(response).to redirect_to("/lettings-logs/#{completed_lettings_log.id}/review") - end - end - - context "with lettings logs from a closed previous collection period" do before do - sign_in user - Timecop.freeze(2023, 2, 1) - Singleton.__init__(FormHandler) - get "/lettings-logs/#{completed_lettings_log.id}", headers:, params: {} - end - - after do - Timecop.return - Singleton.__init__(FormHandler) + get lettings_log_path(lettings_log) end it "redirects to review page" do - expect(response).to redirect_to("/lettings-logs/#{completed_lettings_log.id}/review") + expect(response).to redirect_to("/lettings-logs/#{lettings_log.id}/review") end it "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.new_logs_end_date).to eq(Time.zone.local(2022, 11, 20)) - expect(completed_lettings_log.status).to eq("completed") follow_redirect! - expect(page).to have_content("This log is from the 2021/2022 collection window, which is now closed.") + expect(page).to have_content(/This log is from the \d{4}\/\d{4} collection window, which is now closed\./) end end - context "when a lettings log is for a renewal of supported housing, property information does not need to show" do - let(:lettings_log) do - FactoryBot.create( - :lettings_log, - owning_organisation: user.organisation, - managing_organisation: user.organisation, - assigned_to: user, - startdate: Time.zone.now, - renewal: 1, - needstype: 2, - rent_type: 3, - postcode_known: 0, - ) - end - - before do - sign_in user - end + context "when a lettings log is for a renewal of supported housing" do + let(:lettings_log) { create(:lettings_log, :startdate_today, assigned_to: user, renewal: 1, needstype: 2, rent_type: 3, postcode_known: 0) } - around do |example| - FormHandler.instance.use_real_forms! - example.run - FormHandler.instance.use_fake_forms! + it "does not show property information" do + get lettings_log_path(lettings_log) + expect(page).to have_content "Tenancy information" + expect(page).not_to have_content "Property information" end it "does not crash the app if postcode_known is not nil" do - expect { - get "/lettings-logs/#{lettings_log.id}", headers:, params: {} - }.not_to raise_error(ActionView::Template::Error) - end - end - - context "with a lettings log with a single section complete" do - let(:section_completed_lettings_log) do - FactoryBot.create( - :lettings_log, - :conditional_section_complete, - assigned_to: user, - ) - end - - before do - Timecop.freeze(2021, 4, 1) - Singleton.__init__(FormHandler) - sign_in user - get "/lettings-logs/#{section_completed_lettings_log.id}", headers:, params: {} - end - - after do - Timecop.unfreeze - Singleton.__init__(FormHandler) - end - - it "displays a section status for a lettings log" do - assert_select ".govuk-tag", text: /Not started/, count: 6 - assert_select ".govuk-tag", text: /Completed/, count: 1 - assert_select ".govuk-tag", text: /Cannot start yet/, count: 1 + expect { get lettings_log_path(lettings_log) }.not_to raise_error end end @@ -1280,25 +1206,19 @@ RSpec.describe LettingsLogsController, type: :request do end end - context "when the log is unresolved" do - let!(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } - let!(:location) { FactoryBot.create(:location, scheme:) } + context "when valid scheme and location are added to an unresolved log" do + let(:scheme) { create(:scheme, owning_organisation: user.organisation) } + let(:location) { create(:location, scheme:) } + let(:lettings_log) { create(:lettings_log, :in_progress, assigned_to: user, unresolved: true) } + let(:further_unresolved_logs_count) { 2 } before do - Timecop.freeze(2021, 4, 1) - Singleton.__init__(FormHandler) - FactoryBot.create_list(:lettings_log, 3, unresolved: true, assigned_to: user) - lettings_log.update!(needstype: 2, scheme:, location:, unresolved: true) - sign_in user - get "/lettings-logs/#{lettings_log.id}", headers:, params: {} - end - - after do - Timecop.return - Singleton.__init__(FormHandler) + create_list(:lettings_log, further_unresolved_logs_count, unresolved: true, assigned_to: user) + lettings_log.update!(needstype: 2, scheme:, location:) + get lettings_log_path(lettings_log) end - it "marks it as resolved when both scheme and location exist" do + it "marks the log as resolved" do lettings_log.reload expect(lettings_log.unresolved).to eq(false) end @@ -1306,7 +1226,7 @@ RSpec.describe LettingsLogsController, type: :request do it "displays a success banner" do expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_content("You’ve updated all the fields affected by the scheme change") - expect(page).to have_link("Update 3 more logs", href: "/lettings-logs/update-logs") + expect(page).to have_link("Update #{further_unresolved_logs_count} more logs", href: "/lettings-logs/update-logs") end end end @@ -1943,7 +1863,7 @@ RSpec.describe LettingsLogsController, type: :request do sign_in user FactoryBot.create(:lettings_log) FactoryBot.create(:lettings_log, - :completed, + :in_progress, owning_organisation:, managing_organisation: owning_organisation, assigned_to: user)