From 9662b14bdefb2a112e096a9ef1e38d110781e0af Mon Sep 17 00:00:00 2001
From: Aaron Spencer <62190777+Airk0n@users.noreply.github.com>
Date: Thu, 29 Jun 2023 16:57:46 +0100
Subject: [PATCH 1/4] CLDC 2439: apply 22/23 rent range soft validation to
23/24 (#1718)
* CLDC-2439: min and max rent value check questions created
* CLDC-2439: Informative removed, check pages fixed.
* CLDC-2439: removed informative info tests and rent value check
* CLDC-2439: fixed informative missing test failure
* CLDC-2439: Text moved to en.yml
* CLDC-2439: tests added, copy moved to en.yml
* CLDC-2439: tests added, copy moved to en.yml
* CLDC-2439: content change for bulk upload errors WIP
* CLDC-2439: informative rendering change, content change, test updated
* CLDC-2439: failing test fix.
* CLDC-2439: display_informative_text test added for strings
* CLDC-2439: string as var in test
---
app/helpers/interruption_screen_helper.rb | 1 +
.../lettings/pages/max_rent_value_check.rb | 25 +++--------
.../lettings/pages/min_rent_value_check.rb | 11 +----
.../questions/max_rent_value_check.rb | 15 +++++++
...value_check.rb => min_rent_value_check.rb} | 3 +-
config/locales/en.yml | 4 +-
.../interruption_screen_helper_spec.rb | 7 +++
.../pages/max_rent_value_check_spec.rb | 4 --
.../pages/min_rent_value_check_spec.rb | 13 ------
.../questions/max_rent_value_check_spec.rb | 44 +++++++++++++++++++
.../questions/min_rent_value_check_spec.rb | 44 +++++++++++++++++++
.../lettings/year2023/row_parser_spec.rb | 2 +-
12 files changed, 125 insertions(+), 48 deletions(-)
create mode 100644 app/models/form/lettings/questions/max_rent_value_check.rb
rename app/models/form/lettings/questions/{rent_value_check.rb => min_rent_value_check.rb} (77%)
create mode 100644 spec/models/form/lettings/questions/max_rent_value_check_spec.rb
create mode 100644 spec/models/form/lettings/questions/min_rent_value_check_spec.rb
diff --git a/app/helpers/interruption_screen_helper.rb b/app/helpers/interruption_screen_helper.rb
index fc75f6f59..b28c7eaa9 100644
--- a/app/helpers/interruption_screen_helper.rb
+++ b/app/helpers/interruption_screen_helper.rb
@@ -1,5 +1,6 @@
module InterruptionScreenHelper
def display_informative_text(informative_text, log)
+ return informative_text if informative_text.is_a? String
return "" unless informative_text["arguments"]
translation_params = {}
diff --git a/app/models/form/lettings/pages/max_rent_value_check.rb b/app/models/form/lettings/pages/max_rent_value_check.rb
index ffb90f035..82aff8481 100644
--- a/app/models/form/lettings/pages/max_rent_value_check.rb
+++ b/app/models/form/lettings/pages/max_rent_value_check.rb
@@ -4,29 +4,18 @@ class Form::Lettings::Pages::MaxRentValueCheck < ::Form::Page
@depends_on = [{ "rent_in_soft_max_range?" => true }]
@title_text = {
"translation" => "soft_validations.rent.outside_range_title",
- "arguments" => [
- {
- "key" => "brent",
- "label" => true,
- "i18n_template" => "brent",
- },
- ],
- }
- @informative_text = {
- "translation" => "soft_validations.rent.max_hint_text",
- "arguments" => [
- {
- "key" => "field_formatted_as_currency",
- "arguments_for_key" => "soft_max_for_period",
- "i18n_template" => "soft_max_for_period",
- },
- ],
+ "arguments" => [{
+ "key" => "brent",
+ "label" => true,
+ "i18n_template" => "brent",
+ }],
}
+ @informative_text = I18n.t("soft_validations.rent.informative_text", higher_or_lower: "higher")
@check_answers_card_number = check_answers_card_number
end
def questions
- @questions ||= [Form::Lettings::Questions::RentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
+ @questions ||= [Form::Lettings::Questions::MaxRentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
end
def interruption_screen_question_ids
diff --git a/app/models/form/lettings/pages/min_rent_value_check.rb b/app/models/form/lettings/pages/min_rent_value_check.rb
index f66bc5a7b..b2bae4e8e 100644
--- a/app/models/form/lettings/pages/min_rent_value_check.rb
+++ b/app/models/form/lettings/pages/min_rent_value_check.rb
@@ -10,19 +10,12 @@ class Form::Lettings::Pages::MinRentValueCheck < ::Form::Page
"i18n_template" => "brent",
}],
}
- @informative_text = {
- "translation" => "soft_validations.rent.min_hint_text",
- "arguments" => [{
- "key" => "field_formatted_as_currency",
- "arguments_for_key" => "soft_min_for_period",
- "i18n_template" => "soft_min_for_period",
- }],
- }
+ @informative_text = I18n.t("soft_validations.rent.informative_text", higher_or_lower: "lower")
@check_answers_card_number = check_answers_card_number
end
def questions
- @questions ||= [Form::Lettings::Questions::RentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
+ @questions ||= [Form::Lettings::Questions::MinRentValueCheck.new(nil, nil, self, check_answers_card_number: @check_answers_card_number)]
end
def interruption_screen_question_ids
diff --git a/app/models/form/lettings/questions/max_rent_value_check.rb b/app/models/form/lettings/questions/max_rent_value_check.rb
new file mode 100644
index 000000000..6936e9e36
--- /dev/null
+++ b/app/models/form/lettings/questions/max_rent_value_check.rb
@@ -0,0 +1,15 @@
+class Form::Lettings::Questions::MaxRentValueCheck < ::Form::Question
+ def initialize(id, hsh, page, check_answers_card_number:)
+ super(id, hsh, page)
+ @id = "rent_value_check"
+ @check_answer_label = "Total rent confirmation"
+ @header = "Are you sure this is correct?"
+ @type = "interruption_screen"
+ @hint_text = I18n.t("soft_validations.rent.hint_text", higher_or_lower: "higher")
+ @check_answers_card_number = check_answers_card_number
+ @answer_options = ANSWER_OPTIONS
+ @hidden_in_check_answers = { "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] }
+ end
+
+ ANSWER_OPTIONS = { "0" => { "value" => "Yes" }, "1" => { "value" => "No" } }.freeze
+end
diff --git a/app/models/form/lettings/questions/rent_value_check.rb b/app/models/form/lettings/questions/min_rent_value_check.rb
similarity index 77%
rename from app/models/form/lettings/questions/rent_value_check.rb
rename to app/models/form/lettings/questions/min_rent_value_check.rb
index 6bca43e30..ad4111c61 100644
--- a/app/models/form/lettings/questions/rent_value_check.rb
+++ b/app/models/form/lettings/questions/min_rent_value_check.rb
@@ -1,10 +1,11 @@
-class Form::Lettings::Questions::RentValueCheck < ::Form::Question
+class Form::Lettings::Questions::MinRentValueCheck < ::Form::Question
def initialize(id, hsh, page, check_answers_card_number:)
super(id, hsh, page)
@id = "rent_value_check"
@check_answer_label = "Total rent confirmation"
@header = "Are you sure this is correct?"
@type = "interruption_screen"
+ @hint_text = I18n.t("soft_validations.rent.hint_text", higher_or_lower: "lower")
@check_answers_card_number = check_answers_card_number
@answer_options = ANSWER_OPTIONS
@hidden_in_check_answers = { "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] }
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 49aa2d6f1..1365fda3d 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -595,8 +595,8 @@ en:
over_soft_max_for_la_combined: "You told us the combined income of this household is %{combined_income}. This seems high. Are you sure this is correct?"
rent:
outside_range_title: "You told us the rent is %{brent}"
- min_hint_text: "The minimum rent expected for this type of property in this local authority is %{soft_min_for_period}."
- max_hint_text: "The maximum rent expected for this type of property in this local authority is %{soft_max_for_period}."
+ informative_text: "This is %{higher_or_lower} than we would expect."
+ hint_text: "Check the following:
- the decimal point
- the frequency, for example every week or every calendar month
- the rent type is correct, for example affordable or social rent
"
purchase_price:
title_text: "You told us the purchase price is %{value}"
hint_text: "This is %{higher_or_lower} than we would expect"
diff --git a/spec/helpers/interruption_screen_helper_spec.rb b/spec/helpers/interruption_screen_helper_spec.rb
index 6d9122f27..a100cf3ad 100644
--- a/spec/helpers/interruption_screen_helper_spec.rb
+++ b/spec/helpers/interruption_screen_helper_spec.rb
@@ -163,6 +163,13 @@ RSpec.describe InterruptionScreenHelper do
expect(display_informative_text(informative_text_hash, lettings_log)).to eq("You said this: £12,345.00")
end
end
+
+ context "when a string given" do
+ it "returns the string" do
+ test_string = "some words"
+ expect(display_informative_text(test_string, lettings_log)).to eq(test_string)
+ end
+ end
end
describe "display_title_text" do
diff --git a/spec/models/form/lettings/pages/max_rent_value_check_spec.rb b/spec/models/form/lettings/pages/max_rent_value_check_spec.rb
index 7bcc87913..4bbe3d18f 100644
--- a/spec/models/form/lettings/pages/max_rent_value_check_spec.rb
+++ b/spec/models/form/lettings/pages/max_rent_value_check_spec.rb
@@ -31,10 +31,6 @@ RSpec.describe Form::Lettings::Pages::MaxRentValueCheck, type: :model do
expect(page.title_text).to eq({ "arguments" => [{ "i18n_template" => "brent", "key" => "brent", "label" => true }], "translation" => "soft_validations.rent.outside_range_title" })
end
- it "has the correct informative_text" do
- expect(page.informative_text).to eq({ "arguments" => [{ "arguments_for_key" => "soft_max_for_period", "i18n_template" => "soft_max_for_period", "key" => "field_formatted_as_currency" }], "translation" => "soft_validations.rent.max_hint_text" })
- end
-
it "has the correct interruption_screen_question_ids" do
expect(page.interruption_screen_question_ids).to eq(%w[brent startdate uprn postcode_full la beds rent_type needstype])
end
diff --git a/spec/models/form/lettings/pages/min_rent_value_check_spec.rb b/spec/models/form/lettings/pages/min_rent_value_check_spec.rb
index bc3c6a081..613c907e9 100644
--- a/spec/models/form/lettings/pages/min_rent_value_check_spec.rb
+++ b/spec/models/form/lettings/pages/min_rent_value_check_spec.rb
@@ -40,19 +40,6 @@ RSpec.describe Form::Lettings::Pages::MinRentValueCheck, type: :model do
})
end
- it "has the correct informative_text" do
- expect(page.informative_text).to eq({
- "translation" => "soft_validations.rent.min_hint_text",
- "arguments" => [
- {
- "key" => "field_formatted_as_currency",
- "arguments_for_key" => "soft_min_for_period",
- "i18n_template" => "soft_min_for_period",
- },
- ],
- })
- end
-
it "has the correct interruption_screen_question_ids" do
expect(page.interruption_screen_question_ids).to eq(%w[brent startdate uprn postcode_full la beds rent_type needstype])
end
diff --git a/spec/models/form/lettings/questions/max_rent_value_check_spec.rb b/spec/models/form/lettings/questions/max_rent_value_check_spec.rb
new file mode 100644
index 000000000..0fea335c4
--- /dev/null
+++ b/spec/models/form/lettings/questions/max_rent_value_check_spec.rb
@@ -0,0 +1,44 @@
+require "rails_helper"
+
+RSpec.describe Form::Lettings::Questions::MaxRentValueCheck, type: :model do
+ subject(:question) { described_class.new(nil, question_definition, page, check_answers_card_number:) }
+
+ let(:question_definition) { nil }
+ let(:check_answers_card_number) { nil }
+ let(:page) { instance_double(Form::Page) }
+
+ it "has correct page" do
+ expect(question.page).to eq(page)
+ end
+
+ it "has the correct id" do
+ expect(question.id).to eq("rent_value_check")
+ end
+
+ it "has the correct header" do
+ expect(question.header).to eq("Are you sure this is correct?")
+ end
+
+ it "has the correct check_answer_label" do
+ expect(question.check_answer_label).to eq("Total rent confirmation")
+ end
+
+ it "has the correct type" do
+ expect(question.type).to eq("interruption_screen")
+ end
+
+ it "has the correct hint" do
+ expect(question.hint_text).to eq("Check the following:- the decimal point
- the frequency, for example every week or every calendar month
- the rent type is correct, for example affordable or social rent
")
+ end
+
+ it "has the correct answer_options" do
+ expect(question.answer_options).to eq({
+ "0" => { "value" => "Yes" },
+ "1" => { "value" => "No" },
+ })
+ end
+
+ it "has the correct hidden_in_check_answers" do
+ expect(question.hidden_in_check_answers).to eq({ "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] })
+ end
+end
diff --git a/spec/models/form/lettings/questions/min_rent_value_check_spec.rb b/spec/models/form/lettings/questions/min_rent_value_check_spec.rb
new file mode 100644
index 000000000..fec1e7d97
--- /dev/null
+++ b/spec/models/form/lettings/questions/min_rent_value_check_spec.rb
@@ -0,0 +1,44 @@
+require "rails_helper"
+
+RSpec.describe Form::Lettings::Questions::MinRentValueCheck, type: :model do
+ subject(:question) { described_class.new(nil, question_definition, page, check_answers_card_number:) }
+
+ let(:question_definition) { nil }
+ let(:check_answers_card_number) { nil }
+ let(:page) { instance_double(Form::Page) }
+
+ it "has correct page" do
+ expect(question.page).to eq(page)
+ end
+
+ it "has the correct id" do
+ expect(question.id).to eq("rent_value_check")
+ end
+
+ it "has the correct header" do
+ expect(question.header).to eq("Are you sure this is correct?")
+ end
+
+ it "has the correct check_answer_label" do
+ expect(question.check_answer_label).to eq("Total rent confirmation")
+ end
+
+ it "has the correct type" do
+ expect(question.type).to eq("interruption_screen")
+ end
+
+ it "has the correct hint" do
+ expect(question.hint_text).to eq("Check the following:- the decimal point
- the frequency, for example every week or every calendar month
- the rent type is correct, for example affordable or social rent
")
+ end
+
+ it "has the correct answer_options" do
+ expect(question.answer_options).to eq({
+ "0" => { "value" => "Yes" },
+ "1" => { "value" => "No" },
+ })
+ end
+
+ it "has the correct hidden_in_check_answers" do
+ expect(question.hidden_in_check_answers).to eq({ "depends_on" => [{ "rent_value_check" => 0 }, { "rent_value_check" => 1 }] })
+ end
+end
diff --git a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb
index 4df2757cd..f3a17ac44 100644
--- a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb
+++ b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb
@@ -1098,7 +1098,7 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do
it "populates with correct error message" do
expect(parser.errors.where(:field_128, category: :soft_validation).count).to be(1)
- expect(parser.errors.where(:field_128, category: :soft_validation).first.message).to eql("You told us the rent is £120.00 every week. The maximum rent expected for this type of property in this local authority is ££118.85 every week.")
+ expect(parser.errors.where(:field_128, category: :soft_validation).first.message).to eql("You told us the rent is £120.00 every week. This is higher than we would expect.")
end
end
end
From f7c1b05afcaea86e84c098789eee7478112d586a Mon Sep 17 00:00:00 2001
From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com>
Date: Thu, 29 Jun 2023 21:14:44 +0100
Subject: [PATCH 2/4] Fix interruption screen success banner (#1740)
* Filter out empty values and do not downcase nils
* Update tests
* refactor
---
app/controllers/form_controller.rb | 2 +-
.../check_answers_page_lettings_logs_spec.rb | 6 ++---
spec/fixtures/forms/2021_2022.json | 1 -
spec/requests/form_controller_spec.rb | 25 ++++++++++++++++++-
4 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb
index 0219b3c57..6270e0ac3 100644
--- a/app/controllers/form_controller.rb
+++ b/app/controllers/form_controller.rb
@@ -11,7 +11,7 @@ class FormController < ApplicationController
mandatory_questions_with_no_response = mandatory_questions_with_no_response(responses_for_page)
if mandatory_questions_with_no_response.empty? && @log.update(responses_for_page.merge(updated_by: current_user))
- flash[:notice] = "You have successfully updated #{@page.questions.map(&:check_answer_label).first.downcase}" if previous_interruption_screen_page_id.present?
+ flash[:notice] = "You have successfully updated #{@page.questions.map(&:check_answer_label).reject { |label| label.to_s.empty? }.first&.downcase}" if previous_interruption_screen_page_id.present?
redirect_to(successful_redirect_path)
else
mandatory_questions_with_no_response.map do |question|
diff --git a/spec/features/form/check_answers_page_lettings_logs_spec.rb b/spec/features/form/check_answers_page_lettings_logs_spec.rb
index 97a9ccbec..43f999094 100644
--- a/spec/features/form/check_answers_page_lettings_logs_spec.rb
+++ b/spec/features/form/check_answers_page_lettings_logs_spec.rb
@@ -72,7 +72,7 @@ RSpec.describe "Lettings Log Check Answers Page" do
it "has question headings based on the subsection" do
visit("/lettings-logs/#{id}/#{subsection}/check-answers")
- question_labels = ["Tenant code", "Lead tenant’s age", "Lead tenant’s gender identity", "Number of Household Members"]
+ question_labels = ["Tenant code", "Lead tenant’s age", "Number of Household Members"]
question_labels.each do |label|
expect(page).to have_content(label)
end
@@ -91,7 +91,7 @@ RSpec.describe "Lettings Log Check Answers Page" do
# This way only the links in the table will get picked up
it "has an answer link for questions missing an answer" do
visit("/lettings-logs/#{empty_lettings_log.id}/#{subsection}/check-answers?referrer=check_answers")
- assert_selector "a", text: /Answer (?!the missing questions)/, count: 5
+ assert_selector "a", text: /Answer (?!the missing questions)/, count: 4
assert_selector "a", text: "Change", count: 0
expect(page).to have_link("Answer", href: "/lettings-logs/#{empty_lettings_log.id}/person-1-age?referrer=check_answers")
end
@@ -99,7 +99,7 @@ RSpec.describe "Lettings Log Check Answers Page" do
it "has a change link for answered questions" do
fill_in_number_question(empty_lettings_log.id, "age1", 28, "person-1-age")
visit("/lettings-logs/#{empty_lettings_log.id}/#{subsection}/check-answers")
- assert_selector "a", text: /Answer (?!the missing questions)/, count: 4
+ assert_selector "a", text: /Answer (?!the missing questions)/, count: 3
assert_selector "a", text: "Change", count: 1
expect(page).to have_link("Change", href: "/lettings-logs/#{empty_lettings_log.id}/person-1-age?referrer=check_answers")
end
diff --git a/spec/fixtures/forms/2021_2022.json b/spec/fixtures/forms/2021_2022.json
index 5a400d095..300b658b6 100644
--- a/spec/fixtures/forms/2021_2022.json
+++ b/spec/fixtures/forms/2021_2022.json
@@ -57,7 +57,6 @@
"questions": {
"sex1": {
"check_answers_card_number": 1,
- "check_answer_label": "Lead tenant’s gender identity",
"header": "Which of these best describes the tenant’s gender identity?",
"type": "radio",
"answer_options": {
diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb
index a2c06c4f1..d8b1e7dad 100644
--- a/spec/requests/form_controller_spec.rb
+++ b/spec/requests/form_controller_spec.rb
@@ -546,7 +546,7 @@ RSpec.describe FormController, type: :request do
end
before do
- post "/lettings-logs/#{lettings_log.id}/#{page_id.dasherize}?referrer=interruption_screen", params:
+ post "/lettings-logs/#{lettings_log.id}/lead-tenant-age?referrer=interruption_screen", params:
end
it "redirects back to the soft validation page" do
@@ -560,6 +560,29 @@ RSpec.describe FormController, type: :request do
end
end
+ context "when the question was accessed from an interruption screen and it has no check answers" do
+ let(:params) do
+ {
+ id: lettings_log.id,
+ lettings_log: {
+ page: "person_1_gender",
+ sex1: "F",
+ interruption_page_id: "retirement_value_check",
+ },
+ }
+ end
+
+ before do
+ post "/lettings-logs/#{lettings_log.id}/lead-tenant-gender-identity?referrer=interruption_screen", params:
+ end
+
+ it "displays a success banner without crashing" do
+ follow_redirect!
+ follow_redirect!
+ expect(response.body).to include("You have successfully updated")
+ end
+ end
+
context "when requesting a soft validation page for validation that isn't triggering" do
before do
get "/lettings-logs/#{lettings_log.id}/retirement-value-check", headers: headers.merge({ "HTTP_REFERER" => referrer })
From f0a93e08556f16ba4b5c0f25ae93b0811ff49bc1 Mon Sep 17 00:00:00 2001
From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com>
Date: Fri, 30 Jun 2023 11:27:04 +0100
Subject: [PATCH 3/4] CLDC-2459 Update end date for new logs creation (#1716)
* Renme end_date to new_logs_end_date
* Display change buttons in CYA if the collection is still open for editing
* Allow navigating to question if the collection is still open for editing
* Allow logs to be edited if the date is before edit end date
* Update sales validation to allow editing existing logs
* update tests
* Update edit_end_date
* Update some test wording
* Update new logs end date
* tests
---
app/controllers/form_controller.rb | 2 +-
app/models/form.rb | 21 ++++-----
app/models/form_handler.rb | 14 +++++-
app/models/log.rb | 8 +++-
.../validations/sales/setup_validations.rb | 16 ++++++-
app/models/validations/setup_validations.rb | 16 ++++++-
.../lettings/year2022/csv_parser.rb | 2 +-
.../bulk_upload/sales/year2022/csv_parser.rb | 2 +-
.../form/_check_answers_summary_list.html.erb | 2 +-
docs/adr/adr-019-form-end-dates.md | 2 +-
.../bulk_upload_lettings_logs_spec.rb | 4 +-
.../form/accessible_autocomplete_spec.rb | 2 +-
.../check_answers_page_lettings_logs_spec.rb | 4 +-
spec/features/form/checkboxes_spec.rb | 2 +-
.../form/conditional_questions_spec.rb | 4 +-
spec/features/form/form_navigation_spec.rb | 4 +-
spec/features/form/page_routing_spec.rb | 2 +-
.../form/progressive_total_field_spec.rb | 2 +-
spec/features/form/saving_data_spec.rb | 2 +-
spec/features/form/tasklist_page_spec.rb | 2 +-
spec/features/form/validations_spec.rb | 4 +-
spec/helpers/locations_helper_spec.rb | 4 +-
spec/helpers/schemes_helper_spec.rb | 2 +-
spec/models/form_spec.rb | 4 +-
spec/models/lettings_log_spec.rb | 4 +-
spec/models/sales_log_spec.rb | 4 +-
.../sales/setup_validations_spec.rb | 46 +++++++++++++++++++
.../validations/setup_validations_spec.rb | 42 +++++++++++++++++
spec/requests/form_controller_spec.rb | 6 ++-
.../requests/lettings_logs_controller_spec.rb | 29 ++++++++++--
spec/requests/locations_controller_spec.rb | 21 ++++-----
spec/requests/schemes_controller_spec.rb | 2 +-
.../lettings/year2022/csv_parser_spec.rb | 2 +-
.../sales/year2022/csv_parser_spec.rb | 2 +-
34 files changed, 220 insertions(+), 65 deletions(-)
diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb
index 6270e0ac3..ac5b46acf 100644
--- a/app/controllers/form_controller.rb
+++ b/app/controllers/form_controller.rb
@@ -208,7 +208,7 @@ private
def check_collection_period
return unless @log
- redirect_to lettings_log_path(@log) unless @log.collection_period_open?
+ redirect_to lettings_log_path(@log) unless @log.collection_period_open_for_editing?
end
CONFIRMATION_PAGE_IDS = %w[uprn_confirmation].freeze
diff --git a/app/models/form.rb b/app/models/form.rb
index a13cdcfaa..68ed95fd8 100644
--- a/app/models/form.rb
+++ b/app/models/form.rb
@@ -1,16 +1,12 @@
class Form
attr_reader :form_definition, :sections, :subsections, :pages, :questions,
- :start_date, :end_date, :submission_deadline, :type, :name, :setup_definition,
+ :start_date, :new_logs_end_date, :submission_deadline, :type, :name, :setup_definition,
:setup_sections, :form_sections, :unresolved_log_redirect_page_id, :edit_end_date
def initialize(form_path, start_year = "", sections_in_form = [], type = "lettings")
if sales_or_start_year_after_2022?(type, start_year)
@start_date = Time.zone.local(start_year, 4, 1)
- @end_date = if start_year && start_year.to_i > 2022
- Time.zone.local(start_year + 1, 6, 9)
- else
- Time.zone.local(start_year + 1, 8, 7)
- end
+ @new_logs_end_date = Time.zone.local(start_year + 1, 12, 31) # this is to be manually updated each year when we want to stop users from creating new logs
@submission_deadline = if start_year && start_year.to_i > 2022
Time.zone.local(start_year + 1, 6, 7)
else
@@ -26,10 +22,11 @@ class Form
@form_definition = {
"form_type" => type,
"start_date" => start_date,
- "end_date" => end_date,
+ "end_date" => new_logs_end_date,
"sections" => sections,
}
@unresolved_log_redirect_page_id = "tenancy_start_date" if type == "lettings"
+ @edit_end_date = Time.zone.local(start_year + 1, 12, 31) # this is to be manually updated each year when we want to stop users from editing logs
else
raise "No form definition file exists for given year".freeze unless File.exist?(form_path)
@@ -42,12 +39,12 @@ class Form
@pages = subsections.flat_map(&:pages)
@questions = pages.flat_map(&:questions)
@start_date = Time.iso8601(form_definition["start_date"])
- @end_date = Time.iso8601(form_definition["end_date"])
- @submission_deadline = Time.zone.local(2023, 6, 9)
+ @new_logs_end_date = Time.zone.local(@start_date.year + 1, 12, 31)
+ @submission_deadline = Time.zone.local(@start_date.year + 1, 6, 9)
+ @edit_end_date = Time.zone.local(@start_date.year + 1, 12, 31)
@unresolved_log_redirect_page_id = form_definition["unresolved_log_redirect_page_id"]
end
- @edit_end_date = @end_date
- @name = "#{start_date.year}_#{end_date.year}_#{type}"
+ @name = "#{start_date.year}_#{new_logs_end_date.year}_#{type}"
end
def get_subsection(id)
@@ -304,7 +301,7 @@ class Form
end
def valid_start_date_for_form?(start_date)
- start_date >= self.start_date && start_date <= end_date
+ start_date >= self.start_date && start_date <= new_logs_end_date
end
def sales_or_start_year_after_2022?(type, start_year)
diff --git a/app/models/form_handler.rb b/app/models/form_handler.rb
index c596e8b54..7f858c645 100644
--- a/app/models/form_handler.rb
+++ b/app/models/form_handler.rb
@@ -109,12 +109,22 @@ class FormHandler
def lettings_in_crossover_period?(now: Time.zone.now)
forms = lettings_forms.values
- forms.count { |form| now.between?(form.start_date, form.end_date) } > 1
+ forms.count { |form| now.between?(form.start_date, form.new_logs_end_date) } > 1
+ end
+
+ def lettings_in_edit_crossover_period?(now: Time.zone.now)
+ forms = lettings_forms.values
+ forms.count { |form| now.between?(form.start_date, form.edit_end_date) } > 1
end
def sales_in_crossover_period?(now: Time.zone.now)
forms = sales_forms.values
- forms.count { |form| now.between?(form.start_date, form.end_date) } > 1
+ forms.count { |form| now.between?(form.start_date, form.new_logs_end_date) } > 1
+ end
+
+ def sales_in_edit_crossover_period?(now: Time.zone.now)
+ forms = sales_forms.values
+ forms.count { |form| now.between?(form.start_date, form.edit_end_date) } > 1
end
def use_fake_forms!(fake_forms = nil)
diff --git a/app/models/log.rb b/app/models/log.rb
index d394c0360..f2c67771a 100644
--- a/app/models/log.rb
+++ b/app/models/log.rb
@@ -94,7 +94,13 @@ class Log < ApplicationRecord
def collection_period_open?
return false if older_than_previous_collection_year?
- form.end_date > Time.zone.today
+ form.new_logs_end_date > Time.zone.today
+ end
+
+ def collection_period_open_for_editing?
+ return false if older_than_previous_collection_year?
+
+ form.edit_end_date > Time.zone.today
end
def blank_invalid_non_setup_fields!
diff --git a/app/models/validations/sales/setup_validations.rb b/app/models/validations/sales/setup_validations.rb
index 1618ac3d9..661b5b058 100644
--- a/app/models/validations/sales/setup_validations.rb
+++ b/app/models/validations/sales/setup_validations.rb
@@ -5,7 +5,13 @@ module Validations::Sales::SetupValidations
def validate_saledate_collection_year(record)
return unless record.saledate && date_valid?("saledate", record) && FeatureToggle.saledate_collection_window_validation_enabled?
- unless record.saledate.between?(active_collection_start_date, current_collection_end_date)
+ first_collection_start_date = if record.saledate_was.present?
+ editable_collection_start_date
+ else
+ active_collection_start_date
+ end
+
+ unless record.saledate.between?(first_collection_start_date, current_collection_end_date)
record.errors.add :saledate, saledate_validation_error_message
end
end
@@ -28,6 +34,14 @@ private
end
end
+ def editable_collection_start_date
+ if FormHandler.instance.sales_in_edit_crossover_period?
+ previous_collection_start_date
+ else
+ current_collection_start_date
+ end
+ end
+
def saledate_validation_error_message
current_end_year_long = current_collection_end_date.strftime("#{current_collection_end_date.day.ordinalize} %B %Y")
diff --git a/app/models/validations/setup_validations.rb b/app/models/validations/setup_validations.rb
index fd71dd4bc..bb76a7668 100644
--- a/app/models/validations/setup_validations.rb
+++ b/app/models/validations/setup_validations.rb
@@ -5,7 +5,13 @@ module Validations::SetupValidations
def validate_startdate_setup(record)
return unless record.startdate && date_valid?("startdate", record)
- unless record.startdate.between?(active_collection_start_date, current_collection_end_date)
+ first_collection_start_date = if record.startdate_was.present?
+ editable_collection_start_date
+ else
+ active_collection_start_date
+ end
+
+ unless record.startdate.between?(first_collection_start_date, current_collection_end_date)
record.errors.add :startdate, startdate_validation_error_message
end
end
@@ -60,6 +66,14 @@ private
end
end
+ def editable_collection_start_date
+ if FormHandler.instance.lettings_in_edit_crossover_period?
+ previous_collection_start_date
+ else
+ current_collection_start_date
+ end
+ end
+
def startdate_validation_error_message
current_end_year_long = current_collection_end_date.strftime("#{current_collection_end_date.day.ordinalize} %B %Y")
diff --git a/app/services/bulk_upload/lettings/year2022/csv_parser.rb b/app/services/bulk_upload/lettings/year2022/csv_parser.rb
index f21e92a24..9e672ade5 100644
--- a/app/services/bulk_upload/lettings/year2022/csv_parser.rb
+++ b/app/services/bulk_upload/lettings/year2022/csv_parser.rb
@@ -63,7 +63,7 @@ class BulkUpload::Lettings::Year2022::CsvParser
end
def wrong_template_for_year?
- !(first_record_start_date >= form.start_date && first_record_start_date <= form.end_date)
+ !(first_record_start_date >= form.start_date && first_record_start_date <= form.new_logs_end_date)
end
private
diff --git a/app/services/bulk_upload/sales/year2022/csv_parser.rb b/app/services/bulk_upload/sales/year2022/csv_parser.rb
index 939ff5689..d14284f50 100644
--- a/app/services/bulk_upload/sales/year2022/csv_parser.rb
+++ b/app/services/bulk_upload/sales/year2022/csv_parser.rb
@@ -45,7 +45,7 @@ class BulkUpload::Sales::Year2022::CsvParser
end
def wrong_template_for_year?
- !(first_record_sale_date >= form.start_date && first_record_sale_date <= form.end_date)
+ !(first_record_sale_date >= form.start_date && first_record_sale_date <= form.new_logs_end_date)
end
private
diff --git a/app/views/form/_check_answers_summary_list.html.erb b/app/views/form/_check_answers_summary_list.html.erb
index 513438afc..4d1bbd8a4 100644
--- a/app/views/form/_check_answers_summary_list.html.erb
+++ b/app/views/form/_check_answers_summary_list.html.erb
@@ -25,7 +25,7 @@
<% end %>
<% end %>
- <% if @log.collection_period_open? %>
+ <% if @log.collection_period_open_for_editing? %>
<% row.action(
text: question.action_text(@log),
href: action_href(@log, question.page.id, referrer),
diff --git a/docs/adr/adr-019-form-end-dates.md b/docs/adr/adr-019-form-end-dates.md
index f3f802693..6f7f87c66 100644
--- a/docs/adr/adr-019-form-end-dates.md
+++ b/docs/adr/adr-019-form-end-dates.md
@@ -13,5 +13,5 @@ Also, if incorrect data is found during QA process, data providers might be aske
To accommodate the different end dates, we will now store 3 different dates on the form definition:
- Submission deadline (submission_deadline) - this is the date displayed at the top of a completed log in lettings and sales - "You can review and make changes to this log until 9 June 2024.". Nothing happens on this date
-- New logs end date (end_date) - no new logs for that collection year can be submitted, but logs can be edited
+- New logs end date (new_logs_end_date) - no new logs for that collection year can be submitted, but logs can be edited
- Edit and delete logs end date (edit_end_date) - logs can no longer be edited or deleted. Completed logs can still be viewed. Materials / references to the collection year are removed.
diff --git a/spec/features/bulk_upload_lettings_logs_spec.rb b/spec/features/bulk_upload_lettings_logs_spec.rb
index 939518ac9..727e5462d 100644
--- a/spec/features/bulk_upload_lettings_logs_spec.rb
+++ b/spec/features/bulk_upload_lettings_logs_spec.rb
@@ -83,7 +83,7 @@ RSpec.describe "Bulk upload lettings log" do
context "when not it crossover period" do
it "shows journey with year option" do
- Timecop.freeze(2023, 10, 1) do
+ Timecop.freeze(2024, 1, 1) do
visit("/lettings-logs")
expect(page).to have_link("Upload lettings logs in bulk")
click_link("Upload lettings logs in bulk")
@@ -98,7 +98,7 @@ RSpec.describe "Bulk upload lettings log" do
context "when the collection year isn't 22/23" do
it "shows journey without the needstype" do
- Timecop.freeze(2023, 10, 1) do
+ Timecop.freeze(2024, 1, 1) do
visit("/lettings-logs")
expect(page).to have_link("Upload lettings logs in bulk")
click_link("Upload lettings logs in bulk")
diff --git a/spec/features/form/accessible_autocomplete_spec.rb b/spec/features/form/accessible_autocomplete_spec.rb
index 0ff03ec03..18f7c3411 100644
--- a/spec/features/form/accessible_autocomplete_spec.rb
+++ b/spec/features/form/accessible_autocomplete_spec.rb
@@ -28,7 +28,7 @@ RSpec.describe "Accessible Autocomplete" do
end
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
end
diff --git a/spec/features/form/check_answers_page_lettings_logs_spec.rb b/spec/features/form/check_answers_page_lettings_logs_spec.rb
index 43f999094..5506e53b1 100644
--- a/spec/features/form/check_answers_page_lettings_logs_spec.rb
+++ b/spec/features/form/check_answers_page_lettings_logs_spec.rb
@@ -51,8 +51,8 @@ RSpec.describe "Lettings Log Check Answers Page" do
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
- allow(fake_2021_2022_form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
+ allow(fake_2021_2022_form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
diff --git a/spec/features/form/checkboxes_spec.rb b/spec/features/form/checkboxes_spec.rb
index dae505bcf..3ad2ca0cf 100644
--- a/spec/features/form/checkboxes_spec.rb
+++ b/spec/features/form/checkboxes_spec.rb
@@ -24,7 +24,7 @@ RSpec.describe "Checkboxes" do
end
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
RequestHelper.stub_http_requests
sign_in user
end
diff --git a/spec/features/form/conditional_questions_spec.rb b/spec/features/form/conditional_questions_spec.rb
index f79b33191..ffa46dfaf 100644
--- a/spec/features/form/conditional_questions_spec.rb
+++ b/spec/features/form/conditional_questions_spec.rb
@@ -33,8 +33,8 @@ RSpec.describe "Form Conditional Questions" do
before do
sign_in user
- allow(sales_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(sales_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
diff --git a/spec/features/form/form_navigation_spec.rb b/spec/features/form/form_navigation_spec.rb
index 6fdec8366..9a9f14383 100644
--- a/spec/features/form/form_navigation_spec.rb
+++ b/spec/features/form/form_navigation_spec.rb
@@ -44,8 +44,8 @@ RSpec.describe "Form Navigation" do
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
- allow(fake_2021_2022_form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
+ allow(fake_2021_2022_form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
diff --git a/spec/features/form/page_routing_spec.rb b/spec/features/form/page_routing_spec.rb
index 98c370cff..e6c821221 100644
--- a/spec/features/form/page_routing_spec.rb
+++ b/spec/features/form/page_routing_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe "Form Page Routing" do
let(:validator) { lettings_log._validators[nil].first }
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
end
diff --git a/spec/features/form/progressive_total_field_spec.rb b/spec/features/form/progressive_total_field_spec.rb
index cbf50f206..a3c52569d 100644
--- a/spec/features/form/progressive_total_field_spec.rb
+++ b/spec/features/form/progressive_total_field_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe "Accessible Autocomplete" do
end
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
end
diff --git a/spec/features/form/saving_data_spec.rb b/spec/features/form/saving_data_spec.rb
index 0c7397511..c1d051a7e 100644
--- a/spec/features/form/saving_data_spec.rb
+++ b/spec/features/form/saving_data_spec.rb
@@ -37,7 +37,7 @@ RSpec.describe "Form Saving Data" do
end
before do
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
end
diff --git a/spec/features/form/tasklist_page_spec.rb b/spec/features/form/tasklist_page_spec.rb
index a97c7accd..5b7dd351f 100644
--- a/spec/features/form/tasklist_page_spec.rb
+++ b/spec/features/form/tasklist_page_spec.rb
@@ -54,7 +54,7 @@ RSpec.describe "Task List" do
before do
Timecop.freeze(Time.zone.local(2021, 5, 1))
setup_completed_log.update!(startdate: Time.zone.local(2021, 5, 1))
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
end
diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb
index 420114129..a14754e5e 100644
--- a/spec/features/form/validations_spec.rb
+++ b/spec/features/form/validations_spec.rb
@@ -42,8 +42,8 @@ RSpec.describe "validations" do
let(:id) { lettings_log.id }
before do
- allow(fake_2021_2022_form).to receive(:end_date).and_return(Time.zone.today + 1.day)
- allow(lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(fake_2021_2022_form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
+ allow(lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
sign_in user
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
diff --git a/spec/helpers/locations_helper_spec.rb b/spec/helpers/locations_helper_spec.rb
index 368833bd2..0fb304402 100644
--- a/spec/helpers/locations_helper_spec.rb
+++ b/spec/helpers/locations_helper_spec.rb
@@ -51,7 +51,7 @@ RSpec.describe LocationsHelper do
let(:location) { FactoryBot.create(:location, startdate: nil) }
before do
- Timecop.freeze(2022, 10, 10)
+ Timecop.freeze(2023, 10, 10)
end
after do
@@ -201,7 +201,7 @@ RSpec.describe LocationsHelper do
context "when viewing availability" do
context "with no deactivations" do
it "displays current collection start date as availability date if created_at is later than collection start date" do
- location.update!(startdate: nil, created_at: Time.zone.local(2023, 8, 16))
+ location.update!(startdate: nil, created_at: Time.zone.local(2024, 1, 16))
availability_attribute = display_location_attributes(location).find { |x| x[:name] == "Availability" }[:value]
expect(availability_attribute).to eq("Active from 1 April 2023")
diff --git a/spec/helpers/schemes_helper_spec.rb b/spec/helpers/schemes_helper_spec.rb
index c2350d428..95d3c78e3 100644
--- a/spec/helpers/schemes_helper_spec.rb
+++ b/spec/helpers/schemes_helper_spec.rb
@@ -5,7 +5,7 @@ RSpec.describe SchemesHelper do
let(:scheme) { FactoryBot.create(:scheme, created_at: Time.zone.today) }
before do
- Timecop.freeze(2022, 10, 10)
+ Timecop.freeze(2023, 1, 10)
end
after do
diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb
index 439cd24b1..c812f8172 100644
--- a/spec/models/form_spec.rb
+++ b/spec/models/form_spec.rb
@@ -371,7 +371,9 @@ RSpec.describe Form, type: :model do
expect(form.questions.count).to eq(13)
expect(form.questions.first.id).to eq("owning_organisation_id")
expect(form.start_date).to eq(Time.zone.parse("2022-04-01"))
- expect(form.end_date).to eq(Time.zone.parse("2023-08-07"))
+ expect(form.new_logs_end_date).to eq(Time.zone.parse("2023-12-31"))
+ expect(form.edit_end_date).to eq(Time.zone.parse("2023-12-31"))
+ expect(form.submission_deadline).to eq(Time.zone.parse("2023-06-09"))
expect(form.unresolved_log_redirect_page_id).to eq(nil)
end
diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb
index 74abfd3c2..f050e7fcd 100644
--- a/spec/models/lettings_log_spec.rb
+++ b/spec/models/lettings_log_spec.rb
@@ -3040,7 +3040,7 @@ RSpec.describe LettingsLog do
let(:startdate) { nil }
before do
- allow(log).to receive_message_chain(:form, :end_date).and_return(Time.zone.now + 1.day)
+ allow(log).to receive_message_chain(:form, :new_logs_end_date).and_return(Time.zone.now + 1.day)
end
it "returns true" do
@@ -3052,7 +3052,7 @@ RSpec.describe LettingsLog do
let(:startdate) { Time.zone.local(2020, 4, 1) }
before do
- allow(log).to receive_message_chain(:form, :end_date).and_return(Time.zone.now - 1.day)
+ allow(log).to receive_message_chain(:form, :new_logs_end_date).and_return(Time.zone.now - 1.day)
end
it "returns false" do
diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb
index f2337b84d..ef197235f 100644
--- a/spec/models/sales_log_spec.rb
+++ b/spec/models/sales_log_spec.rb
@@ -635,7 +635,7 @@ RSpec.describe SalesLog, type: :model do
let(:saledate) { nil }
before do
- allow(log).to receive_message_chain(:form, :end_date).and_return(Time.zone.now + 1.day)
+ allow(log).to receive_message_chain(:form, :new_logs_end_date).and_return(Time.zone.now + 1.day)
end
it "returns true" do
@@ -647,7 +647,7 @@ RSpec.describe SalesLog, type: :model do
let(:saledate) { Time.zone.local(2020, 4, 1) }
before do
- allow(log).to receive_message_chain(:form, :end_date).and_return(Time.zone.now - 1.day)
+ allow(log).to receive_message_chain(:form, :new_logs_end_date).and_return(Time.zone.now - 1.day)
end
it "returns false" do
diff --git a/spec/models/validations/sales/setup_validations_spec.rb b/spec/models/validations/sales/setup_validations_spec.rb
index 6f70e3f1e..ecbb7e0d3 100644
--- a/spec/models/validations/sales/setup_validations_spec.rb
+++ b/spec/models/validations/sales/setup_validations_spec.rb
@@ -105,6 +105,52 @@ RSpec.describe Validations::Sales::SetupValidations do
expect(record.errors[:saledate]).to include("Enter a date within the 23/24 or 24/25 collection years, which is between 1st April 2023 and 31st March 2025")
end
end
+
+ context "when current time is after the new logs end date but before edit end date for the previous period" do
+ let(:record) { build(:sales_log, saledate: Time.zone.local(2025, 4, 1)) }
+
+ before do
+ allow(Time).to receive(:now).and_return(Time.zone.local(2025, 1, 8))
+ end
+
+ it "cannot create new logs for the previous collection year" do
+ record.update!(saledate: nil)
+ record.saledate = Time.zone.local(2024, 1, 1)
+ setup_validator.validate_saledate_collection_year(record)
+ expect(record.errors["saledate"]).to include(match "Enter a date within the 24/25 collection year, which is between 1st April 2024 and 31st March 2025")
+ end
+
+ xit "can edit already created logs for the previous collection year" do
+ record.saledate = Time.zone.local(2024, 1, 2)
+ record.save!(validate: false)
+ record.saledate = Time.zone.local(2024, 1, 1)
+ setup_validator.validate_saledate_collection_year(record)
+ expect(record.errors["saledate"]).not_to include(match "Enter a date within the 24/25 collection year, which is between 1st April 2024 and 31st March 2025")
+ end
+ end
+
+ context "when after the new logs end date and after the edit end date for the previous period" do
+ let(:record) { build(:sales_log, saledate: Time.zone.local(2025, 4, 1)) }
+
+ before do
+ allow(Time).to receive(:now).and_return(Time.zone.local(2025, 1, 8))
+ end
+
+ it "cannot create new logs for the previous collection year" do
+ record.update!(saledate: nil)
+ record.saledate = Time.zone.local(2024, 1, 1)
+ setup_validator.validate_saledate_collection_year(record)
+ expect(record.errors["saledate"]).to include(match "Enter a date within the 24/25 collection year, which is between 1st April 2024 and 31st March 2025")
+ end
+
+ it "cannot edit already created logs for the previous collection year" do
+ record.saledate = Time.zone.local(2024, 1, 2)
+ record.save!(validate: false)
+ record.saledate = Time.zone.local(2024, 1, 1)
+ setup_validator.validate_saledate_collection_year(record)
+ expect(record.errors["saledate"]).to include(match "Enter a date within the 24/25 collection year, which is between 1st April 2024 and 31st March 2025")
+ end
+ end
end
end
diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb
index 51c157215..696667b43 100644
--- a/spec/models/validations/setup_validations_spec.rb
+++ b/spec/models/validations/setup_validations_spec.rb
@@ -85,6 +85,48 @@ RSpec.describe Validations::SetupValidations do
expect(record.errors["startdate"]).to include(match "Enter a date within the 23/24 collection year, which is between 1st April 2023 and 31st March 2024")
end
end
+
+ context "when after the new logs end date but before edit end date for the previous period" do
+ before do
+ allow(Time).to receive(:now).and_return(Time.zone.local(2024, 1, 8))
+ end
+
+ it "cannot create new logs for the previous collection year" do
+ record.update!(startdate: nil)
+ record.startdate = Time.zone.local(2023, 1, 1)
+ setup_validator.validate_startdate_setup(record)
+ expect(record.errors["startdate"]).to include(match "Enter a date within the 23/24 collection year, which is between 1st April 2023 and 31st March 2024")
+ end
+
+ xit "can edit already created logs for the previous collection year" do
+ record.startdate = Time.zone.local(2023, 1, 2)
+ record.save!(validate: false)
+ record.startdate = Time.zone.local(2023, 1, 1)
+ setup_validator.validate_startdate_setup(record)
+ expect(record.errors["startdate"]).not_to include(match "Enter a date within the 23/24 collection year, which is between 1st April 2023 and 31st March 2024")
+ end
+ end
+
+ context "when after the new logs end date and after the edit end date for the previous period" do
+ before do
+ allow(Time).to receive(:now).and_return(Time.zone.local(2024, 1, 8))
+ end
+
+ it "cannot create new logs for the previous collection year" do
+ record.update!(startdate: nil)
+ record.startdate = Time.zone.local(2023, 1, 1)
+ setup_validator.validate_startdate_setup(record)
+ expect(record.errors["startdate"]).to include(match "Enter a date within the 23/24 collection year, which is between 1st April 2023 and 31st March 2024")
+ end
+
+ it "cannot edit already created logs for the previous collection year" do
+ record.startdate = Time.zone.local(2023, 1, 2)
+ record.save!(validate: false)
+ record.startdate = Time.zone.local(2023, 1, 1)
+ setup_validator.validate_startdate_setup(record)
+ expect(record.errors["startdate"]).to include(match "Enter a date within the 23/24 collection year, which is between 1st April 2023 and 31st March 2024")
+ end
+ end
end
end
diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb
index d8b1e7dad..a74ffb026 100644
--- a/spec/requests/form_controller_spec.rb
+++ b/spec/requests/form_controller_spec.rb
@@ -31,7 +31,8 @@ RSpec.describe FormController, type: :request do
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
before do
- allow(fake_2021_2022_form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(fake_2021_2022_form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
+ allow(fake_2021_2022_form).to receive(:edit_end_date).and_return(Time.zone.today + 2.months)
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
@@ -786,7 +787,8 @@ RSpec.describe FormController, type: :request do
before do
completed_lettings_log.update!(ecstat1: 1, earnings: 130, hhmemb: 1) # we're not routing to that page, so it gets cleared?
allow(completed_lettings_log).to receive(:net_income_soft_validation_triggered?).and_return(true)
- allow(completed_lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(completed_lettings_log.form).to receive(:new_logs_end_date).and_return(Time.zone.today + 1.day)
+ allow(completed_lettings_log.form).to receive(:edit_end_date).and_return(Time.zone.today + 2.months)
post "/lettings-logs/#{completed_lettings_log.id}/net-income-value-check", params: interrupt_params, headers: headers.merge({ "HTTP_REFERER" => referrer })
end
diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb
index 50c4d6763..61664e81d 100644
--- a/spec/requests/lettings_logs_controller_spec.rb
+++ b/spec/requests/lettings_logs_controller_spec.rb
@@ -937,14 +937,14 @@ RSpec.describe LettingsLogsController, type: :request do
completed_lettings_log.reload
get "/lettings-logs/#{completed_lettings_log.id}", headers:, params: {}
- expect(completed_lettings_log.form.end_date).to eq(Time.zone.local(2023, 7, 1))
+ expect(completed_lettings_log.form.new_logs_end_date).to eq(Time.zone.local(2023, 12, 31))
expect(completed_lettings_log.status).to eq("completed")
expect(page).to have_link("review and make changes to this log", href: "/lettings-logs/#{completed_lettings_log.id}/review")
end
xit "displays a closed collection window message for previous collection year logs" do
get "/lettings-logs/#{completed_lettings_log.id}", headers:, params: {}
- expect(completed_lettings_log.form.end_date).to eq(Time.zone.local(2022, 7, 1))
+ expect(completed_lettings_log.form.new_logs_end_date).to eq(Time.zone.local(2022, 7, 1))
expect(completed_lettings_log.status).to eq("completed")
expect(page).to have_content("This log is from the 2021/2022 collection window, which is now closed.")
end
@@ -1095,6 +1095,29 @@ RSpec.describe LettingsLogsController, type: :request do
expect(page).not_to have_link("Answer")
end
+ context "when the edit end date is in the future" do
+ before do
+ Timecop.freeze(2022, 7, 5)
+ end
+
+ after do
+ Timecop.return
+ end
+
+ it "allows you to change the answers for previous collection year logs" do
+ get "/lettings-logs/#{completed_lettings_log.id}/setup/check-answers", headers: { "Accept" => "text/html" }, params: {}
+ expect(page).to have_link("Change")
+
+ get "/lettings-logs/#{completed_lettings_log.id}/income-and-benefits/check-answers", headers: { "Accept" => "text/html" }, params: {}
+ expect(page).to have_link("Change")
+ end
+
+ it "lets the user navigate to questions for previous collection year logs" do
+ get "/lettings-logs/#{completed_lettings_log.id}/needs-type", headers: { "Accept" => "text/html" }, params: {}
+ expect(response).to have_http_status(:ok)
+ end
+ end
+
it "does not let the user navigate to questions for previous collection year logs" do
get "/lettings-logs/#{completed_lettings_log.id}/needs-type", headers: { "Accept" => "text/html" }, params: {}
expect(response).to redirect_to("/lettings-logs/#{completed_lettings_log.id}")
@@ -1198,7 +1221,7 @@ RSpec.describe LettingsLogsController, type: :request do
let(:headers) { { "Accept" => "text/html" } }
before do
- allow(affected_lettings_log.form).to receive(:end_date).and_return(Time.zone.today + 1.day)
+ allow(affected_lettings_log.form).to receive(:edit_end_date).and_return(Time.zone.today + 1.day)
allow(user).to receive(:need_two_factor_authentication?).and_return(false)
sign_in user
end
diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb
index edc5dc452..48eb703ca 100644
--- a/spec/requests/locations_controller_spec.rb
+++ b/spec/requests/locations_controller_spec.rb
@@ -1401,7 +1401,7 @@ RSpec.describe LocationsController, type: :request do
let(:setup_locations) { nil }
before do
- Timecop.freeze(Time.utc(2022, 10, 10))
+ Timecop.freeze(Time.utc(2023, 10, 10))
sign_in user
add_deactivations
setup_locations
@@ -1608,7 +1608,7 @@ RSpec.describe LocationsController, type: :request do
end
end
- context "when the date is entered is before the beginning of current collection window" do
+ context "when the date entered is before the beginning of current collection window" do
let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "4", "deactivation_date(1i)": "2020" } } }
it "displays the new page with an error message" do
@@ -1656,9 +1656,9 @@ RSpec.describe LocationsController, type: :request do
end
context "when there is an earlier open deactivation" do
- let(:deactivation_date) { Time.zone.local(2022, 10, 10) }
- let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "8", "deactivation_date(2i)": "9", "deactivation_date(1i)": "2023" } } }
- let(:add_deactivations) { create(:location_deactivation_period, deactivation_date: Time.zone.local(2023, 6, 5), reactivation_date: nil, location:) }
+ let(:deactivation_date) { Time.zone.local(2023, 10, 10) }
+ let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "8", "deactivation_date(2i)": "9", "deactivation_date(1i)": "2024" } } }
+ let(:add_deactivations) { create(:location_deactivation_period, deactivation_date: Time.zone.local(2024, 6, 5), reactivation_date: nil, location:) }
it "redirects to the location page and updates the existing deactivation period" do
follow_redirect!
@@ -1667,14 +1667,13 @@ RSpec.describe LocationsController, type: :request do
expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
location.reload
expect(location.location_deactivation_periods.count).to eq(1)
- expect(location.location_deactivation_periods.first.deactivation_date).to eq(Time.zone.local(2023, 9, 8))
+ expect(location.location_deactivation_periods.first.deactivation_date).to eq(Time.zone.local(2024, 9, 8))
end
end
context "when there is a later open deactivation" do
- let(:deactivation_date) { Time.zone.local(2022, 10, 10) }
let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "8", "deactivation_date(2i)": "9", "deactivation_date(1i)": "2022" } } }
- let(:add_deactivations) { create(:location_deactivation_period, deactivation_date: Time.zone.local(2023, 6, 5), reactivation_date: nil, location:) }
+ let(:add_deactivations) { create(:location_deactivation_period, deactivation_date: Time.zone.local(2024, 6, 5), reactivation_date: nil, location:) }
it "redirects to the confirmation page" do
follow_redirect!
@@ -1833,7 +1832,7 @@ RSpec.describe LocationsController, type: :request do
let(:startdate) { Time.utc(2022, 9, 11) }
before do
- Timecop.freeze(Time.utc(2022, 9, 10))
+ Timecop.freeze(Time.utc(2023, 1, 10))
sign_in user
create(:location_deactivation_period, deactivation_date:, location:)
location.save!
@@ -1882,13 +1881,13 @@ RSpec.describe LocationsController, type: :request do
end
context "with other future date" do
- let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "14", "reactivation_date(2i)": "12", "reactivation_date(1i)": "2022" } } }
+ let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "14", "reactivation_date(2i)": "12", "reactivation_date(1i)": "2023" } } }
it "redirects to the location page and displays a success banner" do
expect(response).to redirect_to("/schemes/#{scheme.id}/locations/#{location.id}")
follow_redirect!
expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
- expect(page).to have_content("#{location.name} will reactivate on 14 December 2022")
+ expect(page).to have_content("#{location.name} will reactivate on 14 December 2023")
end
end
diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb
index 754d8cb22..f8aab4d40 100644
--- a/spec/requests/schemes_controller_spec.rb
+++ b/spec/requests/schemes_controller_spec.rb
@@ -1893,7 +1893,7 @@ RSpec.describe SchemesController, type: :request do
let(:setup_schemes) { nil }
before do
- Timecop.freeze(Time.utc(2022, 10, 10))
+ Timecop.freeze(Time.utc(2023, 10, 10))
sign_in user
setup_schemes
patch "/schemes/#{scheme.id}/new-deactivation", params:
diff --git a/spec/services/bulk_upload/lettings/year2022/csv_parser_spec.rb b/spec/services/bulk_upload/lettings/year2022/csv_parser_spec.rb
index 15d20e9b2..2cc3e3c9b 100644
--- a/spec/services/bulk_upload/lettings/year2022/csv_parser_spec.rb
+++ b/spec/services/bulk_upload/lettings/year2022/csv_parser_spec.rb
@@ -190,7 +190,7 @@ RSpec.describe BulkUpload::Lettings::Year2022::CsvParser do
describe "#wrong_template_for_year?" do
context "when 23/24 file with 23/24 data" do
- let(:log) { build(:lettings_log, :completed, startdate: Date.new(2023, 10, 1)) }
+ let(:log) { build(:lettings_log, :completed, startdate: Date.new(2024, 1, 1)) }
before do
file.write(BulkUpload::LettingsLogToCsv.new(log:, col_offset: 0).to_2023_csv_row)
diff --git a/spec/services/bulk_upload/sales/year2022/csv_parser_spec.rb b/spec/services/bulk_upload/sales/year2022/csv_parser_spec.rb
index c33f6cf2f..92fa563d8 100644
--- a/spec/services/bulk_upload/sales/year2022/csv_parser_spec.rb
+++ b/spec/services/bulk_upload/sales/year2022/csv_parser_spec.rb
@@ -122,7 +122,7 @@ RSpec.describe BulkUpload::Sales::Year2022::CsvParser do
let(:path) { file.path }
context "when 23/24 file with 23/24 data" do
- let(:log) { build(:sales_log, :completed, saledate: Date.new(2023, 10, 1)) }
+ let(:log) { build(:sales_log, :completed, saledate: Date.new(2024, 1, 1)) }
before do
file.write(BulkUpload::SalesLogToCsv.new(log:, col_offset: 0).to_2023_csv_row)
From b6a8b4d9bf72324b31524f0aefe9a44243bc7566 Mon Sep 17 00:00:00 2001
From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com>
Date: Fri, 30 Jun 2023 12:41:40 +0100
Subject: [PATCH 4/4] remove csv cron job (#1742)
---
config/sidekiq_cron_schedule.yml | 4 ----
1 file changed, 4 deletions(-)
diff --git a/config/sidekiq_cron_schedule.yml b/config/sidekiq_cron_schedule.yml
index 7c91706ab..6fa7165f0 100644
--- a/config/sidekiq_cron_schedule.yml
+++ b/config/sidekiq_cron_schedule.yml
@@ -1,7 +1,3 @@
-data_export_csv:
- cron: "every day at 4am"
- class: "DataExportCsvJob"
- queue: default
data_export_xml:
cron: "every day at 5am"
class: "DataExportXmlJob"