From 6ad1c1983caec7b494ba0a8f6b68fc35b0ed811b Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Thu, 5 Feb 2026 09:14:09 +0000 Subject: [PATCH] CLDC-NONE: Add a test to ensure future logs are completed (#3159) * CLDC-NONE: Add a test to ensure future logs are completed * fixup! CLDC-NONE: Add a test to ensure future logs are completed fix assertion order improve test labels --- app/helpers/collection_time_helper.rb | 4 ++ spec/shared/shared_log_examples.rb | 73 ++++++++++++++++++--------- 2 files changed, 54 insertions(+), 23 deletions(-) diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index 03fe556a2..ad7dac6a9 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -50,6 +50,10 @@ module CollectionTimeHelper next_collection_start_year + 1 end + def next_collection_start_date + current_collection_start_date + 1.year + end + def previous_collection_start_year current_collection_start_year - 1 end diff --git a/spec/shared/shared_log_examples.rb b/spec/shared/shared_log_examples.rb index 77be654d7..78a1b1aa8 100644 --- a/spec/shared/shared_log_examples.rb +++ b/spec/shared/shared_log_examples.rb @@ -2,30 +2,57 @@ require "rails_helper" # rubocop:disable RSpec/AnyInstance 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 + include CollectionTimeHelper - 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) + describe "status" do + [ + { + start_date: :current_collection_start_date, + label: "current", + }, + { + start_date: :next_collection_start_date, + label: "next", + }, + ].each do |scenario| + context "when creating a log for #{scenario[:label]} year" do + around do |example| + start_date = Timecop.return { send(scenario[:start_date]) } + + Timecop.freeze(start_date) do + Singleton.__init__(FormHandler) + example.run + end + end + + 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.in_progress?).to be(false) + expect(empty_log.not_started?).to be(true) + 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 + + # if this test starts failing, likely because a new question has been added + # and the :completed trait in spec/factories/lettings_log.rb (or sales_log.rb) + # needs to be updated to set the database col with that questions answer + 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 end end