From 7836718d7f4ce0be11f9d9767be9513819b3d90f Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Wed, 30 Nov 2022 15:36:05 +0000 Subject: [PATCH] in_crossover_period? now uses overlap of forms - also moved from Form to FormHandler --- .../bulk_upload_lettings_logs_controller.rb | 2 +- .../bulk_upload_sales_logs_controller.rb | 2 +- app/models/form.rb | 4 --- app/models/form_handler.rb | 14 ++++++++ .../bulk_upload_lettings/prepare_your_file.rb | 2 +- .../bulk_upload_sales/prepare_your_file.rb | 2 +- spec/models/form_handler_spec.rb | 16 +++++++++ spec/models/form_spec.rb | 34 ------------------- 8 files changed, 34 insertions(+), 42 deletions(-) diff --git a/app/controllers/bulk_upload_lettings_logs_controller.rb b/app/controllers/bulk_upload_lettings_logs_controller.rb index 59d37e2c5..d731737de 100644 --- a/app/controllers/bulk_upload_lettings_logs_controller.rb +++ b/app/controllers/bulk_upload_lettings_logs_controller.rb @@ -28,7 +28,7 @@ private end def in_crossover_period? - FormHandler.instance.forms.values.any?(&:in_crossover_period?) + FormHandler.instance.in_crossover_period? end def form diff --git a/app/controllers/bulk_upload_sales_logs_controller.rb b/app/controllers/bulk_upload_sales_logs_controller.rb index 9c344cdf9..d0064d994 100644 --- a/app/controllers/bulk_upload_sales_logs_controller.rb +++ b/app/controllers/bulk_upload_sales_logs_controller.rb @@ -28,7 +28,7 @@ private end def in_crossover_period? - FormHandler.instance.forms.values.any?(&:in_crossover_period?) + FormHandler.instance.in_crossover_period? end def form diff --git a/app/models/form.rb b/app/models/form.rb index 022b9c261..fceb48b65 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -231,10 +231,6 @@ class Form end end - def in_crossover_period?(now: Time.zone.now) - ((end_date - 3.months) < now) && (now < end_date) - end - def inspect "#<#{self.class} @type=#{type} @name=#{name}>" end diff --git a/app/models/form_handler.rb b/app/models/form_handler.rb index 03de5e290..8b29d517d 100644 --- a/app/models/form_handler.rb +++ b/app/models/form_handler.rb @@ -63,8 +63,22 @@ class FormHandler form_mappings[current_collection_start_year - year] end + def in_crossover_period?(now: Time.zone.now) + lettings_in_crossover_period?(now:) || sales_in_crossover_period?(now:) + end + private + def lettings_in_crossover_period?(now:) + forms = lettings_forms.values + forms.count { |form| form.start_date < now && now < form.end_date } > 1 + end + + def sales_in_crossover_period?(now:) + forms = sales_forms.values + forms.count { |form| form.start_date < now && now < form.end_date } > 1 + end + def get_all_forms lettings_forms.merge(sales_forms) end diff --git a/app/models/forms/bulk_upload_lettings/prepare_your_file.rb b/app/models/forms/bulk_upload_lettings/prepare_your_file.rb index 31a332596..1a3326257 100644 --- a/app/models/forms/bulk_upload_lettings/prepare_your_file.rb +++ b/app/models/forms/bulk_upload_lettings/prepare_your_file.rb @@ -38,7 +38,7 @@ module Forms private def in_crossover_period? - FormHandler.instance.forms.values.any?(&:in_crossover_period?) + FormHandler.instance.in_crossover_period? end end end diff --git a/app/models/forms/bulk_upload_sales/prepare_your_file.rb b/app/models/forms/bulk_upload_sales/prepare_your_file.rb index 955301ac4..b096e2700 100644 --- a/app/models/forms/bulk_upload_sales/prepare_your_file.rb +++ b/app/models/forms/bulk_upload_sales/prepare_your_file.rb @@ -38,7 +38,7 @@ module Forms private def in_crossover_period? - FormHandler.instance.forms.values.any?(&:in_crossover_period?) + FormHandler.instance.in_crossover_period? end end end diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index b6efb7bbd..3ce84c40d 100644 --- a/spec/models/form_handler_spec.rb +++ b/spec/models/form_handler_spec.rb @@ -153,4 +153,20 @@ RSpec.describe FormHandler do expect(form.type).to eq("lettings") expect(form.start_date.year).to eq(2022) end + + # rubocop:disable RSpec/PredicateMatcher + describe "#in_crossover_period?" do + context "when not in overlapping period" do + it "returns false" do + expect(form_handler.in_crossover_period?(now: Date.new(2022, 1, 1))).to be_falsey + end + end + + context "when in overlapping period" do + it "returns true" do + expect(form_handler.in_crossover_period?(now: Date.new(2022, 6, 1))).to be_truthy + end + end + end + # rubocop:enable RSpec/PredicateMatcher end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index a9a0c9b40..110a521e2 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -237,40 +237,6 @@ RSpec.describe Form, type: :model do end end - describe "#in_crossover_period?" do - context "when now not specified" do - context "when after end period" do - subject(:form) { described_class.new(nil, 2022, [], "sales") } - - it "returns false" do - Timecop.freeze(2023, 8, 1) do - expect(form).not_to be_in_crossover_period - end - end - end - - context "when during crossover" do - subject(:form) { described_class.new(nil, 2022, [], "sales") } - - it "returns true" do - Timecop.freeze(2023, 6, 1) do - expect(form).to be_in_crossover_period - end - end - end - - context "when before crossover" do - subject(:form) { described_class.new(nil, 2022, [], "sales") } - - it "returns false" do - Timecop.freeze(2023, 1, 1) do - expect(form).not_to be_in_crossover_period - end - end - end - end - end - describe "when creating a lettings log", :aggregate_failures do it "creates a valid lettings form" do form = described_class.new("spec/fixtures/forms/2021_2022.json")