Browse Source

Soft delete logs

pull/1620/head
Jack S 3 years ago
parent
commit
a9b67095bb
  1. 4
      app/controllers/application_controller.rb
  2. 8
      app/controllers/lettings_logs_controller.rb
  3. 8
      app/controllers/sales_logs_controller.rb
  4. 8
      app/models/log.rb
  5. 2
      app/services/csv/lettings_log_csv_service.rb
  6. 4
      app/services/exports/lettings_log_export_service.rb
  7. 6
      db/migrate/20230515114101_add_discarded_at_to_logs.rb
  8. 6
      db/schema.rb
  9. 4
      spec/factories/lettings_log.rb
  10. 4
      spec/factories/sales_log.rb
  11. 4
      spec/fixtures/files/lettings_logs_download.csv
  12. 4
      spec/fixtures/files/lettings_logs_download_codes_only.csv
  13. 24
      spec/models/lettings_log_spec.rb
  14. 26
      spec/models/sales_log_spec.rb
  15. 17
      spec/requests/lettings_logs_controller_spec.rb
  16. 17
      spec/requests/sales_logs_controller_spec.rb
  17. 783
      spec/services/csv/lettings_log_csv_service_spec.rb
  18. 49
      spec/shared/shared_log_examples.rb

4
app/controllers/application_controller.rb

@ -13,10 +13,6 @@ class ApplicationController < ActionController::Base
render "errors/not_found", status: :unauthorized render "errors/not_found", status: :unauthorized
end end
def render_internal_server_error
render "errors/internal_server_error", status: :internal_server_error
end
def render_not_found_json(class_name, id) def render_not_found_json(class_name, id)
render json: { error: "#{class_name} #{id} not found" }, status: :not_found render json: { error: "#{class_name} #{id} not found" }, status: :not_found
end end

8
app/controllers/lettings_logs_controller.rb

@ -72,11 +72,9 @@ class LettingsLogsController < LogsController
authorize @log, policy_class: LogPolicy authorize @log, policy_class: LogPolicy
if @log.delete @log.discard!
redirect_to lettings_logs_path, notice: "Log #{@log.id} has been deleted"
else redirect_to lettings_logs_path, notice: "Log #{@log.id} has been deleted"
render_internal_server_error
end
end end
def delete_confirmation def delete_confirmation

8
app/controllers/sales_logs_controller.rb

@ -47,11 +47,9 @@ class SalesLogsController < LogsController
authorize @log, policy_class: LogPolicy authorize @log, policy_class: LogPolicy
if @log.delete @log.discard!
redirect_to sales_logs_path, notice: "Log #{@log.id} has been deleted"
else redirect_to sales_logs_path, notice: "Log #{@log.id} has been deleted"
render_internal_server_error
end
end end
def delete_confirmation def delete_confirmation

8
app/models/log.rb

@ -15,11 +15,13 @@ class Log < ApplicationRecord
"in_progress" => 1, "in_progress" => 1,
"completed" => 2, "completed" => 2,
"pending" => 3, "pending" => 3,
"deleted" => 4,
}.freeze }.freeze
enum status: STATUS enum status: STATUS
enum status_cache: STATUS, _prefix: true enum status_cache: STATUS, _prefix: true
scope :visible, -> { where(status: %w[not_started in_progress completed]) } scope :visible, -> { where(status: %w[not_started in_progress completed]) }
scope :exportable, -> { where(status: %w[not_started in_progress completed deleted]) }
scope :filter_by_status, ->(status, _user = nil) { where status: } scope :filter_by_status, ->(status, _user = nil) { where status: }
scope :filter_by_years, lambda { |years, _user = nil| scope :filter_by_years, lambda { |years, _user = nil|
@ -129,7 +131,13 @@ class Log < ApplicationRecord
end end
end end
def discard!
update!(status: "deleted", discarded_at: Time.zone.now)
end
def calculate_status def calculate_status
return "deleted" if discarded_at.present?
if all_fields_completed? && errors.empty? if all_fields_completed? && errors.empty?
"completed" "completed"
elsif all_fields_nil? elsif all_fields_nil?

2
app/services/csv/lettings_log_csv_service.rb

@ -1,6 +1,6 @@
module Csv module Csv
class LettingsLogCsvService class LettingsLogCsvService
CSV_FIELDS_TO_OMIT = %w[hhmemb net_income_value_check first_time_property_let_as_social_housing renttype needstype postcode_known is_la_inferred totchild totelder totadult net_income_known is_carehome previous_la_known is_previous_la_inferred age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 rent_type_detail wrent wscharge wpschrge wsupchrg wtcharge wtshortfall rent_value_check old_form_id old_id retirement_value_check tshortfall_known pregnancy_value_check hhtype new_old vacdays la prevloc unresolved updated_by_id bulk_upload_id uprn_confirmed status_cache].freeze CSV_FIELDS_TO_OMIT = %w[hhmemb net_income_value_check first_time_property_let_as_social_housing renttype needstype postcode_known is_la_inferred totchild totelder totadult net_income_known is_carehome previous_la_known is_previous_la_inferred age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 rent_type_detail wrent wscharge wpschrge wsupchrg wtcharge wtshortfall rent_value_check old_form_id old_id retirement_value_check tshortfall_known pregnancy_value_check hhtype new_old vacdays la prevloc unresolved updated_by_id bulk_upload_id uprn_confirmed status_cache discarded_at].freeze
def initialize(user, export_type:) def initialize(user, export_type:)
@user = user @user = user

4
app/services/exports/lettings_log_export_service.rb

@ -119,10 +119,10 @@ module Exports
if !full_update && recent_export if !full_update && recent_export
params = { from: recent_export.started_at, to: start_time } params = { from: recent_export.started_at, to: start_time }
LettingsLog.visible.where("updated_at >= :from and updated_at <= :to", params) LettingsLog.exportable.where("updated_at >= :from and updated_at <= :to", params)
else else
params = { to: start_time } params = { to: start_time }
LettingsLog.visible.where("updated_at <= :to", params) LettingsLog.exportable.where("updated_at <= :to", params)
end end
end end

6
db/migrate/20230515114101_add_discarded_at_to_logs.rb

@ -0,0 +1,6 @@
class AddDiscardedAtToLogs < ActiveRecord::Migration[7.0]
def change
add_column :sales_logs, :discarded_at, :datetime
add_column :lettings_logs, :discarded_at, :datetime
end
end

6
db/schema.rb

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.0].define(version: 2023_05_05_105327) do ActiveRecord::Schema[7.0].define(version: 2023_05_15_114101) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -288,6 +288,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_05_05_105327) do
t.string "county" t.string "county"
t.integer "carehome_charges_value_check" t.integer "carehome_charges_value_check"
t.integer "status_cache", default: 0, null: false t.integer "status_cache", default: 0, null: false
t.datetime "discarded_at"
t.index ["bulk_upload_id"], name: "index_lettings_logs_on_bulk_upload_id" t.index ["bulk_upload_id"], name: "index_lettings_logs_on_bulk_upload_id"
t.index ["created_by_id"], name: "index_lettings_logs_on_created_by_id" t.index ["created_by_id"], name: "index_lettings_logs_on_created_by_id"
t.index ["location_id"], name: "index_lettings_logs_on_location_id" t.index ["location_id"], name: "index_lettings_logs_on_location_id"
@ -599,8 +600,9 @@ ActiveRecord::Schema[7.0].define(version: 2023_05_05_105327) do
t.integer "student_not_child_value_check" t.integer "student_not_child_value_check"
t.integer "percentage_discount_value_check" t.integer "percentage_discount_value_check"
t.integer "buyer_livein_value_check" t.integer "buyer_livein_value_check"
t.integer "combined_income_value_check"
t.integer "status_cache", default: 0, null: false t.integer "status_cache", default: 0, null: false
t.integer "combined_income_value_check"
t.datetime "discarded_at"
t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id" t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id"
t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id"
t.index ["old_id"], name: "index_sales_logs_on_old_id", unique: true t.index ["old_id"], name: "index_sales_logs_on_old_id", unique: true

4
spec/factories/lettings_log.rb

@ -164,6 +164,10 @@ FactoryBot.define do
trait :startdate_today do trait :startdate_today do
startdate { Time.zone.today } startdate { Time.zone.today }
end end
trait :deleted do
status { 4 }
discarded_at { Time.zone.now }
end
created_at { Time.zone.today } created_at { Time.zone.today }
updated_at { Time.zone.today } updated_at { Time.zone.today }
end end

4
spec/factories/sales_log.rb

@ -129,5 +129,9 @@ FactoryBot.define do
trait :with_uprn do trait :with_uprn do
uprn { rand(999_999_999_999).to_s } uprn { rand(999_999_999_999).to_s }
end end
trait :deleted do
status { 4 }
discarded_at { Time.zone.now }
end
end end
end end

4
spec/fixtures/files/lettings_logs_download.csv vendored

@ -1,2 +1,2 @@
id,status,created_at,updated_at,created_by_name,is_dpo,owning_organisation_name,managing_organisation_name,collection_start_year,rent_value_check,needstype,renewal,startdate,rent_type_detail,irproduct_other,tenancycode,propcode,age1,sex1,ecstat1,hhmemb,relat2,age2,sex2,retirement_value_check,ecstat2,armedforces,leftreg,illness,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_h,is_previous_la_inferred,prevloc_label,prevloc,illness_type_1,illness_type_2,is_la_inferred,la_label,la,postcode_known,postcode_full,previous_la_known,wchair,preg_occ,cbl,earnings,incfreq,net_income_value_check,benefits,hb,period,brent,scharge,pscharge,supcharg,tcharge,offered,layear,ppostcode_full,mrcdate,declaration,ethnic,national,prevten,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,reservist,startertenancy,tenancylength,tenancy,rsnvac,unittype_gn,beds,waityear,reasonpref,chr,cap,reasonother,housingneeds_f,housingneeds_g,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,property_owner_organisation,property_manager_organisation,purchaser_code,reason,majorrepairs,hbrentshortfall,property_relet,incref,first_time_property_let_as_social_housing,unitletas,builtype,voiddate,renttype,lettype,totchild,totelder,totadult,net_income_known,nocharge,is_carehome,household_charge,referral,tshortfall,chcharge,ppcodenk,age1_known,age2_known,age3_known,age4_known,age5_known,age6_known,age7_known,age8_known,ethnic_group,letting_allocation_unknown,details_known_2,details_known_3,details_known_4,details_known_5,details_known_6,details_known_7,details_known_8,has_benefits,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat3,relat4,relat5,relat6,relat7,relat8,old_form_id,lar,irproduct,old_id,joint,tshortfall_known,sheltered,pregnancy_value_check,hhtype,new_old,vacdays,major_repairs_date_value_check,void_date_value_check,housingneeds_type,housingneeds_other,unresolved,updated_by_id,uprn,uprn_known,uprn_confirmed,address_line1,address_line2,town_or_city,county,carehome_charges_value_check,status_cache,unittype_sh,scheme_code,scheme_service_name,scheme_sensitive,scheme_type,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate id,status,created_at,updated_at,created_by_name,is_dpo,owning_organisation_name,managing_organisation_name,collection_start_year,rent_value_check,needstype,renewal,startdate,rent_type_detail,irproduct_other,tenancycode,propcode,age1,sex1,ecstat1,hhmemb,relat2,age2,sex2,retirement_value_check,ecstat2,armedforces,leftreg,illness,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_h,is_previous_la_inferred,prevloc_label,prevloc,illness_type_1,illness_type_2,is_la_inferred,la_label,la,postcode_known,postcode_full,previous_la_known,wchair,preg_occ,cbl,earnings,incfreq,net_income_value_check,benefits,hb,period,brent,scharge,pscharge,supcharg,tcharge,offered,layear,ppostcode_full,mrcdate,declaration,ethnic,national,prevten,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,reservist,startertenancy,tenancylength,tenancy,rsnvac,unittype_gn,beds,waityear,reasonpref,chr,cap,reasonother,housingneeds_f,housingneeds_g,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,property_owner_organisation,property_manager_organisation,purchaser_code,reason,majorrepairs,hbrentshortfall,property_relet,incref,first_time_property_let_as_social_housing,unitletas,builtype,voiddate,renttype,lettype,totchild,totelder,totadult,net_income_known,nocharge,is_carehome,household_charge,referral,tshortfall,chcharge,ppcodenk,age1_known,age2_known,age3_known,age4_known,age5_known,age6_known,age7_known,age8_known,ethnic_group,letting_allocation_unknown,details_known_2,details_known_3,details_known_4,details_known_5,details_known_6,details_known_7,details_known_8,has_benefits,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat3,relat4,relat5,relat6,relat7,relat8,old_form_id,lar,irproduct,old_id,joint,tshortfall_known,sheltered,pregnancy_value_check,hhtype,new_old,vacdays,major_repairs_date_value_check,void_date_value_check,housingneeds_type,housingneeds_other,unresolved,updated_by_id,uprn,uprn_known,uprn_confirmed,address_line1,address_line2,town_or_city,county,carehome_charges_value_check,status_cache,discarded_at,unittype_sh,scheme_code,scheme_service_name,scheme_sensitive,scheme_type,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate
{id},in_progress,2022-02-08 16:52:15 +0000,2022-02-08 16:52:15 +0000,Danny Rojas,No,DLUHC,DLUHC,2021,,Supported housing,,2 October 2021,London Affordable Rent,,,,,,,,,,,,,,,,,,,,No,,,,,No,Westminster,E09000033,,SE1 1TE,,No,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,8,0,0,0,,0,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,0,,,,,,,,,,,,,,,,,,9,1,,,,,,,,,,,,,,,,not_started,6,{scheme_code},{scheme_service_name},{scheme_sensitive},Missing,No,DLUHC,{scheme_primary_client_group},,{scheme_secondary_client_group},{scheme_support_type},{scheme_intended_stay},2021-04-01 00:00:00 +0100,{location_code},SE1 1TE,Downing Street,20,Bungalow,Fitted with equipment and adaptations,Westminster,{location_startdate} {id},in_progress,2022-02-08 16:52:15 +0000,2022-02-08 16:52:15 +0000,Danny Rojas,No,DLUHC,DLUHC,2021,,Supported housing,,2 October 2021,London Affordable Rent,,,,,,,,,,,,,,,,,,,,No,,,,,No,Westminster,E09000033,,SE1 1TE,,No,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,8,0,0,0,,0,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,0,,,,,,,,,,,,,,,,,,9,1,,,,,,,,,,,,,,,,not_started,,6,{scheme_code},{scheme_service_name},{scheme_sensitive},Missing,No,DLUHC,{scheme_primary_client_group},,{scheme_secondary_client_group},{scheme_support_type},{scheme_intended_stay},2021-04-01 00:00:00 +0100,{location_code},SE1 1TE,Downing Street,20,Bungalow,Fitted with equipment and adaptations,Westminster,{location_startdate}

1 id status created_at updated_at created_by_name is_dpo owning_organisation_name managing_organisation_name collection_start_year rent_value_check needstype renewal startdate rent_type_detail irproduct_other tenancycode propcode age1 sex1 ecstat1 hhmemb relat2 age2 sex2 retirement_value_check ecstat2 armedforces leftreg illness housingneeds_a housingneeds_b housingneeds_c housingneeds_h is_previous_la_inferred prevloc_label prevloc illness_type_1 illness_type_2 is_la_inferred la_label la postcode_known postcode_full previous_la_known wchair preg_occ cbl earnings incfreq net_income_value_check benefits hb period brent scharge pscharge supcharg tcharge offered layear ppostcode_full mrcdate declaration ethnic national prevten age3 sex3 ecstat3 age4 sex4 ecstat4 age5 sex5 ecstat5 age6 sex6 ecstat6 age7 sex7 ecstat7 age8 sex8 ecstat8 homeless underoccupation_benefitcap reservist startertenancy tenancylength tenancy rsnvac unittype_gn beds waityear reasonpref chr cap reasonother housingneeds_f housingneeds_g illness_type_3 illness_type_4 illness_type_8 illness_type_5 illness_type_6 illness_type_7 illness_type_9 illness_type_10 rp_homeless rp_insan_unsat rp_medwel rp_hardship rp_dontknow tenancyother property_owner_organisation property_manager_organisation purchaser_code reason majorrepairs hbrentshortfall property_relet incref first_time_property_let_as_social_housing unitletas builtype voiddate renttype lettype totchild totelder totadult net_income_known nocharge is_carehome household_charge referral tshortfall chcharge ppcodenk age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known ethnic_group letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 has_benefits wrent wscharge wpschrge wsupchrg wtcharge wtshortfall refused housingneeds wchchrg newprop relat3 relat4 relat5 relat6 relat7 relat8 old_form_id lar irproduct old_id joint tshortfall_known sheltered pregnancy_value_check hhtype new_old vacdays major_repairs_date_value_check void_date_value_check housingneeds_type housingneeds_other unresolved updated_by_id uprn uprn_known uprn_confirmed address_line1 address_line2 town_or_city county carehome_charges_value_check status_cache discarded_at unittype_sh scheme_code scheme_service_name scheme_sensitive scheme_type scheme_registered_under_care_act scheme_owning_organisation_name scheme_primary_client_group scheme_has_other_client_group scheme_secondary_client_group scheme_support_type scheme_intended_stay scheme_created_at location_code location_postcode location_name location_units location_type_of_unit location_mobility_type location_admin_district location_startdate
2 {id} in_progress 2022-02-08 16:52:15 +0000 2022-02-08 16:52:15 +0000 Danny Rojas No DLUHC DLUHC 2021 Supported housing 2 October 2021 London Affordable Rent No No Westminster E09000033 SE1 1TE No 2 8 0 0 0 0 0 0 9 1 not_started 6 {scheme_code} {scheme_service_name} {scheme_sensitive} Missing No DLUHC {scheme_primary_client_group} {scheme_secondary_client_group} {scheme_support_type} {scheme_intended_stay} 2021-04-01 00:00:00 +0100 {location_code} SE1 1TE Downing Street 20 Bungalow Fitted with equipment and adaptations Westminster {location_startdate}

4
spec/fixtures/files/lettings_logs_download_codes_only.csv vendored

@ -1,2 +1,2 @@
id,status,created_at,updated_at,created_by_name,is_dpo,owning_organisation_name,managing_organisation_name,collection_start_year,rent_value_check,needstype,renewal,startdate,rent_type_detail,irproduct_other,tenancycode,propcode,age1,sex1,ecstat1,hhmemb,relat2,age2,sex2,retirement_value_check,ecstat2,armedforces,leftreg,illness,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_h,is_previous_la_inferred,prevloc_label,prevloc,illness_type_1,illness_type_2,is_la_inferred,la_label,la,postcode_known,postcode_full,previous_la_known,wchair,preg_occ,cbl,earnings,incfreq,net_income_value_check,benefits,hb,period,brent,scharge,pscharge,supcharg,tcharge,offered,layear,ppostcode_full,mrcdate,declaration,ethnic,national,prevten,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,reservist,startertenancy,tenancylength,tenancy,rsnvac,unittype_gn,beds,waityear,reasonpref,chr,cap,reasonother,housingneeds_f,housingneeds_g,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,property_owner_organisation,property_manager_organisation,purchaser_code,reason,majorrepairs,hbrentshortfall,property_relet,incref,first_time_property_let_as_social_housing,unitletas,builtype,voiddate,renttype,lettype,totchild,totelder,totadult,net_income_known,nocharge,is_carehome,household_charge,referral,tshortfall,chcharge,ppcodenk,age1_known,age2_known,age3_known,age4_known,age5_known,age6_known,age7_known,age8_known,ethnic_group,letting_allocation_unknown,details_known_2,details_known_3,details_known_4,details_known_5,details_known_6,details_known_7,details_known_8,has_benefits,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat3,relat4,relat5,relat6,relat7,relat8,old_form_id,lar,irproduct,old_id,joint,tshortfall_known,sheltered,pregnancy_value_check,hhtype,new_old,vacdays,major_repairs_date_value_check,void_date_value_check,housingneeds_type,housingneeds_other,unresolved,updated_by_id,uprn,uprn_known,uprn_confirmed,address_line1,address_line2,town_or_city,county,carehome_charges_value_check,status_cache,unittype_sh,scheme_code,scheme_service_name,scheme_sensitive,scheme_type,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate id,status,created_at,updated_at,created_by_name,is_dpo,owning_organisation_name,managing_organisation_name,collection_start_year,rent_value_check,needstype,renewal,startdate,rent_type_detail,irproduct_other,tenancycode,propcode,age1,sex1,ecstat1,hhmemb,relat2,age2,sex2,retirement_value_check,ecstat2,armedforces,leftreg,illness,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_h,is_previous_la_inferred,prevloc_label,prevloc,illness_type_1,illness_type_2,is_la_inferred,la_label,la,postcode_known,postcode_full,previous_la_known,wchair,preg_occ,cbl,earnings,incfreq,net_income_value_check,benefits,hb,period,brent,scharge,pscharge,supcharg,tcharge,offered,layear,ppostcode_full,mrcdate,declaration,ethnic,national,prevten,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,reservist,startertenancy,tenancylength,tenancy,rsnvac,unittype_gn,beds,waityear,reasonpref,chr,cap,reasonother,housingneeds_f,housingneeds_g,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,property_owner_organisation,property_manager_organisation,purchaser_code,reason,majorrepairs,hbrentshortfall,property_relet,incref,first_time_property_let_as_social_housing,unitletas,builtype,voiddate,renttype,lettype,totchild,totelder,totadult,net_income_known,nocharge,is_carehome,household_charge,referral,tshortfall,chcharge,ppcodenk,age1_known,age2_known,age3_known,age4_known,age5_known,age6_known,age7_known,age8_known,ethnic_group,letting_allocation_unknown,details_known_2,details_known_3,details_known_4,details_known_5,details_known_6,details_known_7,details_known_8,has_benefits,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat3,relat4,relat5,relat6,relat7,relat8,old_form_id,lar,irproduct,old_id,joint,tshortfall_known,sheltered,pregnancy_value_check,hhtype,new_old,vacdays,major_repairs_date_value_check,void_date_value_check,housingneeds_type,housingneeds_other,unresolved,updated_by_id,uprn,uprn_known,uprn_confirmed,address_line1,address_line2,town_or_city,county,carehome_charges_value_check,status_cache,discarded_at,unittype_sh,scheme_code,scheme_service_name,scheme_sensitive,scheme_type,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate
{id},in_progress,2022-02-08 16:52:15 +0000,2022-02-08 16:52:15 +0000,Danny Rojas,false,DLUHC,DLUHC,2021,,2,,2 October 2021,2,,,,,,,,,,,,,,,,,,,,false,,,,,false,Westminster,E09000033,,SE1 1TE,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,8,0,0,0,,0,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,0,,,,,,,,,,,,,,,,,,9,1,,,,,,,,,,,,,,,,not_started,6,{scheme_code},{scheme_service_name},{scheme_sensitive},0,1,DLUHC,{scheme_primary_client_group},,{scheme_secondary_client_group},{scheme_support_type},{scheme_intended_stay},2021-04-01 00:00:00 +0100,{location_code},SE1 1TE,Downing Street,20,6,A,Westminster,{location_startdate} {id},in_progress,2022-02-08 16:52:15 +0000,2022-02-08 16:52:15 +0000,Danny Rojas,false,DLUHC,DLUHC,2021,,2,,2 October 2021,2,,,,,,,,,,,,,,,,,,,,false,,,,,false,Westminster,E09000033,,SE1 1TE,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,8,0,0,0,,0,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,0,,,,,,,,,,,,,,,,,,9,1,,,,,,,,,,,,,,,,not_started,,6,{scheme_code},{scheme_service_name},{scheme_sensitive},0,1,DLUHC,{scheme_primary_client_group},,{scheme_secondary_client_group},{scheme_support_type},{scheme_intended_stay},2021-04-01 00:00:00 +0100,{location_code},SE1 1TE,Downing Street,20,6,A,Westminster,{location_startdate}

1 id status created_at updated_at created_by_name is_dpo owning_organisation_name managing_organisation_name collection_start_year rent_value_check needstype renewal startdate rent_type_detail irproduct_other tenancycode propcode age1 sex1 ecstat1 hhmemb relat2 age2 sex2 retirement_value_check ecstat2 armedforces leftreg illness housingneeds_a housingneeds_b housingneeds_c housingneeds_h is_previous_la_inferred prevloc_label prevloc illness_type_1 illness_type_2 is_la_inferred la_label la postcode_known postcode_full previous_la_known wchair preg_occ cbl earnings incfreq net_income_value_check benefits hb period brent scharge pscharge supcharg tcharge offered layear ppostcode_full mrcdate declaration ethnic national prevten age3 sex3 ecstat3 age4 sex4 ecstat4 age5 sex5 ecstat5 age6 sex6 ecstat6 age7 sex7 ecstat7 age8 sex8 ecstat8 homeless underoccupation_benefitcap reservist startertenancy tenancylength tenancy rsnvac unittype_gn beds waityear reasonpref chr cap reasonother housingneeds_f housingneeds_g illness_type_3 illness_type_4 illness_type_8 illness_type_5 illness_type_6 illness_type_7 illness_type_9 illness_type_10 rp_homeless rp_insan_unsat rp_medwel rp_hardship rp_dontknow tenancyother property_owner_organisation property_manager_organisation purchaser_code reason majorrepairs hbrentshortfall property_relet incref first_time_property_let_as_social_housing unitletas builtype voiddate renttype lettype totchild totelder totadult net_income_known nocharge is_carehome household_charge referral tshortfall chcharge ppcodenk age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known ethnic_group letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 has_benefits wrent wscharge wpschrge wsupchrg wtcharge wtshortfall refused housingneeds wchchrg newprop relat3 relat4 relat5 relat6 relat7 relat8 old_form_id lar irproduct old_id joint tshortfall_known sheltered pregnancy_value_check hhtype new_old vacdays major_repairs_date_value_check void_date_value_check housingneeds_type housingneeds_other unresolved updated_by_id uprn uprn_known uprn_confirmed address_line1 address_line2 town_or_city county carehome_charges_value_check status_cache discarded_at unittype_sh scheme_code scheme_service_name scheme_sensitive scheme_type scheme_registered_under_care_act scheme_owning_organisation_name scheme_primary_client_group scheme_has_other_client_group scheme_secondary_client_group scheme_support_type scheme_intended_stay scheme_created_at location_code location_postcode location_name location_units location_type_of_unit location_mobility_type location_admin_district location_startdate
2 {id} in_progress 2022-02-08 16:52:15 +0000 2022-02-08 16:52:15 +0000 Danny Rojas false DLUHC DLUHC 2021 2 2 October 2021 2 false false Westminster E09000033 SE1 1TE 2 2 8 0 0 0 0 0 0 9 1 not_started 6 {scheme_code} {scheme_service_name} {scheme_sensitive} 0 1 DLUHC {scheme_primary_client_group} {scheme_secondary_client_group} {scheme_support_type} {scheme_intended_stay} 2021-04-01 00:00:00 +0100 {location_code} SE1 1TE Downing Street 20 6 A Westminster {location_startdate}

24
spec/models/lettings_log_spec.rb

@ -1,5 +1,6 @@
require "rails_helper" require "rails_helper"
require "shared/shared_examples_for_derived_fields" require "shared/shared_examples_for_derived_fields"
require "shared/shared_log_examples"
# rubocop:disable RSpec/MessageChain # rubocop:disable RSpec/MessageChain
# rubocop:disable RSpec/AnyInstance # rubocop:disable RSpec/AnyInstance
@ -23,6 +24,7 @@ RSpec.describe LettingsLog do
end end
include_examples "shared examples for derived fields", :lettings_log include_examples "shared examples for derived fields", :lettings_log
include_examples "shared log examples", :lettings_log
it "inherits from log" do it "inherits from log" do
expect(described_class).to be < Log expect(described_class).to be < Log
@ -183,27 +185,7 @@ RSpec.describe LettingsLog do
end end
describe "status" do describe "status" do
let!(:empty_lettings_log) { create(:lettings_log) } let(:completed_lettings_log) { create(:lettings_log, :completed) }
let!(:in_progress_lettings_log) { create(:lettings_log, :in_progress) }
let!(:completed_lettings_log) { create(:lettings_log, :completed) }
it "is set to not started for an empty lettings log" do
expect(empty_lettings_log.not_started?).to be(true)
expect(empty_lettings_log.in_progress?).to be(false)
expect(empty_lettings_log.completed?).to be(false)
end
it "is set to in progress for a started lettings log" do
expect(in_progress_lettings_log.in_progress?).to be(true)
expect(in_progress_lettings_log.not_started?).to be(false)
expect(in_progress_lettings_log.completed?).to be(false)
end
it "is set to completed for a completed lettings log" do
expect(completed_lettings_log.in_progress?).to be(false)
expect(completed_lettings_log.not_started?).to be(false)
expect(completed_lettings_log.completed?).to be(true)
end
context "when only a subsection that is hidden in tasklist is not completed" do context "when only a subsection that is hidden in tasklist is not completed" do
let(:household_characteristics_subsection) { completed_lettings_log.form.get_subsection("household_characteristics") } let(:household_characteristics_subsection) { completed_lettings_log.form.get_subsection("household_characteristics") }

26
spec/models/sales_log_spec.rb

@ -1,5 +1,6 @@
require "rails_helper" require "rails_helper"
require "shared/shared_examples_for_derived_fields" require "shared/shared_examples_for_derived_fields"
require "shared/shared_log_examples"
# rubocop:disable RSpec/MessageChain # rubocop:disable RSpec/MessageChain
# rubocop:disable RSpec/AnyInstance # rubocop:disable RSpec/AnyInstance
@ -8,6 +9,7 @@ RSpec.describe SalesLog, type: :model do
let(:created_by_user) { create(:user) } let(:created_by_user) { create(:user) }
include_examples "shared examples for derived fields", :sales_log include_examples "shared examples for derived fields", :sales_log
include_examples "shared log examples", :sales_log
it "inherits from log" do it "inherits from log" do
expect(described_class).to be < Log expect(described_class).to be < Log
@ -112,27 +114,7 @@ RSpec.describe SalesLog, type: :model do
end end
describe "status" do describe "status" do
let!(:empty_sales_log) { create(:sales_log) } let(:completed_sales_log) { create(:sales_log, :completed) }
let!(:in_progress_sales_log) { create(:sales_log, :in_progress) }
let!(:completed_sales_log) { create(:sales_log, :completed) }
it "is set to not started for an empty sales log" do
expect(empty_sales_log.not_started?).to be(true)
expect(empty_sales_log.in_progress?).to be(false)
expect(empty_sales_log.completed?).to be(false)
end
it "is set to in progress for a started sales log" do
expect(in_progress_sales_log.in_progress?).to be(true)
expect(in_progress_sales_log.not_started?).to be(false)
expect(in_progress_sales_log.completed?).to be(false)
end
it "is set to completed for a completed sales log" do
expect(completed_sales_log.in_progress?).to be(false)
expect(completed_sales_log.not_started?).to be(false)
expect(completed_sales_log.completed?).to be(true)
end
context "when proplen is not given" do context "when proplen is not given" do
before do before do
@ -148,6 +130,7 @@ RSpec.describe SalesLog, type: :model do
expect(completed_sales_log.in_progress?).to be(false) expect(completed_sales_log.in_progress?).to be(false)
expect(completed_sales_log.not_started?).to be(false) expect(completed_sales_log.not_started?).to be(false)
expect(completed_sales_log.completed?).to be(true) expect(completed_sales_log.completed?).to be(true)
expect(completed_sales_log.deleted?).to be(false)
end end
it "is set to in_progress for a log with a saledate after 23/24" do it "is set to in_progress for a log with a saledate after 23/24" do
@ -155,6 +138,7 @@ RSpec.describe SalesLog, type: :model do
expect(completed_sales_log.in_progress?).to be(true) expect(completed_sales_log.in_progress?).to be(true)
expect(completed_sales_log.not_started?).to be(false) expect(completed_sales_log.not_started?).to be(false)
expect(completed_sales_log.completed?).to be(false) expect(completed_sales_log.completed?).to be(false)
expect(completed_sales_log.deleted?).to be(false)
end end
end end
end end

17
spec/requests/lettings_logs_controller_spec.rb

@ -1323,19 +1323,6 @@ RSpec.describe LettingsLogsController, type: :request do
sign_in user sign_in user
end end
# rubocop:disable RSpec/AnyInstance
context "when log deletion errors" do
before do
allow_any_instance_of(LettingsLog).to receive(:delete).and_return(false)
end
it "renders 500 page" do
delete_request
expect(response).to have_http_status(:internal_server_error)
end
end
# rubocop:enable RSpec/AnyInstance
context "when delete permitted" do context "when delete permitted" do
it "redirects to lettings logs and shows message" do it "redirects to lettings logs and shows message" do
delete_request delete_request
@ -1344,8 +1331,8 @@ RSpec.describe LettingsLogsController, type: :request do
expect(page).to have_content("Log #{id} has been deleted") expect(page).to have_content("Log #{id} has been deleted")
end end
it "deletes the log" do it "marks the log as deleted" do
expect { delete_request }.to change { LettingsLog.exists?(id) }.from(true).to(false) expect { delete_request }.to change { lettings_log.reload.status }.from("completed").to("deleted")
end end
end end

17
spec/requests/sales_logs_controller_spec.rb

@ -668,19 +668,6 @@ RSpec.describe SalesLogsController, type: :request do
sign_in user sign_in user
end end
# rubocop:disable RSpec/AnyInstance
context "when log deletion errors" do
before do
allow_any_instance_of(SalesLog).to receive(:delete).and_return(false)
end
it "renders 500 page" do
delete_request
expect(response).to have_http_status(:internal_server_error)
end
end
# rubocop:enable RSpec/AnyInstance
context "when delete permitted" do context "when delete permitted" do
it "redirects to sales logs and shows message" do it "redirects to sales logs and shows message" do
delete_request delete_request
@ -689,8 +676,8 @@ RSpec.describe SalesLogsController, type: :request do
expect(page).to have_content("Log #{id} has been deleted") expect(page).to have_content("Log #{id} has been deleted")
end end
it "deletes the log" do it "marks the log as deleted" do
expect { delete_request }.to change { SalesLog.exists?(id) }.from(true).to(false) expect { delete_request }.to change { sales_log.reload.status }.from("completed").to("deleted")
end end
end end

783
spec/services/csv/lettings_log_csv_service_spec.rb

@ -2,7 +2,7 @@ require "rails_helper"
RSpec.describe Csv::LettingsLogCsvService do RSpec.describe Csv::LettingsLogCsvService do
context "when the user is support" do context "when the user is support" do
let(:user) { FactoryBot.create(:user, :support) } let(:user) { create(:user, :support) }
let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json") } let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json") }
before do before do
@ -11,226 +11,229 @@ RSpec.describe Csv::LettingsLogCsvService do
end end
it "sets csv attributes in correct order" do it "sets csv attributes in correct order" do
expected_csv_attributes = %w[id expected_csv_attributes = %w[
status id
created_at status
updated_at created_at
created_by_name updated_at
is_dpo created_by_name
owning_organisation_name is_dpo
managing_organisation_name owning_organisation_name
collection_start_year managing_organisation_name
rent_value_check collection_start_year
needstype rent_value_check
renewal needstype
startdate renewal
rent_type_detail startdate
irproduct_other rent_type_detail
tenancycode irproduct_other
propcode tenancycode
postcode_known propcode
postcode_full postcode_known
is_la_inferred postcode_full
la_label is_la_inferred
la la_label
first_time_property_let_as_social_housing la
unitletas first_time_property_let_as_social_housing
rsnvac unitletas
offered rsnvac
unittype_gn offered
builtype unittype_gn
wchair builtype
beds wchair
voiddate beds
void_date_value_check voiddate
majorrepairs void_date_value_check
mrcdate majorrepairs
major_repairs_date_value_check mrcdate
startertenancy major_repairs_date_value_check
tenancy startertenancy
tenancyother tenancy
tenancylength tenancyother
sheltered tenancylength
declaration sheltered
hhmemb declaration
pregnancy_value_check hhmemb
age1_known pregnancy_value_check
age1 age1_known
sex1 age1
ethnic_group sex1
ethnic ethnic_group
national ethnic
ecstat1 national
retirement_value_check ecstat1
details_known_2 retirement_value_check
relat2 details_known_2
age2_known relat2
age2 age2_known
sex2 age2
ecstat2 sex2
details_known_3 ecstat2
relat3 details_known_3
age3_known relat3
age3 age3_known
sex3 age3
ecstat3 sex3
details_known_4 ecstat3
relat4 details_known_4
age4_known relat4
age4 age4_known
sex4 age4
ecstat4 sex4
details_known_5 ecstat4
relat5 details_known_5
age5_known relat5
age5 age5_known
sex5 age5
ecstat5 sex5
details_known_6 ecstat5
relat6 details_known_6
age6_known relat6
age6 age6_known
sex6 age6
ecstat6 sex6
details_known_7 ecstat6
relat7 details_known_7
age7_known relat7
age7 age7_known
sex7 age7
ecstat7 sex7
details_known_8 ecstat7
relat8 details_known_8
age8_known relat8
age8 age8_known
sex8 age8
ecstat8 sex8
armedforces ecstat8
leftreg armedforces
reservist leftreg
preg_occ reservist
housingneeds preg_occ
housingneeds_type housingneeds
housingneeds_other housingneeds_type
illness housingneeds_other
illness_type_4 illness
illness_type_5 illness_type_4
illness_type_2 illness_type_5
illness_type_6 illness_type_2
illness_type_7 illness_type_6
illness_type_3 illness_type_7
illness_type_9 illness_type_3
illness_type_8 illness_type_9
illness_type_1 illness_type_8
illness_type_10 illness_type_1
layear illness_type_10
waityear layear
reason waityear
reasonother reason
prevten reasonother
underoccupation_benefitcap prevten
homeless underoccupation_benefitcap
ppcodenk homeless
ppostcode_full ppcodenk
previous_la_known ppostcode_full
is_previous_la_inferred previous_la_known
prevloc_label is_previous_la_inferred
prevloc prevloc_label
reasonpref prevloc
rp_homeless reasonpref
rp_insan_unsat rp_homeless
rp_medwel rp_insan_unsat
rp_hardship rp_medwel
rp_dontknow rp_hardship
cbl rp_dontknow
cap cbl
chr cap
letting_allocation_unknown chr
referral letting_allocation_unknown
net_income_known referral
earnings net_income_known
incfreq earnings
net_income_value_check incfreq
hb net_income_value_check
benefits hb
household_charge benefits
period household_charge
is_carehome period
chcharge is_carehome
carehome_charges_value_check chcharge
brent carehome_charges_value_check
scharge brent
pscharge scharge
supcharg pscharge
tcharge supcharg
hbrentshortfall tcharge
tshortfall_known hbrentshortfall
tshortfall tshortfall_known
housingneeds_a tshortfall
housingneeds_b housingneeds_a
housingneeds_c housingneeds_b
housingneeds_f housingneeds_c
housingneeds_g housingneeds_f
housingneeds_h housingneeds_g
property_owner_organisation housingneeds_h
property_manager_organisation property_owner_organisation
purchaser_code property_manager_organisation
property_relet purchaser_code
incref property_relet
renttype incref
lettype renttype
totchild lettype
totelder totchild
totadult totelder
nocharge totadult
has_benefits nocharge
wrent has_benefits
wscharge wrent
wpschrge wscharge
wsupchrg wpschrge
wtcharge wsupchrg
wtshortfall wtcharge
refused wtshortfall
wchchrg refused
newprop wchchrg
old_form_id newprop
lar old_form_id
irproduct lar
old_id irproduct
joint old_id
hhtype joint
new_old hhtype
vacdays new_old
unresolved vacdays
updated_by_id unresolved
uprn updated_by_id
uprn_known uprn
uprn_confirmed uprn_known
address_line1 uprn_confirmed
address_line2 address_line1
town_or_city address_line2
county town_or_city
status_cache county
unittype_sh status_cache
scheme_code discarded_at
scheme_service_name unittype_sh
scheme_sensitive scheme_code
scheme_type scheme_service_name
scheme_registered_under_care_act scheme_sensitive
scheme_owning_organisation_name scheme_type
scheme_primary_client_group scheme_registered_under_care_act
scheme_has_other_client_group scheme_owning_organisation_name
scheme_secondary_client_group scheme_primary_client_group
scheme_support_type scheme_has_other_client_group
scheme_intended_stay scheme_secondary_client_group
scheme_created_at scheme_support_type
location_code scheme_intended_stay
location_postcode scheme_created_at
location_name location_code
location_units location_postcode
location_type_of_unit location_name
location_mobility_type location_units
location_admin_district location_type_of_unit
location_startdate] location_mobility_type
location_admin_district
location_startdate
]
csv = CSV.parse(described_class.new(user, export_type: "labels").to_csv) csv = CSV.parse(described_class.new(user, export_type: "labels").to_csv)
@ -248,174 +251,176 @@ RSpec.describe Csv::LettingsLogCsvService do
end end
it "sets csv attributes in correct order and without omitted values" do it "sets csv attributes in correct order and without omitted values" do
expected_csv_attributes = %w[id expected_csv_attributes = %w[
status id
created_at status
updated_at created_at
created_by_name updated_at
is_dpo created_by_name
owning_organisation_name is_dpo
managing_organisation_name owning_organisation_name
collection_start_year managing_organisation_name
renewal collection_start_year
startdate renewal
irproduct_other startdate
tenancycode irproduct_other
propcode tenancycode
postcode_full propcode
la_label postcode_full
unitletas la_label
rsnvac unitletas
offered rsnvac
unittype_gn offered
builtype unittype_gn
wchair builtype
beds wchair
voiddate beds
void_date_value_check voiddate
majorrepairs void_date_value_check
mrcdate majorrepairs
major_repairs_date_value_check mrcdate
startertenancy major_repairs_date_value_check
tenancy startertenancy
tenancyother tenancy
tenancylength tenancyother
sheltered tenancylength
declaration sheltered
age1 declaration
sex1 age1
ethnic_group sex1
ethnic ethnic_group
national ethnic
ecstat1 national
relat2 ecstat1
age2 relat2
sex2 age2
ecstat2 sex2
relat3 ecstat2
age3 relat3
sex3 age3
ecstat3 sex3
relat4 ecstat3
age4 relat4
sex4 age4
ecstat4 sex4
relat5 ecstat4
age5 relat5
sex5 age5
ecstat5 sex5
relat6 ecstat5
age6 relat6
sex6 age6
ecstat6 sex6
relat7 ecstat6
age7 relat7
sex7 age7
ecstat7 sex7
relat8 ecstat7
age8 relat8
sex8 age8
ecstat8 sex8
armedforces ecstat8
leftreg armedforces
reservist leftreg
preg_occ reservist
housingneeds preg_occ
housingneeds_type housingneeds
housingneeds_other housingneeds_type
illness housingneeds_other
illness_type_4 illness
illness_type_5 illness_type_4
illness_type_2 illness_type_5
illness_type_6 illness_type_2
illness_type_7 illness_type_6
illness_type_3 illness_type_7
illness_type_9 illness_type_3
illness_type_8 illness_type_9
illness_type_1 illness_type_8
illness_type_10 illness_type_1
layear illness_type_10
waityear layear
reason waityear
reasonother reason
prevten reasonother
underoccupation_benefitcap prevten
homeless underoccupation_benefitcap
ppcodenk homeless
ppostcode_full ppcodenk
prevloc_label ppostcode_full
reasonpref prevloc_label
rp_homeless reasonpref
rp_insan_unsat rp_homeless
rp_medwel rp_insan_unsat
rp_hardship rp_medwel
rp_dontknow rp_hardship
cbl rp_dontknow
cap cbl
chr cap
referral chr
earnings referral
incfreq earnings
hb incfreq
benefits hb
household_charge benefits
period household_charge
chcharge period
carehome_charges_value_check chcharge
brent carehome_charges_value_check
scharge brent
pscharge scharge
supcharg pscharge
tcharge supcharg
hbrentshortfall tcharge
tshortfall hbrentshortfall
housingneeds_a tshortfall
housingneeds_b housingneeds_a
housingneeds_c housingneeds_b
housingneeds_f housingneeds_c
housingneeds_g housingneeds_f
housingneeds_h housingneeds_g
property_owner_organisation housingneeds_h
property_manager_organisation property_owner_organisation
purchaser_code property_manager_organisation
property_relet purchaser_code
incref property_relet
lettype incref
nocharge lettype
has_benefits nocharge
refused has_benefits
wchchrg refused
newprop wchchrg
lar newprop
irproduct lar
joint irproduct
uprn joint
uprn_known uprn
address_line1 uprn_known
address_line2 address_line1
town_or_city address_line2
county town_or_city
unittype_sh county
scheme_code unittype_sh
scheme_service_name scheme_code
scheme_sensitive scheme_service_name
scheme_type scheme_sensitive
scheme_registered_under_care_act scheme_type
scheme_owning_organisation_name scheme_registered_under_care_act
scheme_primary_client_group scheme_owning_organisation_name
scheme_has_other_client_group scheme_primary_client_group
scheme_secondary_client_group scheme_has_other_client_group
scheme_support_type scheme_secondary_client_group
scheme_intended_stay scheme_support_type
scheme_created_at scheme_intended_stay
location_code scheme_created_at
location_postcode location_code
location_name location_postcode
location_units location_name
location_type_of_unit location_units
location_mobility_type location_type_of_unit
location_admin_district location_mobility_type
location_startdate] location_admin_district
location_startdate
]
csv = CSV.parse(described_class.new(user, export_type: "labels").to_csv) csv = CSV.parse(described_class.new(user, export_type: "labels").to_csv)

49
spec/shared/shared_log_examples.rb

@ -0,0 +1,49 @@
require "rails_helper"
RSpec.shared_examples "shared log examples" do |log_type|
describe "status" do
let(:empty_log) { create(log_type) }
let(:in_progress_log) { create(log_type, :in_progress) }
let(:completed_log) { create(log_type, :completed) }
it "is set to not started for an empty #{log_type} log" do
expect(empty_log.not_started?).to be(true)
expect(empty_log.in_progress?).to be(false)
expect(empty_log.completed?).to be(false)
expect(empty_log.deleted?).to be(false)
end
it "is set to in progress for a started #{log_type} log" do
expect(in_progress_log.in_progress?).to be(true)
expect(in_progress_log.not_started?).to be(false)
expect(in_progress_log.completed?).to be(false)
expect(in_progress_log.deleted?).to be(false)
end
it "is set to completed for a completed #{log_type} log" do
expect(completed_log.in_progress?).to be(false)
expect(completed_log.not_started?).to be(false)
expect(completed_log.completed?).to be(true)
expect(completed_log.deleted?).to be(false)
end
end
describe "discard!" do
around do |example|
Timecop.freeze(Time.zone.local(2022, 1, 1)) do
example.run
end
Timecop.return
end
let(:log) { create(log_type) }
it "updates discarded at with current time" do
expect { log.discard! }.to change { log.reload.discarded_at }.from(nil).to(Time.zone.now)
end
it "updates status to deleted" do
expect { log.discard! }.to change { log.reload.status }.to("deleted")
end
end
end
Loading…
Cancel
Save