diff --git a/app/models/log.rb b/app/models/log.rb index 452aa67c6..c02fdb02d 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -139,9 +139,9 @@ class Log < ApplicationRecord def calculate_status return "deleted" if discarded_at.present? - if all_fields_completed? && errors.empty? + if all_subsections_completed? && errors.empty? "completed" - elsif all_fields_nil? + elsif all_subsections_unstarted? "not_started" else "in_progress" @@ -210,11 +210,11 @@ private self.status = calculate_status end - def all_fields_completed? + def all_subsections_completed? form.subsections.all? { |subsection| subsection.complete?(self) || subsection.not_displayed_in_tasklist?(self) } end - def all_fields_nil? + def all_subsections_unstarted? not_started_statuses = %i[not_started cannot_start_yet] form.subsections.all? { |subsection| not_started_statuses.include? subsection.status(self) } end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 696a8d400..b113e1c05 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -205,10 +205,9 @@ RSpec.describe Form, type: :model do let(:lettings_log) { build(:lettings_log, :completed, status: "in_progress") } let(:subsection) { form.get_subsection("setup") } - around do |example| + before do + Timecop.return FormHandler.instance.use_real_forms! - - example.run end it "should not raise a Stack Error" do diff --git a/spec/models/log_spec.rb b/spec/models/log_spec.rb index 0cba24086..80cc7f813 100644 --- a/spec/models/log_spec.rb +++ b/spec/models/log_spec.rb @@ -5,4 +5,27 @@ RSpec.describe Log, type: :model do expect(SalesLog).to be < described_class expect(LettingsLog).to be < described_class end + + describe "#calculate_status" do + it "returns the correct status for a completed sales log" do + complete_sales_log = create(:sales_log, :completed, status: nil) + expect(complete_sales_log.calculate_status).to eq "completed" + end + + it "returns the correct status for an in progress sales log" do + in_progress_sales_log = create(:sales_log, :in_progress, status: nil) + expect(in_progress_sales_log.calculate_status).to eq "in_progress" + end + + it "returns the correct status for a completed lettings log" do + complete_lettings_log = create(:lettings_log, :completed, status: nil) + binding.pry + expect(complete_lettings_log.calculate_status).to eq "completed" + end + + it "returns the correct status for an in progress lettings log" do + in_progress_lettings_log = create(:lettings_log, :in_progress, status: nil) + expect(in_progress_lettings_log.calculate_status).to eq "in_progress" + end + end end