From dedbba9a8c2e323e3697fd99601272a4cb57f8f2 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Fri, 22 Nov 2024 18:32:17 +0000 Subject: [PATCH 01/32] Update seeds --- db/seeds.rb | 493 +++++++-------------------------- spec/factories/organisation.rb | 10 + spec/factories/sales_log.rb | 11 + spec/factories/scheme.rb | 3 + spec/factories/user.rb | 6 +- 5 files changed, 133 insertions(+), 390 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index b58f7e0a8f..d138feb5ea 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -6,429 +6,145 @@ # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) # Character.create(name: 'Luke', movie: movies.first) -# rubocop:disable Rails/Output -def create_data_protection_confirmation(user) - DataProtectionConfirmation.find_or_create_by!( - organisation: user.organisation, - confirmed: true, - data_protection_officer: user, - signed_at: Time.zone.local(2019, 1, 1), - data_protection_officer_email: user.email, - data_protection_officer_name: user.name, - ) +def find_or_create_user(organisation, email, role) + case role + when :data_provider + FactoryBot.create(:user, :if_unique, :data_provider, email: , organisation: , password: ENV["REVIEW_APP_USER_PASSWORD"]) + when :data_coordinator + FactoryBot.create(:user, :if_unique, :data_coordinator, :data_protection_officer, :with_dsa, email: , organisation: , password: ENV["REVIEW_APP_USER_PASSWORD"]) + when :support + FactoryBot.create(:user, :if_unique, :support, email: , organisation: , password: ENV["REVIEW_APP_USER_PASSWORD"]) + end end unless Rails.env.test? - stock_owner1 = Organisation.find_or_create_by!( - name: "Stock Owner 1", - address_line1: "2 Marsham Street", - address_line2: "London", - postcode: "SW1P 4DF", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "LA", - ) - stock_owner2 = Organisation.find_or_create_by!( - name: "Stock Owner 2", - address_line1: "2 Marsham Street", - address_line2: "London", - postcode: "SW1P 4DF", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "LA", - ) - managing_agent1 = Organisation.find_or_create_by!( - name: "Managing Agent 1 (PRP)", - address_line1: "2 Marsham Street", - address_line2: "London", - postcode: "SW1P 4DF", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "PRP", - ) - managing_agent2 = Organisation.find_or_create_by!( - name: "Managing Agent 2", - address_line1: "2 Marsham Street", - address_line2: "London", - postcode: "SW1P 4DF", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "LA", - ) + if LocalAuthority.count.zero? + la_path = "config/local_authorities_data/initial_local_authorities.csv" + service = Imports::LocalAuthoritiesService.new(path: la_path) + service.call + end - org = Organisation.find_or_create_by!( - name: "MHCLG", - address_line1: "2 Marsham Street", - address_line2: "London", - postcode: "SW1P 4DF", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "LA", - ) do - info = "Seeded MHCLG Organisation" - if Rails.env.development? - pp info - else - Rails.logger.info info + if LaRentRange.count.zero? + Dir.glob("config/rent_range_data/*.csv").each do |path| + start_year = File.basename(path, ".csv") + service = Imports::RentRangesService.new(start_year:, path:) + service.call end end - standalone_owns_stock = Organisation.find_or_create_by!( - name: "Standalone Owns Stock 1 Ltd", - address_line1: "2 Marsham Street", - address_line2: "London", - postcode: "SW1P 4DF", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "LA", - ) + if LaSaleRange.count.zero? + Dir.glob("config/sale_range_data/*.csv").each do |path| + start_year = File.basename(path, ".csv") + service = Imports::SaleRangesService.new(start_year:, path:) + service.call + end + end + + all_rent_periods = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] - standalone_no_stock = Organisation.find_or_create_by!( - name: "Standalone No Stock 1 Ltd", + mhclg = FactoryBot.create( + :organisation, + :if_unique, + name: "MHCLG", address_line1: "2 Marsham Street", address_line2: "London", postcode: "SW1P 4DF", - holds_own_stock: false, + holds_own_stock: true, other_stock_owners: "None", managing_agents_label: "None", provider_type: "LA", - ) - - User.find_or_create_by!( - name: "Provider Owns Stock", - email: "provider.owner1@example.com", - organisation: standalone_owns_stock, - role: "data_provider", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - User.find_or_create_by!( - name: "Coordinator Owns Stock", - email: "coordinator.owner1@example.com", - organisation: standalone_owns_stock, - role: "data_coordinator", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - User.find_or_create_by!( - name: "Provider No Stock", - email: "provider.nostock@example.com", - organisation: standalone_no_stock, - role: "data_provider", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - User.find_or_create_by!( - name: "Coordinator No Stock", - email: "coordinator.nostock@example.com", - organisation: standalone_no_stock, - role: "data_coordinator", - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - end - - User.find_or_create_by!( - name: "Stock owner 1", - email: "stock_owner1_dpo@example.com", - organisation: stock_owner1, - role: "data_coordinator", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - User.find_or_create_by!( - name: "Stock owner 2", - email: "stock_owner2_dpo@example.com", - organisation: stock_owner2, - role: "data_coordinator", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - User.find_or_create_by!( - name: "Managing agent 1", - email: "managing_agent1_dpo@example.com", - organisation: managing_agent1, - role: "data_coordinator", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - User.find_or_create_by!( - name: "Managing agent 2", - email: "managing_agent2_dpo@example.com", - organisation: managing_agent2, - role: "data_coordinator", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - OrganisationRelationship.find_or_create_by!( - parent_organisation: stock_owner1, - child_organisation: org, - ) - OrganisationRelationship.find_or_create_by!( - parent_organisation: stock_owner2, - child_organisation: org, - ) - OrganisationRelationship.find_or_create_by!( - parent_organisation: org, - child_organisation: managing_agent1, - ) - OrganisationRelationship.find_or_create_by!( - parent_organisation: org, - child_organisation: managing_agent2, + rent_periods: all_rent_periods, ) if Rails.env.development? || Rails.env.review? - User.find_or_create_by!( - name: "Provider", - email: "provider@example.com", - organisation: org, - role: "data_provider", - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - end - - User.find_or_create_by!( - name: "Coordinator", - email: "coordinator@example.com", - organisation: org, - role: "data_coordinator", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - user.is_dpo = true - create_data_protection_confirmation(user) - end - - support_user = User.find_or_create_by!( - name: "Support", - email: "support@example.com", - organisation: org, - role: "support", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - - pp "Seeded dummy users" - end - - if (Rails.env.development? || Rails.env.review?) && SalesLog.count.zero? - SalesLog.find_or_create_by!( - assigned_to: support_user, - owning_organisation: org, - managing_organisation: org, - saledate: Time.zone.today, - purchid: "1", - ownershipsch: 1, - type: 2, - jointpur: 1, - jointmore: 1, + stock_owner1 = FactoryBot.create(:organisation, :if_unique, :la, :holds_own_stock, name: "Stock Owner 1", rent_periods: all_rent_periods) + stock_owner2 = FactoryBot.create(:organisation, :if_unique, :la, :holds_own_stock, name: "Stock Owner 2", rent_periods: all_rent_periods.sample(5)) + managing_agent1 = FactoryBot.create(:organisation, :if_unique, :prp, :holds_own_stock, name: "Managing Agent 1 (PRP)", rent_periods: all_rent_periods) + managing_agent2 = FactoryBot.create(:organisation, :if_unique, :la, :holds_own_stock, name: "Managing Agent 2", rent_periods: all_rent_periods.sample(5)) + standalone_owns_stock = FactoryBot.create(:organisation, :if_unique, :la, :holds_own_stock, name: "Standalone Owns Stock 1 Ltd", rent_periods: all_rent_periods) + standalone_no_stock = FactoryBot.create(:organisation, :if_unique, :la, :does_not_own_stock, name: "Standalone No Stock 1 Ltd", rent_periods: all_rent_periods) + + OrganisationRelationship.find_or_create_by!( + parent_organisation: stock_owner1, + child_organisation: mhclg, ) - - SalesLog.find_or_create_by!( - assigned_to: support_user, - owning_organisation: org, - managing_organisation: org, - saledate: Time.zone.today, - purchid: "1", - ownershipsch: 2, - type: 9, - jointpur: 1, - jointmore: 1, + OrganisationRelationship.find_or_create_by!( + parent_organisation: stock_owner2, + child_organisation: mhclg, ) - - SalesLog.find_or_create_by!( - assigned_to: support_user, - owning_organisation: org, - managing_organisation: org, - saledate: Time.zone.today, - purchid: "1", - ownershipsch: 3, - type: 10, - companybuy: 1, + OrganisationRelationship.find_or_create_by!( + parent_organisation: mhclg, + child_organisation: managing_agent1, ) - - pp "Seeded a sales log of each type" - end - - if Rails.env.development? || Rails.env.review? - dummy_org = Organisation.find_or_create_by!( - name: "FooBar LTD", - address_line1: "Higher Kingston", - address_line2: "Yeovil", - postcode: "BA21 4AT", - holds_own_stock: true, - other_stock_owners: "None", - managing_agents_label: "None", - provider_type: "LA", + OrganisationRelationship.find_or_create_by!( + parent_organisation: mhclg, + child_organisation: managing_agent2, ) - pp "Seeded dummy FooBar LTD organisation" + provider = find_or_create_user(mhclg, "provider@example.com", :data_provider) + coordinator = find_or_create_user(mhclg, "coordinator@example.com", :data_coordinator) + support = find_or_create_user(mhclg, "support@example.com", :support) - User.find_or_create_by!( - name: "Dummy user", - email: "dummy_org@example.com", - organisation: dummy_org, - role: "data_provider", - is_dpo: true, - ) do |user| - user.password = ENV["REVIEW_APP_USER_PASSWORD"] - user.confirmed_at = Time.zone.now - create_data_protection_confirmation(user) - end - end + stock_owner1 = find_or_create_user(stock_owner1, "stock_owner1_dpo@example.com", :data_coordinator) + stock_owner2 = find_or_create_user(stock_owner2, "stock_owner2_dpo@example.com", :data_coordinator) - if (Rails.env.development? || Rails.env.review?) && Scheme.count.zero? - scheme1 = Scheme.create!( - service_name: "Beulahside Care", - sensitive: 0, - registered_under_care_act: 1, - support_type: 2, - scheme_type: 4, - intended_stay: "M", - primary_client_group: "O", - has_other_client_group: 1, - secondary_client_group: "H", - owning_organisation: org, - arrangement_type: "D", - confirmed: true, - created_at: Time.zone.now, - ) + managing_agent1 = find_or_create_user(managing_agent1, "managing_agent1_dpo@example.com", :data_coordinator) + managing_agent2 = find_or_create_user(managing_agent2, "managing_agent2_dpo@example.com", :data_coordinator) - scheme2 = Scheme.create!( - service_name: "Abdullahview Point", - sensitive: 0, - registered_under_care_act: 1, - support_type: 2, - scheme_type: 5, - intended_stay: "S", - primary_client_group: "D", - secondary_client_group: "E", - has_other_client_group: 1, - owning_organisation: org, - arrangement_type: "D", - confirmed: true, - created_at: Time.zone.now, - ) + provider_owner1 = find_or_create_user(standalone_owns_stock, "provider.owner1@example.com", :data_provider) + coordinator_owner1 = find_or_create_user(standalone_owns_stock, "coordinator.owner1@example.com", :data_coordinator) - Scheme.create!( - service_name: "Caspermouth Center", - sensitive: 1, - registered_under_care_act: 1, - support_type: 4, - scheme_type: 7, - intended_stay: "X", - primary_client_group: "G", - has_other_client_group: 1, - secondary_client_group: "R", - owning_organisation: dummy_org, - arrangement_type: "D", - confirmed: true, - created_at: Time.zone.now, - ) + find_or_create_user(standalone_no_stock, "provider.nostock@example.com", :data_provider) + find_or_create_user(standalone_no_stock, "coordinator.nostock@example.com", :data_coordinator) - Location.create!( - scheme: scheme1, - location_code: "E09000033", - location_admin_district: "Westminster", - postcode: "CU193AA", - name: "Rectory Road", - type_of_unit: 4, - units: 1, - mobility_type: "N", - ) + if Scheme.count.zero? + scheme1 = FactoryBot.create(:scheme, service_name: "Beulahside Care", owning_organisation: mhclg) + scheme2 = FactoryBot.create(:scheme, service_name: "Abdullahview Point", owning_organisation: mhclg) + scheme3 = FactoryBot.create(:scheme, :created_now, owning_organisation: mhclg) + scheme4 = FactoryBot.create(:scheme, owning_organisation: stock_owner1) - Location.create!( - scheme: scheme1, - location_code: "E09000033", - location_admin_district: "Westminster", - postcode: "DM250DC", - name: "Smithy Lane", - type_of_unit: 1, - units: 1, - mobility_type: "W", - ) + [scheme1, scheme2, scheme3, scheme4].each do |scheme| + FactoryBot.create(:location, scheme:) + end + [scheme2, scheme3].each do |scheme| + FactoryBot.create_list(3, :location, scheme:) + end + end - Location.create!( - scheme: scheme2, - location_code: "E09000033", - location_admin_district: "Westminster", - postcode: "YX130WP", - name: "Smithy Lane", - type_of_unit: 2, - units: 1, - mobility_type: "W", - ) - pp "Seeded dummy schemes" - end + users_with_logs = [support, coordinator, provider, provider_owner1, coordinator_owner1, managing_agent1, managing_agent2, stock_owner1, stock_owner2] - if LocalAuthority.count.zero? - la_path = "config/local_authorities_data/initial_local_authorities.csv" - service = Imports::LocalAuthoritiesService.new(path: la_path) - service.call - end + if SalesLog.count.zero? + users_with_logs.each do |user| + FactoryBot.create(:sales_log, :shared_ownership_setup_complete, assigned_to: user) + FactoryBot.create(:sales_log, :discounted_ownership_setup_complete, assigned_to: user) + FactoryBot.create(:sales_log, :outright_sale_setup_complete, assigned_to: user) + FactoryBot.create(:sales_log, :completed, assigned_to: user) + end - if (Rails.env.development? || Rails.env.review?) && LocalAuthorityLink.count.zero? - 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 + FactoryBot.create(:sales_log, :completed, assigned_to: managing_agent1, owning_organisation: mhclg) + FactoryBot.create(:sales_log, :completed, assigned_to: provider, owning_organisation: stock_owner1) end - pp "Seeded local authority links" - end - - if LaRentRange.count.zero? - Dir.glob("config/rent_range_data/*.csv").each do |path| - start_year = File.basename(path, ".csv") - service = Imports::RentRangesService.new(start_year:, path:) - service.call + if LettingsLog.count.zero? + users_with_logs.each do |user| + FactoryBot.create(:lettings_log, :setup_completed, assigned_to: user) + FactoryBot.create(:lettings_log, :completed, assigned_to: user) + if user.organisation.owned_schemes.any? + scheme = user.organisation.owned_schemes.first + FactoryBot.create(:lettings_log, :setup_completed, :sh, scheme:, location: scheme.locations.first, assigned_to: user) + end + end + + FactoryBot.create(:lettings_log, :completed, assigned_to: managing_agent1, owning_organisation: mhclg) + FactoryBot.create(:lettings_log, :completed, assigned_to: provider, owning_organisation: stock_owner1) end - end - if LaSaleRange.count.zero? - Dir.glob("config/sale_range_data/*.csv").each do |path| - start_year = File.basename(path, ".csv") - service = Imports::SaleRangesService.new(start_year:, path:) - service.call + if LocalAuthorityLink.count.zero? + 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 end end end @@ -438,4 +154,3 @@ def create_data_protection_confirmation(user) service = Imports::LocalAuthoritiesService.new(path:) service.call end -# rubocop:enable Rails/Output diff --git a/spec/factories/organisation.rb b/spec/factories/organisation.rb index 6623ff3557..376b9c126f 100644 --- a/spec/factories/organisation.rb +++ b/spec/factories/organisation.rb @@ -41,7 +41,13 @@ trait :prp do provider_type { "PRP" } end + trait :la do + provider_type { "LA" } + end + trait :holds_own_stock do + holds_own_stock { true } + end trait :does_not_own_stock do holds_own_stock { false } end @@ -53,6 +59,10 @@ data_protection_confirmation { nil } end + + trait :if_unique do + initialize_with { Organisation.find_or_create_by(name:) } + end end factory :organisation_rent_period do diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index b809b9daf9..f5e942c340 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -32,6 +32,17 @@ jointpur { 2 } noint { 2 } privacynotice { 1 } + purchid { rand(999_999_999).to_s } + end + trait :discounted_ownership_setup_complete do + saledate_today + ownershipsch { 2 } + type { 9 } + jointpur { 1 } + jointmore { 1 } + noint { 2 } + privacynotice { 1 } + purchid { rand(999_999_999).to_s } end trait :outright_sale_setup_complete do saledate_today diff --git a/spec/factories/scheme.rb b/spec/factories/scheme.rb index 77d74b70a5..34f98a8a66 100644 --- a/spec/factories/scheme.rb +++ b/spec/factories/scheme.rb @@ -41,5 +41,8 @@ support_type { 2 } intended_stay { "M" } end + trait :created_now do + created_at { Time.zone.now } + end end end diff --git a/spec/factories/user.rb b/spec/factories/user.rb index 956d883320..8708e319b2 100644 --- a/spec/factories/user.rb +++ b/spec/factories/user.rb @@ -1,7 +1,7 @@ FactoryBot.define do factory :user do sequence(:email) { "test#{SecureRandom.hex}@example.com" } - name { "Danny Rojas" } + name { Faker::Name.name } password { "pAssword1" } organisation { association :organisation, with_dsa: is_dpo ? false : true } role { "data_provider" } @@ -40,5 +40,9 @@ ) end end + + trait :if_unique do + initialize_with { User.find_or_create_by(email:) } + end end end From 3c6fca11849f44ce1fcf6636d199282e78793a46 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 11:53:30 +0000 Subject: [PATCH 02/32] Fix linting --- db/seeds.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index d138feb5ea..b0c2d14d0a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -9,11 +9,11 @@ def find_or_create_user(organisation, email, role) case role when :data_provider - FactoryBot.create(:user, :if_unique, :data_provider, email: , organisation: , password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :data_provider, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) when :data_coordinator - FactoryBot.create(:user, :if_unique, :data_coordinator, :data_protection_officer, :with_dsa, email: , organisation: , password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :data_coordinator, :data_protection_officer, :with_dsa, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) when :support - FactoryBot.create(:user, :if_unique, :support, email: , organisation: , password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :support, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) end end From 3f0ddce951e3673b763913b4697658652d155ff6 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 12:40:57 +0000 Subject: [PATCH 03/32] Update dsa bits --- db/seeds.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/seeds.rb b/db/seeds.rb index b0c2d14d0a..cc48f97373 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -11,7 +11,7 @@ def find_or_create_user(organisation, email, role) when :data_provider FactoryBot.create(:user, :if_unique, :data_provider, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) when :data_coordinator - FactoryBot.create(:user, :if_unique, :data_coordinator, :data_protection_officer, :with_dsa, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :data_coordinator, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) when :support FactoryBot.create(:user, :if_unique, :support, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) end From 07b27326e1aef0002042c4f2de2b13d6e1700982 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 13:09:36 +0000 Subject: [PATCH 04/32] Fix duplicate user/org variable names --- db/seeds.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index cc48f97373..5852667358 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -85,11 +85,11 @@ def find_or_create_user(organisation, email, role) coordinator = find_or_create_user(mhclg, "coordinator@example.com", :data_coordinator) support = find_or_create_user(mhclg, "support@example.com", :support) - stock_owner1 = find_or_create_user(stock_owner1, "stock_owner1_dpo@example.com", :data_coordinator) - stock_owner2 = find_or_create_user(stock_owner2, "stock_owner2_dpo@example.com", :data_coordinator) + stock_owner1_user = find_or_create_user(stock_owner1, "stock_owner1_dpo@example.com", :data_coordinator) + stock_owner2_user = find_or_create_user(stock_owner2, "stock_owner2_dpo@example.com", :data_coordinator) - managing_agent1 = find_or_create_user(managing_agent1, "managing_agent1_dpo@example.com", :data_coordinator) - managing_agent2 = find_or_create_user(managing_agent2, "managing_agent2_dpo@example.com", :data_coordinator) + managing_agent1_user = find_or_create_user(managing_agent1, "managing_agent1_dpo@example.com", :data_coordinator) + managing_agent2_user = find_or_create_user(managing_agent2, "managing_agent2_dpo@example.com", :data_coordinator) provider_owner1 = find_or_create_user(standalone_owns_stock, "provider.owner1@example.com", :data_provider) coordinator_owner1 = find_or_create_user(standalone_owns_stock, "coordinator.owner1@example.com", :data_coordinator) @@ -111,7 +111,7 @@ def find_or_create_user(organisation, email, role) end end - users_with_logs = [support, coordinator, provider, provider_owner1, coordinator_owner1, managing_agent1, managing_agent2, stock_owner1, stock_owner2] + users_with_logs = [provider, coordinator, support, stock_owner1_user, stock_owner2_user, managing_agent1_user, managing_agent2_user, provider_owner1, coordinator_owner1] if SalesLog.count.zero? users_with_logs.each do |user| @@ -121,7 +121,7 @@ def find_or_create_user(organisation, email, role) FactoryBot.create(:sales_log, :completed, assigned_to: user) end - FactoryBot.create(:sales_log, :completed, assigned_to: managing_agent1, owning_organisation: mhclg) + FactoryBot.create(:sales_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) FactoryBot.create(:sales_log, :completed, assigned_to: provider, owning_organisation: stock_owner1) end @@ -135,7 +135,7 @@ def find_or_create_user(organisation, email, role) end end - FactoryBot.create(:lettings_log, :completed, assigned_to: managing_agent1, owning_organisation: mhclg) + FactoryBot.create(:lettings_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) FactoryBot.create(:lettings_log, :completed, assigned_to: provider, owning_organisation: stock_owner1) end From 85120e6f10cc54045a30c4cad178858d5e6ac340 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 13:34:43 +0000 Subject: [PATCH 05/32] Fix create_list --- db/seeds.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/seeds.rb b/db/seeds.rb index 5852667358..8c7cf89d72 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -107,7 +107,7 @@ def find_or_create_user(organisation, email, role) FactoryBot.create(:location, scheme:) end [scheme2, scheme3].each do |scheme| - FactoryBot.create_list(3, :location, scheme:) + FactoryBot.create_list(:location, 3, scheme:) end end From 20f708a9f4e1536f1ea3435418b3dec59662094d Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 14:05:58 +0000 Subject: [PATCH 06/32] Set faker locale for development and review --- config/environments/development.rb | 2 ++ config/environments/review.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/config/environments/development.rb b/config/environments/development.rb index 7e1890b026..f756435249 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -81,6 +81,8 @@ # Uncomment if you wish to allow Action Cable access from any origin. # config.action_cable.disable_request_forgery_protection = true + Faker::Config.locale = "en-GB" + # see https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017 config.active_record.yaml_column_permitted_classes = [Time, BigDecimal] diff --git a/config/environments/review.rb b/config/environments/review.rb index f7438fdb6d..471879b279 100644 --- a/config/environments/review.rb +++ b/config/environments/review.rb @@ -125,6 +125,8 @@ # config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver # config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session + Faker::Config.locale = "en-GB" + # see https://discuss.rubyonrails.org/t/cve-2022-32224-possible-rce-escalation-bug-with-serialized-columns-in-active-record/81017 config.active_record.yaml_column_permitted_classes = [Time, BigDecimal] end From 0bd7a8543f721214f7a47ebf15f541177c93c971 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 14:20:38 +0000 Subject: [PATCH 07/32] Update tests that relied on user factory default name --- spec/models/user_spec.rb | 2 +- spec/requests/users_controller_spec.rb | 4 ++-- .../exports/user_export_service_spec.rb | 2 +- .../merge/merge_organisations_service_spec.rb | 20 +++++++++---------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 89f4f9deef..51cfc00bdc 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -380,7 +380,7 @@ end describe "paper trail" do - let(:user) { create(:user) } + let(:user) { create(:user, name: "Danny Rojas") } it "creates a record of changes to a log" do expect { user.update!(name: "new test name") }.to change(user.versions, :count).by(1) diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 1b62196bb4..868b1d1f26 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -1261,8 +1261,8 @@ end context "when user is signed in as a support user" do - let(:user) { create(:user, :support, organisation: create(:organisation, :without_dpc)) } - let(:other_user) { create(:user, organisation: user.organisation, last_sign_in_at: Time.zone.now) } + let(:user) { create(:user, :support, name: "Danny Rojas", organisation: create(:organisation, :without_dpc)) } + let(:other_user) { create(:user, name: "Danny Rojas", organisation: user.organisation, last_sign_in_at: Time.zone.now) } before do allow(user).to receive(:need_two_factor_authentication?).and_return(false) diff --git a/spec/services/exports/user_export_service_spec.rb b/spec/services/exports/user_export_service_spec.rb index 713d6f9078..51dfd724b2 100644 --- a/spec/services/exports/user_export_service_spec.rb +++ b/spec/services/exports/user_export_service_spec.rb @@ -42,7 +42,7 @@ def replace_record_number(export_template, record_number) end context "and one user is available for export" do - let!(:user) { create(:user, organisation:, phone_extension: "123") } + let!(:user) { create(:user, organisation:, name: "Danny Rojas", phone_extension: "123") } it "generates a ZIP export file with the expected filename" do expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index 7163a142f6..6e942aedc9 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -28,7 +28,7 @@ it "moves the users from merging organisation to absorbing organisation" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("New schemes from fake org:") merge_organisations_service.call @@ -477,7 +477,7 @@ it "logs the merged schemes and locations" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("New schemes from fake org:") expect(Rails.logger).to receive(:info).with(/\t#{scheme.service_name} \(S/) @@ -744,7 +744,7 @@ it "logs the merged schemes" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("New schemes from fake org:") expect(Rails.logger).to receive(:info).with(/\t#{scheme.service_name} \(S/) @@ -922,7 +922,7 @@ let!(:merging_organisation_user) { create(:user, organisation: merging_organisation, name: "fake name", email: "fake@email.com") } before do - create_list(:user, 5, organisation: merging_organisation_too) + create_list(:user, 5, organisation: merging_organisation_too, name: "Danny Rojas") end it "sets merge date and absorbing organisation on merged organisations" do @@ -961,7 +961,7 @@ context "and merging users" do it "moves the users from merging organisations to absorbing organisation" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("Merged users from second org:") expect(Rails.logger).to receive(:info).with(/\tDanny Rojas/).exactly(6).times @@ -1113,7 +1113,7 @@ it "moves the users from merging organisation to absorbing organisation" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("New schemes from fake org:") merge_organisations_service.call @@ -1251,7 +1251,7 @@ it "logs the merged schemes" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("New schemes from fake org:") expect(Rails.logger).to receive(:info).with(/\t#{scheme.service_name} \(S/) @@ -1462,7 +1462,7 @@ it "logs the merged schemes" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("New schemes from fake org:") expect(Rails.logger).to receive(:info).with(/\t#{scheme.service_name} \(S/) @@ -1590,12 +1590,12 @@ let!(:merging_organisation_user) { create(:user, organisation: merging_organisation, name: "fake name", email: "fake@email.com") } before do - create_list(:user, 5, organisation: merging_organisation_too) + create_list(:user, 5, organisation: merging_organisation_too, name: "Danny Rojas") end it "moves the users from merging organisations to absorbing organisation" do expect(Rails.logger).to receive(:info).with("Merged users from fake org:") - expect(Rails.logger).to receive(:info).with("\tDanny Rojas (#{merging_organisation.data_protection_officers.first.email})") + expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("Merged users from second org:") expect(Rails.logger).to receive(:info).with(/\tDanny Rojas/).exactly(6).times From bf3405fcc60ccd4378d7fe9978827a66422da481 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 14:51:42 +0000 Subject: [PATCH 08/32] Update more tests --- spec/services/merge/merge_organisations_service_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index 6e942aedc9..2a155ad5d1 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -964,7 +964,8 @@ expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("Merged users from second org:") - expect(Rails.logger).to receive(:info).with(/\tDanny Rojas/).exactly(6).times + expect(Rails.logger).to receive(:info).with(/\tDanny Rojas/).exactly(5).times + expect(Rails.logger).to receive(:info).with(/\t#{merging_organisation_too.data_protection_officers.first.name}/) expect(Rails.logger).to receive(:info).with("New schemes from fake org:") expect(Rails.logger).to receive(:info).with("New schemes from second org:") merge_organisations_service.call @@ -1598,7 +1599,8 @@ expect(Rails.logger).to receive(:info).with("\t#{merging_organisation.data_protection_officers.first.name} (#{merging_organisation.data_protection_officers.first.email})") expect(Rails.logger).to receive(:info).with("\tfake name (fake@email.com)") expect(Rails.logger).to receive(:info).with("Merged users from second org:") - expect(Rails.logger).to receive(:info).with(/\tDanny Rojas/).exactly(6).times + expect(Rails.logger).to receive(:info).with(/\tDanny Rojas/).exactly(5).times + expect(Rails.logger).to receive(:info).with(/\t#{merging_organisation_too.data_protection_officers.first.name}/) expect(Rails.logger).to receive(:info).with("New schemes from fake org:") expect(Rails.logger).to receive(:info).with("New schemes from second org:") merge_organisations_service.call From e619fd296263f7d15bcf107dbde16ffe73f2e255 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 15:06:05 +0000 Subject: [PATCH 09/32] Add additional randomness to log factories --- spec/factories/lettings_log.rb | 12 ++++++------ spec/factories/sales_log.rb | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 8ebe448750..78428560bd 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -56,8 +56,8 @@ status { 2 } tenancycode { Faker::Name.initials(number: 10) } age1_known { 0 } - age1 { 35 } - sex1 { "F" } + age1 { Faker::Number.within(range: 25..55) } + sex1 { %w[F M X R].sample } ethnic_group { 0 } ethnic { 2 } national { 13 } @@ -67,8 +67,8 @@ relat2 { "P" } age2_known { 0 } details_known_2 { 0 } - age2 { 32 } - sex2 { "M" } + age2 { Faker::Number.within(range: 25..55) } + sex2 { %w[F M X R].sample } ecstat2 { 6 } homeless { 1 } underoccupation_benefitcap { 0 } @@ -162,8 +162,8 @@ referral { 2 } uprn_known { 0 } joint { 3 } - address_line1 { "Address line 1" } - town_or_city { "London" } + address_line1 { Faker::Address.street_address } + town_or_city { Faker::Address.city } ppcodenk { 1 } tshortfall_known { 1 } after(:build) do |log, _evaluator| diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index f5e942c340..35ae063ed9 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -78,14 +78,14 @@ noint { 2 } privacynotice { 1 } age1_known { 0 } - age1 { 30 } - sex1 { "X" } + age1 { Faker::Number.within(range: 25..55) } + sex1 { %w[F M X R].sample } national { 18 } buy1livein { 1 } relat2 { "P" } proptype { 1 } age2_known { 0 } - age2 { 35 } + age2 { Faker::Number.within(range: 25..55) } builtype { 1 } ethnic { 3 } ethnic_group { 17 } @@ -114,17 +114,17 @@ income2 { 10_000 } inc2mort { 1 } uprn_known { 0 } - address_line1 { "Address line 1" } - town_or_city { "Town or city" } + address_line1 { Faker::Address.street_address } + town_or_city { Faker::Address.city } la_known { 1 } la { "E09000003" } savingsnk { 1 } prevown { 1 } prevshared { 2 } - sex3 { "X" } - sex4 { "X" } - sex5 { "X" } - sex6 { "X" } + sex3 { %w[F M X R].sample } + sex4 { %w[F M X R].sample } + sex5 { %w[F M X R].sample } + sex6 { %w[F M X R].sample } mortgage { 20_000 } ecstat3 { 9 } ecstat4 { 3 } @@ -155,7 +155,7 @@ mscharge { 100 } mortlen { 10 } pcodenk { 0 } - postcode_full { "SW1A 1AA" } + postcode_full { Faker::Address.postcode } is_la_inferred { false } mortgagelender { 5 } extrabor { 1 } From 1faacc0bc547a5a903a9d0c7d25855f73dc7f478 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 15:08:21 +0000 Subject: [PATCH 10/32] Also create older logs --- db/seeds.rb | 2 ++ spec/factories/sales_log.rb | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/db/seeds.rb b/db/seeds.rb index 8c7cf89d72..7855d752f8 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -119,6 +119,7 @@ def find_or_create_user(organisation, email, role) FactoryBot.create(:sales_log, :discounted_ownership_setup_complete, assigned_to: user) FactoryBot.create(:sales_log, :outright_sale_setup_complete, assigned_to: user) FactoryBot.create(:sales_log, :completed, assigned_to: user) + FactoryBot.create_list(:sales_log, 2, :completed, :ignore_validation_errors, saledate: Time.zone.today - 1.year, assigned_to: user) end FactoryBot.create(:sales_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) @@ -133,6 +134,7 @@ def find_or_create_user(organisation, email, role) scheme = user.organisation.owned_schemes.first FactoryBot.create(:lettings_log, :setup_completed, :sh, scheme:, location: scheme.locations.first, assigned_to: user) end + FactoryBot.create_list(:lettings_log, 2, :completed, :ignore_validation_errors, startdate: Time.zone.today - 1.year, assigned_to: user) end FactoryBot.create(:lettings_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 35ae063ed9..9d4b5d7677 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -185,5 +185,12 @@ trait :imported do old_id { Random.hex } end + trait :ignore_validation_errors do + to_create do |instance| + instance.valid? + instance.errors.clear + instance.save!(validate: false) + end + end end end From c756c76c516363cd49e64136a907c9873ccc2036 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 16:29:34 +0000 Subject: [PATCH 11/32] Update tests and log randomness --- spec/factories/lettings_log.rb | 2 +- spec/factories/sales_log.rb | 4 ++-- spec/models/form_spec.rb | 2 +- .../exports/lettings_log_export_service_spec.rb | 12 ++++++------ 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 78428560bd..22682c70c6 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -162,7 +162,7 @@ referral { 2 } uprn_known { 0 } joint { 3 } - address_line1 { Faker::Address.street_address } + address_line1 { "Address line 1" } town_or_city { Faker::Address.city } ppcodenk { 1 } tshortfall_known { 1 } diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 9d4b5d7677..0c62369319 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -114,7 +114,7 @@ income2 { 10_000 } inc2mort { 1 } uprn_known { 0 } - address_line1 { Faker::Address.street_address } + address_line1 { "Address line 1" } town_or_city { Faker::Address.city } la_known { 1 } la { "E09000003" } @@ -155,7 +155,7 @@ mscharge { 100 } mortlen { 10 } pcodenk { 0 } - postcode_full { Faker::Address.postcode } + postcode_full { "SW1A 1AA" } is_la_inferred { false } mortgagelender { 5 } extrabor { 1 } diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index d3dc7e21f5..74594c9b96 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -329,7 +329,7 @@ def answer_local_authority(lettings_log) end context "when a value is changed such that a radio and free input questions are no longer routed to" do - let(:log) { FactoryBot.create(:lettings_log, :completed, startdate: now) } + let(:log) { FactoryBot.create(:lettings_log, :completed, startdate: now, hhmemb: 2, details_known_2: 0, sex2: "M", relat2: "P", age2_known: 0, age2: 32, ecstat2: 6) } it "all attributes relating to that checkbox question are cleared" do expect(log.hhmemb).to be 2 diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb index 6f7d88c91a..abece2e125 100644 --- a/spec/services/exports/lettings_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -79,7 +79,7 @@ def replace_record_number(export_template, record_number) end context "and one lettings log is available for export" do - let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, age1: 35, sex1: "F", age2: 32, sex2: "M", propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", town_or_city: "London", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } it "generates a ZIP export file with the expected filename" do expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) @@ -123,7 +123,7 @@ def replace_record_number(export_template, record_number) end context "and one lettings log with unknown user details is available for export" do - let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, details_known_2: 1, assigned_to: user, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, details_known_2: 1, assigned_to: user, age1: 35, sex1: "F", propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", town_or_city: "London", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } def replace_person_details(export_file) export_file.sub!("32", "-9") @@ -176,7 +176,7 @@ def replace_person_details(export_file) end context "and one lettings log is available for export" do - let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, uprn_known: 1, uprn: "100023336956", propcode: "123", postcode_full: "SE2 6RT", ppostcode_full: "SE2 6RT", tenancycode: "BZ737", startdate: Time.zone.local(2023, 4, 2, 10, 36, 49), voiddate: Time.zone.local(2021, 11, 3), mrcdate: Time.zone.local(2022, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, age1: 35, sex1: "F", age2: 32, sex2: "M", uprn_known: 1, uprn: "100023336956", propcode: "123", postcode_full: "SE2 6RT", ppostcode_full: "SE2 6RT", tenancycode: "BZ737", startdate: Time.zone.local(2023, 4, 2, 10, 36, 49), voiddate: Time.zone.local(2021, 11, 3), mrcdate: Time.zone.local(2022, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4) } let(:expected_zip_filename) { "core_2023_2024_apr_mar_f0001_inc0001.zip" } let(:expected_data_filename) { "core_2023_2024_apr_mar_f0001_inc0001_pt001.xml" } let(:xml_export_file) { File.open("spec/fixtures/exports/general_needs_log_23_24.xml", "r:UTF-8") } @@ -396,7 +396,7 @@ def create_fake_maifest end context "and one lettings log with duplicate reference is available for export" do - let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4, duplicate_set_id: 123) } + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, age1: 35, sex1: "F", age2: 32, sex2: "M", propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", town_or_city: "London", tenancycode: "BZ737", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4, duplicate_set_id: 123) } def replace_duplicate_set_id(export_file) export_file.sub!("", "123") @@ -429,7 +429,7 @@ def replace_duplicate_set_id(export_file) end context "and one lettings log is available for export" do - let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, ppostcode_full: "A1 1AA", nationality_all_group: 13, propcode: "123", postcode_full: "SE2 6RT", tenancycode: "BZ737", startdate: Time.zone.local(2024, 4, 2, 10, 36, 49), voiddate: Time.zone.local(2021, 11, 3), mrcdate: Time.zone.local(2022, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4, creation_method: 2, bulk_upload_id: 1, address_line1_as_entered: "address line 1 as entered", address_line2_as_entered: "address line 2 as entered", town_or_city_as_entered: "town or city as entered", county_as_entered: "county as entered", postcode_full_as_entered: "AB1 2CD", la_as_entered: "la as entered") } + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, assigned_to: user, age1: 35, sex1: "F", age2: 32, sex2: "M", ppostcode_full: "A1 1AA", nationality_all_group: 13, propcode: "123", postcode_full: "SE2 6RT", tenancycode: "BZ737", startdate: Time.zone.local(2024, 4, 2, 10, 36, 49), voiddate: Time.zone.local(2021, 11, 3), mrcdate: Time.zone.local(2022, 5, 5, 10, 36, 49), tenancylength: 5, underoccupation_benefitcap: 4, creation_method: 2, bulk_upload_id: 1, address_line1_as_entered: "address line 1 as entered", address_line2_as_entered: "address line 2 as entered", town_or_city_as_entered: "town or city as entered", county_as_entered: "county as entered", postcode_full_as_entered: "AB1 2CD", la_as_entered: "la as entered") } let(:expected_zip_filename) { "core_2024_2025_apr_mar_f0001_inc0001.zip" } let(:expected_data_filename) { "core_2024_2025_apr_mar_f0001_inc0001_pt001.xml" } let(:xml_export_file) { File.open("spec/fixtures/exports/general_needs_log_24_25.xml", "r:UTF-8") } @@ -456,7 +456,7 @@ def replace_duplicate_set_id(export_file) let(:scheme) { FactoryBot.create(:scheme, :export, owning_organisation: organisation) } let(:location) { FactoryBot.create(:location, :export, scheme:, startdate: Time.zone.local(2021, 4, 1), old_id: "1a") } - let(:lettings_log) { FactoryBot.create(:lettings_log, :completed, :export, :sh, scheme:, location:, assigned_to: user, updated_by: other_user, owning_organisation: organisation, startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), underoccupation_benefitcap: 4, sheltered: 1) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :completed, :export, :sh, scheme:, location:, assigned_to: user, updated_by: other_user, owning_organisation: organisation, age1: 35, sex1: "F", age2: 32, sex2: "M", startdate: Time.zone.local(2022, 2, 2, 10, 36, 49), voiddate: Time.zone.local(2019, 11, 3), mrcdate: Time.zone.local(2020, 5, 5, 10, 36, 49), underoccupation_benefitcap: 4, sheltered: 1) } before do lettings_log.postcode_full = nil From f3a37beafc5e9b7fb33a13ad28bb741d17bcf2bc Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 16:41:52 +0000 Subject: [PATCH 12/32] Ensure sufficient gap between child and parent ages --- spec/factories/sales_log.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 0c62369319..3b93492870 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -78,7 +78,7 @@ noint { 2 } privacynotice { 1 } age1_known { 0 } - age1 { Faker::Number.within(range: 25..55) } + age1 { Faker::Number.within(range: 27..55) } sex1 { %w[F M X R].sample } national { 18 } buy1livein { 1 } From 56b9a18b067c5996e2edb7cb4d2a48fa6060a28f Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 17:10:00 +0000 Subject: [PATCH 13/32] More test fixes --- spec/factories/sales_log.rb | 1 + spec/services/csv/sales_log_csv_service_spec.rb | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 3b93492870..1a97862acc 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -133,6 +133,7 @@ disabled { 1 } deposit { 80_000 } value { 110_000 } + value_value_check { 0 } grant { 10_000 } proplen { 10 } pregyrha { 1 } diff --git a/spec/services/csv/sales_log_csv_service_spec.rb b/spec/services/csv/sales_log_csv_service_spec.rb index 4bbbaf6451..d6ba36c6c2 100644 --- a/spec/services/csv/sales_log_csv_service_spec.rb +++ b/spec/services/csv/sales_log_csv_service_spec.rb @@ -19,13 +19,20 @@ owning_organisation: organisation, purchid: nil, hholdcount: 3, + age1: 30, + sex1: "X", + age2: 35, + sex2: "X", + sex3: "X", age4_known: 1, + sex4: "X", details_known_5: 2, age6_known: nil, age6: nil, ecstat6: nil, relat6: nil, sex6: nil, + town_or_city: "Town or city", address_line1_as_entered: "address line 1 as entered", address_line2_as_entered: "address line 2 as entered", town_or_city_as_entered: "town or city as entered", From 9654160a4ee7a1d33feb2b1976ea6db139a7a544 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 17:18:05 +0000 Subject: [PATCH 14/32] Specify names for users --- db/seeds.rb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index 7855d752f8..fe14cf3e68 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -6,14 +6,14 @@ # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) # Character.create(name: 'Luke', movie: movies.first) -def find_or_create_user(organisation, email, role) +def find_or_create_user(organisation, email, name, role) case role when :data_provider - FactoryBot.create(:user, :if_unique, :data_provider, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :data_provider, organisation:, email:, name:, password: ENV["REVIEW_APP_USER_PASSWORD"]) when :data_coordinator - FactoryBot.create(:user, :if_unique, :data_coordinator, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :data_coordinator, organisation:, email:, name:, password: ENV["REVIEW_APP_USER_PASSWORD"]) when :support - FactoryBot.create(:user, :if_unique, :support, email:, organisation:, password: ENV["REVIEW_APP_USER_PASSWORD"]) + FactoryBot.create(:user, :if_unique, :support, organisation:, email:, name:, password: ENV["REVIEW_APP_USER_PASSWORD"]) end end @@ -81,21 +81,21 @@ def find_or_create_user(organisation, email, role) child_organisation: managing_agent2, ) - provider = find_or_create_user(mhclg, "provider@example.com", :data_provider) - coordinator = find_or_create_user(mhclg, "coordinator@example.com", :data_coordinator) - support = find_or_create_user(mhclg, "support@example.com", :support) + provider = find_or_create_user(mhclg, "provider@example.com", "Provider", :data_provider) + coordinator = find_or_create_user(mhclg, "coordinator@example.com", "Coordinator", :data_coordinator) + support = find_or_create_user(mhclg, "support@example.com", "Support", :support) - stock_owner1_user = find_or_create_user(stock_owner1, "stock_owner1_dpo@example.com", :data_coordinator) - stock_owner2_user = find_or_create_user(stock_owner2, "stock_owner2_dpo@example.com", :data_coordinator) + stock_owner1_user = find_or_create_user(stock_owner1, "stock_owner1_dpo@example.com", "Stock owner 1", :data_coordinator) + stock_owner2_user = find_or_create_user(stock_owner2, "stock_owner2_dpo@example.com", "Stock owner 2", :data_coordinator) - managing_agent1_user = find_or_create_user(managing_agent1, "managing_agent1_dpo@example.com", :data_coordinator) - managing_agent2_user = find_or_create_user(managing_agent2, "managing_agent2_dpo@example.com", :data_coordinator) + managing_agent1_user = find_or_create_user(managing_agent1, "managing_agent1_dpo@example.com", "Managing agent 1", :data_coordinator) + managing_agent2_user = find_or_create_user(managing_agent2, "managing_agent2_dpo@example.com", "Managing agent 2", :data_coordinator) - provider_owner1 = find_or_create_user(standalone_owns_stock, "provider.owner1@example.com", :data_provider) - coordinator_owner1 = find_or_create_user(standalone_owns_stock, "coordinator.owner1@example.com", :data_coordinator) + provider_owner1 = find_or_create_user(standalone_owns_stock, "provider.owner1@example.com", "Provider Owns Stock", :data_provider) + coordinator_owner1 = find_or_create_user(standalone_owns_stock, "coordinator.owner1@example.com", "Coordinator Owns Stock", :data_coordinator) - find_or_create_user(standalone_no_stock, "provider.nostock@example.com", :data_provider) - find_or_create_user(standalone_no_stock, "coordinator.nostock@example.com", :data_coordinator) + find_or_create_user(standalone_no_stock, "provider.nostock@example.com", "Provider No Stock",:data_provider) + find_or_create_user(standalone_no_stock, "coordinator.nostock@example.com", "Coordinator No Stock", :data_coordinator) if Scheme.count.zero? scheme1 = FactoryBot.create(:scheme, service_name: "Beulahside Care", owning_organisation: mhclg) From 358d7973fe82ec5b27c14b6af2d33eb00f7415e0 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 17:51:35 +0000 Subject: [PATCH 15/32] Fix more tests --- db/seeds.rb | 2 +- spec/components/lettings_log_summary_component_spec.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index fe14cf3e68..fcbb61b31a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -94,7 +94,7 @@ def find_or_create_user(organisation, email, name, role) provider_owner1 = find_or_create_user(standalone_owns_stock, "provider.owner1@example.com", "Provider Owns Stock", :data_provider) coordinator_owner1 = find_or_create_user(standalone_owns_stock, "coordinator.owner1@example.com", "Coordinator Owns Stock", :data_coordinator) - find_or_create_user(standalone_no_stock, "provider.nostock@example.com", "Provider No Stock",:data_provider) + find_or_create_user(standalone_no_stock, "provider.nostock@example.com", "Provider No Stock", :data_provider) find_or_create_user(standalone_no_stock, "coordinator.nostock@example.com", "Coordinator No Stock", :data_coordinator) if Scheme.count.zero? diff --git a/spec/components/lettings_log_summary_component_spec.rb b/spec/components/lettings_log_summary_component_spec.rb index 52b6b19552..b65e175315 100644 --- a/spec/components/lettings_log_summary_component_spec.rb +++ b/spec/components/lettings_log_summary_component_spec.rb @@ -3,9 +3,11 @@ RSpec.describe LettingsLogSummaryComponent, type: :component do let(:support_user) { FactoryBot.create(:user, :support) } let(:coordinator_user) { FactoryBot.create(:user) } + let(:organisation) { create(:organisation, name: "MHCLG") } + let(:log_user) { create(:user, name: "Danny Rojas", organisation:)} let(:propcode) { "P3647" } let(:tenancycode) { "T62863" } - let(:lettings_log) { FactoryBot.create(:lettings_log, needstype: 1, tenancycode:, propcode:, startdate: Time.zone.today) } + let(:lettings_log) { FactoryBot.create(:lettings_log, assigned_to: log_user, needstype: 1, tenancycode:, propcode:, startdate: Time.zone.today) } context "when rendering lettings log for a support user" do it "shows the log summary with organisational relationships" do From 6f53328cf99147457b863b7b385a28e2c3f0d719 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 25 Nov 2024 18:08:13 +0000 Subject: [PATCH 16/32] Fix lint --- spec/components/lettings_log_summary_component_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/components/lettings_log_summary_component_spec.rb b/spec/components/lettings_log_summary_component_spec.rb index b65e175315..78ce5d8044 100644 --- a/spec/components/lettings_log_summary_component_spec.rb +++ b/spec/components/lettings_log_summary_component_spec.rb @@ -4,7 +4,7 @@ let(:support_user) { FactoryBot.create(:user, :support) } let(:coordinator_user) { FactoryBot.create(:user) } let(:organisation) { create(:organisation, name: "MHCLG") } - let(:log_user) { create(:user, name: "Danny Rojas", organisation:)} + let(:log_user) { create(:user, name: "Danny Rojas", organisation:) } let(:propcode) { "P3647" } let(:tenancycode) { "T62863" } let(:lettings_log) { FactoryBot.create(:lettings_log, assigned_to: log_user, needstype: 1, tenancycode:, propcode:, startdate: Time.zone.today) } From 5a5463083c6fc641c7bd707e090ca6757633330b Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 10:24:11 +0000 Subject: [PATCH 17/32] More fixes --- .../check_answers_summary_list_card_component_spec.rb | 2 +- spec/factories/sales_log.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 aa9ad1be59..c08fb3f427 100644 --- a/spec/components/check_answers_summary_list_card_component_spec.rb +++ b/spec/components/check_answers_summary_list_card_component_spec.rb @@ -6,7 +6,7 @@ let(:rendered) { render_inline(component) } let(:user) { create(:user) } - let(:log) { create(:lettings_log, :completed, age2: 99, retirement_value_check: 1) } + let(:log) { create(:lettings_log, :completed, sex1: "F", age2: 99, retirement_value_check: 1) } let(:subsection_id) { "household_characteristics" } let(:subsection) { log.form.get_subsection(subsection_id) } let(:questions) { subsection.applicable_questions(log) } diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 1a97862acc..8ff16f271f 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -5,7 +5,7 @@ created_by { assigned_to } owning_organisation { assigned_to.organisation } - managing_organisation { owning_organisation } + managing_organisation { assigned_to.organisation } created_at { Time.zone.now } updated_at { Time.zone.now } trait :in_progress do From e04fe8cc12b6c13156878e821057286882828f93 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 10:28:50 +0000 Subject: [PATCH 18/32] More randomness in organisation generation --- db/seeds.rb | 6 +----- spec/factories/organisation.rb | 10 +++++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index fcbb61b31a..e08c90e049 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,10 +1,5 @@ # This file should contain all the record creation needed to seed the database with its default values. # The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup). -# -# Examples: -# -# movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) -# Character.create(name: 'Luke', movie: movies.first) def find_or_create_user(organisation, email, name, role) case role @@ -53,6 +48,7 @@ def find_or_create_user(organisation, email, name, role) other_stock_owners: "None", managing_agents_label: "None", provider_type: "LA", + housing_registration_number: nil, rent_periods: all_rent_periods, ) diff --git a/spec/factories/organisation.rb b/spec/factories/organisation.rb index 376b9c126f..ecab5bf814 100644 --- a/spec/factories/organisation.rb +++ b/spec/factories/organisation.rb @@ -1,11 +1,11 @@ FactoryBot.define do factory :organisation do - name { "MHCLG" } - address_line1 { "2 Marsham Street" } - address_line2 { "London" } + name { Faker::Company.name } + address_line1 { Faker::Address.street_address } + address_line2 { Faker::Address.city } provider_type { "LA" } - housing_registration_no { "1234" } - postcode { "SW1P 4DF" } + housing_registration_no { rand(99_999).to_s } + postcode { Faker::Address.postcode } created_at { Time.zone.now } updated_at { Time.zone.now } holds_own_stock { true } From 671a88e177c617ee0287910b03a4e36350d3402d Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 11:13:29 +0000 Subject: [PATCH 19/32] Add some extra organisations --- db/seeds.rb | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index e08c90e049..881b38159a 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -35,6 +35,8 @@ def find_or_create_user(organisation, email, name, role) end end + first_run = Organisation.count.zero? + all_rent_periods = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] mhclg = FactoryBot.create( @@ -48,7 +50,7 @@ def find_or_create_user(organisation, email, name, role) other_stock_owners: "None", managing_agents_label: "None", provider_type: "LA", - housing_registration_number: nil, + housing_registration_no: nil, rent_periods: all_rent_periods, ) @@ -60,6 +62,8 @@ def find_or_create_user(organisation, email, name, role) standalone_owns_stock = FactoryBot.create(:organisation, :if_unique, :la, :holds_own_stock, name: "Standalone Owns Stock 1 Ltd", rent_periods: all_rent_periods) standalone_no_stock = FactoryBot.create(:organisation, :if_unique, :la, :does_not_own_stock, name: "Standalone No Stock 1 Ltd", rent_periods: all_rent_periods) + other_orgs = FactoryBot.create_list(:organisation, 5, :prp, rent_periods: all_rent_periods.sample(3)) if first_run + OrganisationRelationship.find_or_create_by!( parent_organisation: stock_owner1, child_organisation: mhclg, @@ -94,20 +98,22 @@ def find_or_create_user(organisation, email, name, role) find_or_create_user(standalone_no_stock, "coordinator.nostock@example.com", "Coordinator No Stock", :data_coordinator) if Scheme.count.zero? - scheme1 = FactoryBot.create(:scheme, service_name: "Beulahside Care", owning_organisation: mhclg) - scheme2 = FactoryBot.create(:scheme, service_name: "Abdullahview Point", owning_organisation: mhclg) - scheme3 = FactoryBot.create(:scheme, :created_now, owning_organisation: mhclg) - scheme4 = FactoryBot.create(:scheme, owning_organisation: stock_owner1) + beulahside = FactoryBot.create(:scheme, service_name: "Beulahside Care", owning_organisation: mhclg) + abdullah = FactoryBot.create(:scheme, service_name: "Abdullahview Point", owning_organisation: mhclg) + mhclg_scheme = FactoryBot.create(:scheme, :created_now, owning_organisation: mhclg) + stock_owner_scheme = FactoryBot.create(:scheme, owning_organisation: stock_owner1) + + other_schemes = other_orgs ? other_orgs.sample(3).map { |org| FactoryBot.create(:scheme, owning_organisation: org) } : [] - [scheme1, scheme2, scheme3, scheme4].each do |scheme| + [beulahside, abdullah, mhclg_scheme, stock_owner_scheme, *other_schemes].each do |scheme| FactoryBot.create(:location, scheme:) end - [scheme2, scheme3].each do |scheme| + [abdullah, mhclg_scheme, *other_schemes].each do |scheme| FactoryBot.create_list(:location, 3, scheme:) end end - users_with_logs = [provider, coordinator, support, stock_owner1_user, stock_owner2_user, managing_agent1_user, managing_agent2_user, provider_owner1, coordinator_owner1] + users_with_logs = [provider, coordinator, support, stock_owner1_user, stock_owner2_user, managing_agent1_user, managing_agent2_user, provider_owner1, coordinator_owner1, *other_orgs.map { |o| o.users.first }] if SalesLog.count.zero? users_with_logs.each do |user| From 9cbbe002c9c5f43a38b119953c08863abf4ee229 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 11:20:40 +0000 Subject: [PATCH 20/32] Create future logs if future form use is enabled --- db/seeds.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/db/seeds.rb b/db/seeds.rb index 881b38159a..7ff2880ed0 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -122,6 +122,13 @@ def find_or_create_user(organisation, email, name, role) FactoryBot.create(:sales_log, :outright_sale_setup_complete, assigned_to: user) FactoryBot.create(:sales_log, :completed, assigned_to: user) FactoryBot.create_list(:sales_log, 2, :completed, :ignore_validation_errors, saledate: Time.zone.today - 1.year, assigned_to: user) + + next unless FeatureToggle.allow_future_form_use? + + FactoryBot.create(:sales_log, :shared_ownership_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) + FactoryBot.create(:sales_log, :discounted_ownership_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) + FactoryBot.create(:sales_log, :outright_sale_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) + FactoryBot.create(:sales_log, :completed, saledate: TIme.zone.today + 1.year, assigned_to: user) end FactoryBot.create(:sales_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) @@ -137,6 +144,15 @@ def find_or_create_user(organisation, email, name, role) FactoryBot.create(:lettings_log, :setup_completed, :sh, scheme:, location: scheme.locations.first, assigned_to: user) end FactoryBot.create_list(:lettings_log, 2, :completed, :ignore_validation_errors, startdate: Time.zone.today - 1.year, assigned_to: user) + + next unless FeatureToggle.allow_future_form_use? + + FactoryBot.create(:lettings_log, :setup_completed, startdate: Time.zone.today + 1.year, assigned_to: user) + FactoryBot.create(:lettings_log, :completed, startdate: Time.zone.today + 1.year, assigned_to: user) + if user.organisation.owned_schemes.any? + scheme = user.organisation.owned_schemes.first + FactoryBot.create(:lettings_log, :setup_completed, :sh, scheme:, location: scheme.locations.first, startdate: Time.zone.today + 1.year, assigned_to: user) + end end FactoryBot.create(:lettings_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) From 99328d545be2989fbc559646a8eac77db2053964 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 11:23:54 +0000 Subject: [PATCH 21/32] Update tests that expect fixed default org name --- spec/features/lettings_log_spec.rb | 4 ++-- spec/models/organisation_spec.rb | 2 +- spec/requests/merge_requests_controller_spec.rb | 12 ++++++------ spec/requests/organisations_controller_spec.rb | 5 +++++ spec/services/csv/lettings_log_csv_service_spec.rb | 4 ++-- spec/services/csv/sales_log_csv_service_spec.rb | 3 ++- spec/services/csv/scheme_csv_service_spec.rb | 2 +- .../exports/lettings_log_export_service_spec.rb | 5 +++-- .../exports/organisation_export_service_spec.rb | 2 +- spec/services/exports/user_export_service_spec.rb | 2 +- 10 files changed, 24 insertions(+), 17 deletions(-) diff --git a/spec/features/lettings_log_spec.rb b/spec/features/lettings_log_spec.rb index 092ab2b40f..efb7e76651 100644 --- a/spec/features/lettings_log_spec.rb +++ b/spec/features/lettings_log_spec.rb @@ -276,7 +276,7 @@ expect(breadcrumbs.length).to eq 3 expect(breadcrumbs[0].text).to eq "Home" expect(breadcrumbs[0][:href]).to eq root_path - expect(breadcrumbs[1].text).to eq "Lettings logs (MHCLG)" + expect(breadcrumbs[1].text).to eq "Lettings logs (#{lettings_log.owning_organisation.name})" expect(breadcrumbs[1][:href]).to eq lettings_logs_organisation_path(lettings_log.owning_organisation) expect(breadcrumbs[2].text).to eq "Log #{lettings_log.id}" expect(breadcrumbs[2][:href]).to eq lettings_log_path(lettings_log) @@ -292,7 +292,7 @@ expect(breadcrumbs.length).to eq 3 expect(breadcrumbs[0].text).to eq "Home" expect(breadcrumbs[0][:href]).to eq root_path - expect(breadcrumbs[1].text).to eq "Lettings logs (MHCLG)" + expect(breadcrumbs[1].text).to eq "Lettings logs (#{lettings_log.owning_organisation.name})" expect(breadcrumbs[1][:href]).to eq lettings_logs_organisation_path(lettings_log.owning_organisation) expect(breadcrumbs[2].text).to eq "Log #{lettings_log.id}" expect(breadcrumbs[2][:href]).to eq lettings_log_path(lettings_log) diff --git a/spec/models/organisation_spec.rb b/spec/models/organisation_spec.rb index fe919a336d..9b01845ae8 100644 --- a/spec/models/organisation_spec.rb +++ b/spec/models/organisation_spec.rb @@ -207,7 +207,7 @@ end describe "paper trail" do - let(:organisation) { create(:organisation) } + let(:organisation) { create(:organisation, name: "MHCLG") } it "creates a record of changes to a log" do expect { organisation.update!(name: "new test name") }.to change(organisation.versions, :count).by(1) diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index dc1dd817d2..2a24613832 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -49,7 +49,7 @@ end it "shows the correct content" do - expect(page).to have_content("Which organisations are merging into MHCLG?") + expect(page).to have_content("Which organisations are merging into #{organisation.name}?") end end end @@ -64,7 +64,7 @@ it "adds merging organisation to the page" do merge_request.reload - expect(page).to have_content("MHCLG") + expect(page).to have_content(organisation.name) expect(page).to have_content("Other Test Org") expect(page).to have_link("Remove") end @@ -623,7 +623,7 @@ it "shows user outcomes after merge" do expect(page).to have_link("View all 4 Organisation with some users users (opens in a new tab)", href: users_organisation_path(organisation_with_some_users)) expect(page).to have_link("View all 12 Organisation with many users users (opens in a new tab)", href: users_organisation_path(organisation_with_some_more_users)) - expect(page).to have_link("View all 3 MHCLG users (opens in a new tab)", href: users_organisation_path(organisation)) + expect(page).to have_link("View all 3 #{organisation.name} users (opens in a new tab)", href: users_organisation_path(organisation)) expect(page).to have_content("Organisation with no users and Organisation with no users too have no users.") expect(page).to have_content("19 users after merge") end @@ -650,7 +650,7 @@ it "shows scheme outcomes after merge" do expect(page).to have_link("View all 4 Organisation with some schemes schemes (opens in a new tab)", href: schemes_organisation_path(organisation_with_some_schemes)) expect(page).to have_link("View all 6 Organisation with many schemes schemes (opens in a new tab)", href: schemes_organisation_path(organisation_with_some_more_schemes)) - expect(page).to have_link("View all 3 MHCLG schemes (opens in a new tab)", href: schemes_organisation_path(organisation)) + expect(page).to have_link("View all 3 #{organisation.name} schemes (opens in a new tab)", href: schemes_organisation_path(organisation)) expect(page).to have_content("Organisation with no schemes and Organisation with no schemes too have no schemes.") expect(page).to have_content("13 schemes after merge") end @@ -676,8 +676,8 @@ it "shows logs outcomes after merge" do expect(page).to have_link("View all 4 Organisation with some logs lettings logs (opens in a new tab)", href: lettings_logs_organisation_path(organisation_with_some_logs)) expect(page).to have_link("View all 2 Organisation with some logs sales logs (opens in a new tab)", href: sales_logs_organisation_path(organisation_with_some_logs)) - expect(page).to have_link("View all 2 MHCLG lettings logs (opens in a new tab)", href: lettings_logs_organisation_path(organisation)) - expect(page).to have_link("View all 3 MHCLG sales logs (opens in a new tab)", href: sales_logs_organisation_path(organisation)) + expect(page).to have_link("View all 2 #{organisation.name} lettings logs (opens in a new tab)", href: lettings_logs_organisation_path(organisation)) + expect(page).to have_link("View all 3 #{organisation.name} sales logs (opens in a new tab)", href: sales_logs_organisation_path(organisation)) expect(page).to have_content("Organisation with no logs and Organisation with no logs too have no lettings logs.") expect(page).to have_content("Organisation with no logs and Organisation with no logs too have no sales logs.") expect(page).to have_content("6 lettings logs after merge") diff --git a/spec/requests/organisations_controller_spec.rb b/spec/requests/organisations_controller_spec.rb index 5a300c56c8..a91fb6d4eb 100644 --- a/spec/requests/organisations_controller_spec.rb +++ b/spec/requests/organisations_controller_spec.rb @@ -1643,6 +1643,11 @@ context "when search results require pagination" do let(:search_param) { "MHCLG" } + before do + create_list(:organisation, 27, name: "MHCLG") + get "/organisations?search=#{search_param}" + end + it "has search and pagination in the title" do expect(page).to have_title("Organisations (27 organisations matching ‘#{search_param}’) (page 1 of 2) - Submit social housing lettings and sales data (CORE) - GOV.UK") end diff --git a/spec/services/csv/lettings_log_csv_service_spec.rb b/spec/services/csv/lettings_log_csv_service_spec.rb index 3134fa4514..7a0e15a126 100644 --- a/spec/services/csv/lettings_log_csv_service_spec.rb +++ b/spec/services/csv/lettings_log_csv_service_spec.rb @@ -196,7 +196,7 @@ describe "the full CSV output" do context "when the requested log year is 2024" do let(:year) { 2024 } - let(:organisation) { create(:organisation, provider_type: "LA") } + let(:organisation) { create(:organisation, provider_type: "LA", name: "MHCLG") } let(:log) do create( :lettings_log, @@ -389,7 +389,7 @@ context "when the requested log year is 2023" do let(:year) { 2023 } - let(:organisation) { create(:organisation, provider_type: "LA") } + let(:organisation) { create(:organisation, provider_type: "LA", name: "MHCLG") } let(:log) do create( :lettings_log, diff --git a/spec/services/csv/sales_log_csv_service_spec.rb b/spec/services/csv/sales_log_csv_service_spec.rb index d6ba36c6c2..3cf56af2ec 100644 --- a/spec/services/csv/sales_log_csv_service_spec.rb +++ b/spec/services/csv/sales_log_csv_service_spec.rb @@ -4,7 +4,7 @@ subject(:task) { Rake::Task["data_import:add_variable_definitions"] } let(:form_handler_mock) { instance_double(FormHandler) } - let(:organisation) { create(:organisation) } + let(:organisation) { create(:organisation, name: "MHCLG") } let(:fixed_time) { now } let(:now) { Time.zone.now } let(:user) { create(:user, :support, email: "billyboy@eyeKLAUD.com") } @@ -17,6 +17,7 @@ created_at: fixed_time, updated_at: now, owning_organisation: organisation, + managing_organisation: organisation, purchid: nil, hholdcount: 3, age1: 30, diff --git a/spec/services/csv/scheme_csv_service_spec.rb b/spec/services/csv/scheme_csv_service_spec.rb index 57f009c657..77c0bae453 100644 --- a/spec/services/csv/scheme_csv_service_spec.rb +++ b/spec/services/csv/scheme_csv_service_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" RSpec.describe Csv::SchemeCsvService do - let(:organisation) { create(:organisation) } + let(:organisation) { create(:organisation, name: "MHCLG") } let(:fixed_time) { Time.zone.local(2023, 6, 26) } let(:scheme) { create(:scheme, :export, owning_organisation: organisation, service_name: "Test name") } let(:location) { create(:location, :export, scheme:) } diff --git a/spec/services/exports/lettings_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb index abece2e125..6a07af8ddf 100644 --- a/spec/services/exports/lettings_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -15,7 +15,8 @@ let(:expected_data_filename) { "core_2021_2022_apr_mar_f0001_inc0001_pt001.xml" } let(:expected_manifest_filename) { "manifest.xml" } let(:start_time) { Time.zone.local(2022, 5, 1) } - let(:user) { FactoryBot.create(:user, email: "test1@example.com") } + let(:organisation) { create(:organisation, name: "MHCLG", housing_registration_no: 1234) } + let(:user) { FactoryBot.create(:user, email: "test1@example.com", organisation:) } def replace_entity_ids(lettings_log, export_template) export_template.sub!(/\{id\}/, (lettings_log["id"] + Exports::LettingsLogExportService::LOG_ID_OFFSET).to_s) @@ -450,7 +451,7 @@ def replace_duplicate_set_id(export_file) context "when exporting a supported housing lettings logs in XML" do let(:export_file) { File.open("spec/fixtures/exports/supported_housing_logs.xml", "r:UTF-8") } - let(:organisation) { FactoryBot.create(:organisation, provider_type: "LA") } + let(:organisation) { FactoryBot.create(:organisation, name: "MHCLG", provider_type: "LA", housing_registration_no: 1234) } let(:user) { FactoryBot.create(:user, organisation:, email: "fake@email.com") } let(:other_user) { FactoryBot.create(:user, organisation:, email: "other@email.com") } let(:scheme) { FactoryBot.create(:scheme, :export, owning_organisation: organisation) } diff --git a/spec/services/exports/organisation_export_service_spec.rb b/spec/services/exports/organisation_export_service_spec.rb index 4de0e84a81..43ca190955 100644 --- a/spec/services/exports/organisation_export_service_spec.rb +++ b/spec/services/exports/organisation_export_service_spec.rb @@ -42,7 +42,7 @@ def replace_record_number(export_template, record_number) end context "and one organisation is available for export" do - let!(:organisation) { create(:organisation) } + let!(:organisation) { create(:organisation, name: "MHCLG", address_line1: "2 Marsham Street", address_line2: "London", postcode: "SW1P 4DF", housing_registration_no: "1234") } it "generates a ZIP export file with the expected filename" do expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) diff --git a/spec/services/exports/user_export_service_spec.rb b/spec/services/exports/user_export_service_spec.rb index 51dfd724b2..8a0e22267c 100644 --- a/spec/services/exports/user_export_service_spec.rb +++ b/spec/services/exports/user_export_service_spec.rb @@ -12,7 +12,7 @@ let(:expected_data_filename) { "users_2024_2025_apr_mar_f0001_inc0001_pt001.xml" } let(:expected_manifest_filename) { "manifest.xml" } let(:start_time) { Time.zone.local(2022, 5, 1) } - let(:organisation) { create(:organisation, with_dsa: false) } + let(:organisation) { create(:organisation, name: "MHCLG", with_dsa: false) } def replace_entity_ids(user, export_template) export_template.sub!(/\{id\}/, user["id"].to_s) From 3f4683df5605b6f858f7c538c985707ba7d4541a Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 11:34:42 +0000 Subject: [PATCH 22/32] Update more tests --- spec/features/sales_log_spec.rb | 4 ++-- spec/features/schemes_spec.rb | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/spec/features/sales_log_spec.rb b/spec/features/sales_log_spec.rb index ceff00f949..879f2b5c89 100644 --- a/spec/features/sales_log_spec.rb +++ b/spec/features/sales_log_spec.rb @@ -259,7 +259,7 @@ expect(breadcrumbs.length).to eq 3 expect(breadcrumbs[0].text).to eq "Home" expect(breadcrumbs[0][:href]).to eq root_path - expect(breadcrumbs[1].text).to eq "Sales logs (MHCLG)" + expect(breadcrumbs[1].text).to eq "Sales logs (#{sales_log.owning_organisation.name})" expect(breadcrumbs[1][:href]).to eq sales_logs_organisation_path(sales_log.owning_organisation) expect(breadcrumbs[2].text).to eq "Log #{sales_log.id}" expect(breadcrumbs[2][:href]).to eq sales_log_path(sales_log.id) @@ -273,7 +273,7 @@ expect(breadcrumbs.length).to eq 3 expect(breadcrumbs[0].text).to eq "Home" expect(breadcrumbs[0][:href]).to eq root_path - expect(breadcrumbs[1].text).to eq "Sales logs (MHCLG)" + expect(breadcrumbs[1].text).to eq "Sales logs (#{sales_log.owning_organisation.name})" expect(breadcrumbs[1][:href]).to eq sales_logs_organisation_path(sales_log.owning_organisation) expect(breadcrumbs[2].text).to eq "Log #{sales_log.id}" expect(breadcrumbs[2][:href]).to eq sales_log_path(sales_log.id) diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index 33ab00b340..19664ca29f 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -5,9 +5,10 @@ include SchemesHelpers context "when viewing list of schemes" do context "when I am signed as a coordinator user and there are schemes in the database" do - let!(:user) { FactoryBot.create(:user, :data_coordinator, last_sign_in_at: Time.zone.now) } - let!(:schemes) { FactoryBot.create_list(:scheme, 5, owning_organisation: user.organisation) } - let!(:scheme_to_search) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } + let(:organisation) { FactoryBot.create(:organisation, name: "MHCLG") } + let!(:user) { FactoryBot.create(:user, :data_coordinator, organisation:, last_sign_in_at: Time.zone.now) } + let!(:schemes) { FactoryBot.create_list(:scheme, 5, owning_organisation: organisation) } + let!(:scheme_to_search) { FactoryBot.create(:scheme, owning_organisation: organisation) } before do Timecop.freeze(Time.zone.local(2024, 3, 1)) @@ -225,7 +226,7 @@ end it "shows list of links to the organisation's schemes" do - click_on("Schemes (MHCLG)") + click_on("Schemes (#{user.organisation.name})") same_organisation_schemes.each do |scheme| expect(page).to have_link(scheme.service_name) expect(page).to have_content(scheme.id_to_display) From 9b73102ac9da0cf7597ffa7636c93932711a1cfd Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 11:49:51 +0000 Subject: [PATCH 23/32] Fix typo --- db/seeds.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/seeds.rb b/db/seeds.rb index 7ff2880ed0..e0fe4e840c 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -128,7 +128,7 @@ def find_or_create_user(organisation, email, name, role) FactoryBot.create(:sales_log, :shared_ownership_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) FactoryBot.create(:sales_log, :discounted_ownership_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) FactoryBot.create(:sales_log, :outright_sale_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) - FactoryBot.create(:sales_log, :completed, saledate: TIme.zone.today + 1.year, assigned_to: user) + FactoryBot.create(:sales_log, :completed, saledate: Time.zone.today + 1.year, assigned_to: user) end FactoryBot.create(:sales_log, :completed, assigned_to: managing_agent1_user, owning_organisation: mhclg) From 3aa85ecffcec0359f8b027b3ad5e1a48be15b823 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 12:17:11 +0000 Subject: [PATCH 24/32] Another tweak --- db/seeds.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index e0fe4e840c..03a0c6ba95 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -103,7 +103,7 @@ def find_or_create_user(organisation, email, name, role) mhclg_scheme = FactoryBot.create(:scheme, :created_now, owning_organisation: mhclg) stock_owner_scheme = FactoryBot.create(:scheme, owning_organisation: stock_owner1) - other_schemes = other_orgs ? other_orgs.sample(3).map { |org| FactoryBot.create(:scheme, owning_organisation: org) } : [] + other_schemes = first_run ? other_orgs.sample(3).map { |org| FactoryBot.create(:scheme, owning_organisation: org) } : [] [beulahside, abdullah, mhclg_scheme, stock_owner_scheme, *other_schemes].each do |scheme| FactoryBot.create(:location, scheme:) @@ -113,7 +113,8 @@ def find_or_create_user(organisation, email, name, role) end end - users_with_logs = [provider, coordinator, support, stock_owner1_user, stock_owner2_user, managing_agent1_user, managing_agent2_user, provider_owner1, coordinator_owner1, *other_orgs.map { |o| o.users.first }] + other_org_users = first_run ? other_orgs.map { |org| org.users.first } : [] + users_with_logs = [provider, coordinator, support, stock_owner1_user, stock_owner2_user, managing_agent1_user, managing_agent2_user, provider_owner1, coordinator_owner1, *other_org_users] if SalesLog.count.zero? users_with_logs.each do |user| From 66583810dceeeae0b02cb23e987c938972ccf248 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 16:03:43 +0000 Subject: [PATCH 25/32] More test fixes --- spec/helpers/organisations_helper_spec.rb | 2 +- spec/helpers/tab_nav_helper_spec.rb | 2 +- spec/requests/organisations_controller_spec.rb | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/helpers/organisations_helper_spec.rb b/spec/helpers/organisations_helper_spec.rb index 9ebe12d1f7..ea0d9b1585 100644 --- a/spec/helpers/organisations_helper_spec.rb +++ b/spec/helpers/organisations_helper_spec.rb @@ -3,7 +3,7 @@ RSpec.describe OrganisationsHelper do include TagHelper describe "display_organisation_attributes" do - let(:organisation) { create(:organisation) } + let(:organisation) { create(:organisation, :la, :holds_own_stock, address_line1: "2 Marsham Street", address_line2: "London", postcode: "SW1P 4DF", housing_registration_no: 1234, organisation_rent_periods: []) } it "has the correct values" do expect(display_organisation_attributes(organisation)).to eq( diff --git a/spec/helpers/tab_nav_helper_spec.rb b/spec/helpers/tab_nav_helper_spec.rb index 4a2d133779..89f867775c 100644 --- a/spec/helpers/tab_nav_helper_spec.rb +++ b/spec/helpers/tab_nav_helper_spec.rb @@ -15,7 +15,7 @@ describe "#org_cell" do it "returns the users org name and role separated by a newline character" do - expected_html = "MHCLG\nData provider" + expected_html = "#{organisation.name}\nData provider" expect(org_cell(current_user)).to match(expected_html) end end diff --git a/spec/requests/organisations_controller_spec.rb b/spec/requests/organisations_controller_spec.rb index a91fb6d4eb..c99ad3cfb1 100644 --- a/spec/requests/organisations_controller_spec.rb +++ b/spec/requests/organisations_controller_spec.rb @@ -1431,7 +1431,7 @@ end context "when a search parameter is passed" do - let!(:matching_user) { create(:user, organisation:, name: "joe", email: "matching@example.com") } + let!(:matching_user) { create(:user, organisation:, name: "abcdefghijklmnopqrstuvwxyz", email: "matching@example.com") } let(:org_user_count) { User.where(organisation:).count } before do @@ -1439,7 +1439,7 @@ end context "when our search string matches case" do - let(:search_param) { "joe" } + let(:search_param) { "abcdefghijklmnopqrstuvwxyz" } it "returns only matching results" do expect(page).to have_content(matching_user.name) @@ -1459,7 +1459,7 @@ end context "when we need case insensitive search" do - let(:search_param) { "Joe" } + let(:search_param) { "Abcdefghijklmnopqrstuvwxyz" } it "returns only matching results" do expect(page).to have_content(matching_user.name) From b02c51e0985c82d69d2c1ceb15cf99765b20b3df Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 16:20:33 +0000 Subject: [PATCH 26/32] More test fixes --- spec/components/sales_log_summary_component_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/components/sales_log_summary_component_spec.rb b/spec/components/sales_log_summary_component_spec.rb index ce9b3a45cf..ec5c3cd80e 100644 --- a/spec/components/sales_log_summary_component_spec.rb +++ b/spec/components/sales_log_summary_component_spec.rb @@ -16,7 +16,7 @@ it "shows the log summary with organisational relationships" do result = render_inline(described_class.new(current_user: support_user, log: sales_log)) - expect(result).to have_content("Owned by\n MHCLG") + expect(result).to have_content("Owned by\n #{sales_log.owning_organisation.name}") expect(result).not_to have_content("Managed by") end end From f3151188cf4a6b5c472aba7de2c8eac16d4e46e1 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 16:35:23 +0000 Subject: [PATCH 27/32] Another fix --- spec/services/merge/merge_organisations_service_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index 2a155ad5d1..fbb52c2a5f 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -623,7 +623,7 @@ context "and merging sales logs" do let(:owning_organisation) { create(:organisation, holds_own_stock: true) } - let!(:sales_log) { create(:sales_log, saledate: Time.zone.today, owning_organisation: merging_organisation, purchid: "owned") } + let!(:sales_log) { create(:sales_log, saledate: Time.zone.today, owning_organisation: merging_organisation, managing_organisation: merging_organisation, purchid: "owned") } let!(:managed_sales_log) { create(:sales_log, saledate: Time.zone.today, purchid: "managed") } before do From 5da3fccb42aa1b0e731432d22f9a7d067bef9a60 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 17:21:44 +0000 Subject: [PATCH 28/32] Update more tests --- spec/requests/users_controller_spec.rb | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 868b1d1f26..86a27039cd 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -2188,9 +2188,9 @@ context "when different organisations manage the logs" do before do - create(:lettings_log, managing_organisation: other_user.organisation, assigned_to: other_user) - create(:lettings_log, managing_organisation: new_organisation_2, assigned_to: other_user) - create(:sales_log, managing_organisation: new_organisation_3, assigned_to: other_user) + create(:lettings_log, owning_organisation: other_user.organisation, managing_organisation: other_user.organisation, assigned_to: other_user) + create(:lettings_log, owning_organisation: other_user.organisation, managing_organisation: new_organisation_2, assigned_to: other_user) + create(:sales_log, owning_organisation: other_user.organisation, managing_organisation: new_organisation_3, assigned_to: other_user) patch "/users/#{other_user.id}/log-reassignment", headers:, params: end @@ -2206,8 +2206,8 @@ context "when users organisation manages the logs" do before do - create(:lettings_log, owning_organisation: other_user.organisation, assigned_to: other_user) - create(:sales_log, owning_organisation: other_user.organisation, assigned_to: other_user) + create(:lettings_log, owning_organisation: other_user.organisation, managing_organisation: other_user.organisation, assigned_to: other_user) + create(:sales_log, owning_organisation: other_user.organisation, managing_organisation: other_user.organisation, assigned_to: other_user) patch "/users/#{other_user.id}/log-reassignment", headers:, params: end @@ -2219,15 +2219,15 @@ context "when different organisations manage the logs" do before do - create(:lettings_log, owning_organisation: other_user.organisation, assigned_to: other_user) - create(:lettings_log, owning_organisation: new_organisation_2, assigned_to: other_user) + create(:lettings_log, owning_organisation: other_user.organisation, managing_organisation: other_user.organisation, assigned_to: other_user) + create(:lettings_log, owning_organisation: new_organisation_2, managing_organisation: other_user.organisation, assigned_to: other_user) create(:sales_log, owning_organisation: new_organisation_3, managing_organisation: other_user.organisation, assigned_to: other_user) patch "/users/#{other_user.id}/log-reassignment", headers:, params: end it "required the new org to have managing agent relationship with owning organisations" do expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content("New org must be a managing agent of #{other_user.organisation_name}, #{new_organisation_2.name}, and #{new_organisation_3.name} to make this change.") + expect(page).to have_content("New org must be a managing agent of #{other_user.organisation.name}, #{new_organisation_2.name}, and #{new_organisation_3.name} to make this change.") end end end From 220a002a586b4735cd377e1d7fec83b58f5f1e33 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Tue, 26 Nov 2024 17:48:43 +0000 Subject: [PATCH 29/32] More fixes --- spec/requests/users_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 86a27039cd..7063a5efcd 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -1999,7 +1999,7 @@ end context "when the user is not part of the same organisation as the current user" do - let(:other_user) { create(:user) } + let(:other_user) { create(:user, organisation: create(:organisation, name: "Another org")) } let(:params) { { id: other_user.id, user: { name: new_name } } } it "updates the user" do From 96e5991bf5d3226d191e1b72d92cbada541f90a9 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Wed, 27 Nov 2024 10:05:45 +0000 Subject: [PATCH 30/32] Only create outright sale logs for relevant years --- db/seeds.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index 03a0c6ba95..50da1b4e76 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -120,7 +120,7 @@ def find_or_create_user(organisation, email, name, role) users_with_logs.each do |user| FactoryBot.create(:sales_log, :shared_ownership_setup_complete, assigned_to: user) FactoryBot.create(:sales_log, :discounted_ownership_setup_complete, assigned_to: user) - FactoryBot.create(:sales_log, :outright_sale_setup_complete, assigned_to: user) + FactoryBot.create(:sales_log, :outright_sale_setup_complete, assigned_to: user) if Time.zone.today < Time.zone.local(2025, 4, 1) FactoryBot.create(:sales_log, :completed, assigned_to: user) FactoryBot.create_list(:sales_log, 2, :completed, :ignore_validation_errors, saledate: Time.zone.today - 1.year, assigned_to: user) @@ -128,7 +128,6 @@ def find_or_create_user(organisation, email, name, role) FactoryBot.create(:sales_log, :shared_ownership_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) FactoryBot.create(:sales_log, :discounted_ownership_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) - FactoryBot.create(:sales_log, :outright_sale_setup_complete, saledate: Time.zone.today + 1.year, assigned_to: user) FactoryBot.create(:sales_log, :completed, saledate: Time.zone.today + 1.year, assigned_to: user) end From e246de572c7ccb8cf0b3f52c850b92c70031259e Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Wed, 27 Nov 2024 10:34:24 +0000 Subject: [PATCH 31/32] Reduce max random age to avoid soft validations --- spec/factories/lettings_log.rb | 4 ++-- spec/factories/sales_log.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 22682c70c6..c8c51ecf37 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -56,7 +56,7 @@ status { 2 } tenancycode { Faker::Name.initials(number: 10) } age1_known { 0 } - age1 { Faker::Number.within(range: 25..55) } + age1 { Faker::Number.within(range: 25..45) } sex1 { %w[F M X R].sample } ethnic_group { 0 } ethnic { 2 } @@ -67,7 +67,7 @@ relat2 { "P" } age2_known { 0 } details_known_2 { 0 } - age2 { Faker::Number.within(range: 25..55) } + age2 { Faker::Number.within(range: 25..45) } sex2 { %w[F M X R].sample } ecstat2 { 6 } homeless { 1 } diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 8ff16f271f..bcc2b86acd 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -78,14 +78,14 @@ noint { 2 } privacynotice { 1 } age1_known { 0 } - age1 { Faker::Number.within(range: 27..55) } + age1 { Faker::Number.within(range: 27..45) } sex1 { %w[F M X R].sample } national { 18 } buy1livein { 1 } relat2 { "P" } proptype { 1 } age2_known { 0 } - age2 { Faker::Number.within(range: 25..55) } + age2 { Faker::Number.within(range: 25..45) } builtype { 1 } ethnic { 3 } ethnic_group { 17 } From 872c43562d3a497eec2adb047ea16562a12ff953 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Wed, 27 Nov 2024 10:47:53 +0000 Subject: [PATCH 32/32] Don't allow sales logs to use no longer valid relat value --- spec/factories/sales_log.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index bcc2b86acd..687b042a4f 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -173,6 +173,13 @@ log.uprn = "10033558653" log.uprn_selection = 1 end + if log.saledate >= Time.zone.local(2025, 4, 1) + log.relat2 = "X" if log.relat2 == "C" + log.relat3 = "X" if log.relat3 == "C" + log.relat4 = "X" if log.relat4 == "C" + log.relat5 = "X" if log.relat5 == "C" + log.relat6 = "X" if log.relat6 == "C" + end end end trait :with_uprn do