From dedbba9a8c2e323e3697fd99601272a4cb57f8f2 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Fri, 22 Nov 2024 18:32:17 +0000 Subject: [PATCH] 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 b58f7e0a8..d138feb5e 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 @@ if LocalAuthority.count.zero? 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 6623ff355..376b9c126 100644 --- a/spec/factories/organisation.rb +++ b/spec/factories/organisation.rb @@ -41,7 +41,13 @@ FactoryBot.define do 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 @@ FactoryBot.define do 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 b809b9daf..f5e942c34 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -32,6 +32,17 @@ FactoryBot.define do 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 77d74b70a..34f98a8a6 100644 --- a/spec/factories/scheme.rb +++ b/spec/factories/scheme.rb @@ -41,5 +41,8 @@ FactoryBot.define do 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 956d88332..8708e319b 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 @@ FactoryBot.define do ) end end + + trait :if_unique do + initialize_with { User.find_or_create_by(email:) } + end end end