2 changed files with 72 additions and 0 deletions
			
			
		@ -0,0 +1,12 @@
					 | 
				
			||||
desc "Bulk update logs with invalid rp_dontknow values" | 
				
			||||
task recalculate_invalid_rpdontknow: :environment do | 
				
			||||
  validation_trigger_condition = "rp_dontknow = 1 AND (rp_homeless = 1 OR rp_insan_unsat = 1 OR rp_medwel = 1 OR rp_hardship = 1)" | 
				
			||||
 | 
				
			||||
  LettingsLog.filter_by_year(2024).where(validation_trigger_condition).find_each do |log| | 
				
			||||
    log.rp_dontknow = 0 | 
				
			||||
 | 
				
			||||
    unless log.save | 
				
			||||
      Rails.logger.info "Could not save changes to lettings log #{log.id}" | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
@ -0,0 +1,60 @@
					 | 
				
			||||
require "rails_helper" | 
				
			||||
require "rake" | 
				
			||||
 | 
				
			||||
RSpec.describe "recalculate_invalid_reasonpref_dontknow" do | 
				
			||||
  subject(:task) { Rake::Task["recalculate_invalid_rpdontknow"] } | 
				
			||||
 | 
				
			||||
  before do | 
				
			||||
    Rake.application.rake_require("tasks/recalculate_invalid_reasonpref_dontknow") | 
				
			||||
    Rake::Task.define_task(:environment) | 
				
			||||
    task.reenable | 
				
			||||
  end | 
				
			||||
 | 
				
			||||
  let(:invalid_logs) { create_list(:lettings_log, 5, :completed, reasonpref: 1, rp_dontknow: 1, rp_homeless: 1, rp_insan_unsat: rand(2), rp_medwel: rand(2), rp_hardship: rand(2)) } | 
				
			||||
  let(:pre_2024_invalid_logs) do | 
				
			||||
    create_list(:lettings_log, 5, :completed, reasonpref: 1, rp_dontknow: 1, rp_homeless: 1, rp_insan_unsat: rand(2), rp_medwel: rand(2), rp_hardship: rand(2)).each do |log| | 
				
			||||
      log.startdate = Time.zone.local(rand(2021..2023), 4, 1) | 
				
			||||
      log.save!(validate: false) | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
  let(:valid_logs) { create_list(:lettings_log, 3, :completed, reasonpref: 1, rp_dontknow: 0, rp_homeless: 1, rp_insan_unsat: 1, rp_medwel: rand(2), rp_hardship: rand(2)) } | 
				
			||||
 | 
				
			||||
  it "updates the right logs from 2024/25 with invalid rp_dontknow values" do | 
				
			||||
    invalid_logs.each do |log| | 
				
			||||
      expect(log.reasonpref).to eq(1) | 
				
			||||
      expect(log.rp_dontknow).to eq(1) | 
				
			||||
      expect(log.rp_homeless).to eq(1) | 
				
			||||
    end | 
				
			||||
    pre_2024_invalid_logs.each do |log| | 
				
			||||
      expect(log.reasonpref).to eq(1) | 
				
			||||
      expect(log.rp_dontknow).to eq(1) | 
				
			||||
      expect(log.rp_homeless).to eq(1) | 
				
			||||
    end | 
				
			||||
    valid_logs.each do |log| | 
				
			||||
      expect(log.reasonpref).to eq(1) | 
				
			||||
      expect(log.rp_dontknow).to eq(0) | 
				
			||||
      expect(log.rp_homeless).to eq(1) | 
				
			||||
      expect(log.rp_insan_unsat).to eq(1) | 
				
			||||
    end | 
				
			||||
    task.invoke | 
				
			||||
    invalid_logs.each do |log| | 
				
			||||
      log.reload | 
				
			||||
      expect(log.reasonpref).to eq(1) | 
				
			||||
      expect(log.rp_dontknow).to eq(0) | 
				
			||||
      expect(log.rp_homeless).to eq(1) | 
				
			||||
    end | 
				
			||||
    pre_2024_invalid_logs.each do |log| | 
				
			||||
      log.reload | 
				
			||||
      expect(log.reasonpref).to eq(1) | 
				
			||||
      expect(log.rp_dontknow).to eq(1) | 
				
			||||
      expect(log.rp_homeless).to eq(1) | 
				
			||||
    end | 
				
			||||
    valid_logs.each do |log| | 
				
			||||
      log.reload | 
				
			||||
      expect(log.reasonpref).to eq(1) | 
				
			||||
      expect(log.rp_dontknow).to eq(0) | 
				
			||||
      expect(log.rp_homeless).to eq(1) | 
				
			||||
      expect(log.rp_insan_unsat).to eq(1) | 
				
			||||
    end | 
				
			||||
  end | 
				
			||||
end | 
				
			||||
					Loading…
					
					
				
		Reference in new issue