diff --git a/app/models/form_handler.rb b/app/models/form_handler.rb index 65106c8f4..7c7e207a6 100644 --- a/app/models/form_handler.rb +++ b/app/models/form_handler.rb @@ -22,8 +22,7 @@ class FormHandler sales_sections = [] # Add section classes here e.g. Form::Sales::Property::Sections::PropertyInformation current_form = Form.new(nil, "#{current_collection_start_year}_#{current_collection_start_year + 1}_sales", sales_sections, "sales") previous_form = Form.new(nil, "#{current_collection_start_year - 1}_#{current_collection_start_year}_sales", sales_sections, "sales") - { "2022_2023_sales" => { "form" => Form.new(nil, "2022_2023_sales", sales_sections, "sales"), "type" => "sales" }, - "current_sales" => { "form" => current_form, "type" => "sales", "start_year" => current_form.start_date.year }, + { "current_sales" => { "form" => current_form, "type" => "sales", "start_year" => current_form.start_date.year }, "previous_sales" => { "form" => previous_form, "type" => "sales", "start_year" => previous_form.start_date.year } } end @@ -34,7 +33,6 @@ class FormHandler form_name = File.basename(form_path, ".json") form = Form.new(form_path, form_name) lettings_form_definition = { "form" => form, "type" => "lettings", "start_year" => form.start_date.year } - forms[form_name] = lettings_form_definition form_mappings = { 0 => "current_lettings", 1 => "previous_lettings", -1 => "next_lettings" } form_to_set = form_mappings[current_collection_start_year - form.start_date.year] diff --git a/spec/features/form/check_answers_page_spec.rb b/spec/features/form/check_answers_page_spec.rb index c15f12c4d..359b94210 100644 --- a/spec/features/form/check_answers_page_spec.rb +++ b/spec/features/form/check_answers_page_spec.rb @@ -39,10 +39,11 @@ RSpec.describe "Form Check Answers Page" do ) end let(:id) { lettings_log.id } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do sign_in user - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end context "when the user needs to check their answers for a subsection" do diff --git a/spec/features/form/conditional_questions_spec.rb b/spec/features/form/conditional_questions_spec.rb index 751cfc68f..30eb981ff 100644 --- a/spec/features/form/conditional_questions_spec.rb +++ b/spec/features/form/conditional_questions_spec.rb @@ -13,10 +13,11 @@ RSpec.describe "Form Conditional Questions" do ) end let(:id) { lettings_log.id } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do sign_in user - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end context "with a page where some questions are only conditionally shown, depending on how you answer the first question" do diff --git a/spec/features/form/form_navigation_spec.rb b/spec/features/form/form_navigation_spec.rb index 048079998..060a87be3 100644 --- a/spec/features/form/form_navigation_spec.rb +++ b/spec/features/form/form_navigation_spec.rb @@ -32,10 +32,11 @@ RSpec.describe "Form Navigation" do hhmemb: { type: "numeric", answer: 1, path: "household-number-of-members" }, } end + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do sign_in user - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "Create a new lettings log" do diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb index 1fa227b1d..bc73881a8 100644 --- a/spec/features/form/validations_spec.rb +++ b/spec/features/form/validations_spec.rb @@ -2,12 +2,7 @@ require "rails_helper" require_relative "helpers" RSpec.describe "validations" do - before do - sign_in user - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) - end - - include Helpers + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } let(:user) { FactoryBot.create(:user) } let(:lettings_log) do FactoryBot.create( @@ -36,6 +31,13 @@ RSpec.describe "validations" do end let(:id) { lettings_log.id } + before do + sign_in user + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) + end + + include Helpers + describe "Question validation" do context "when the tenant age is invalid" do it "shows validation for under 0" do diff --git a/spec/helpers/conditional_questions_helper_spec.rb b/spec/helpers/conditional_questions_helper_spec.rb index c18787f80..84d384b30 100644 --- a/spec/helpers/conditional_questions_helper_spec.rb +++ b/spec/helpers/conditional_questions_helper_spec.rb @@ -3,9 +3,10 @@ require "rails_helper" RSpec.describe ConditionalQuestionsHelper do let(:lettings_log) { FactoryBot.build(:lettings_log) } let(:page) { lettings_log.form.get_page("armed_forces") } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "conditional questions for page" do diff --git a/spec/helpers/question_attribute_helper_spec.rb b/spec/helpers/question_attribute_helper_spec.rb index d7f42e394..8c6be783f 100644 --- a/spec/helpers/question_attribute_helper_spec.rb +++ b/spec/helpers/question_attribute_helper_spec.rb @@ -4,9 +4,10 @@ RSpec.describe QuestionAttributeHelper do let(:lettings_log) { FactoryBot.build(:lettings_log) } let(:form) { lettings_log.form } let(:questions) { form.get_page("rent").questions } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "html attributes" do diff --git a/spec/helpers/tasklist_helper_spec.rb b/spec/helpers/tasklist_helper_spec.rb index 7f5fad137..cda17365d 100644 --- a/spec/helpers/tasklist_helper_spec.rb +++ b/spec/helpers/tasklist_helper_spec.rb @@ -3,9 +3,10 @@ require "rails_helper" RSpec.describe TasklistHelper do let(:empty_lettings_log) { FactoryBot.create(:lettings_log) } let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1) } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "get next incomplete section" do diff --git a/spec/jobs/email_csv_job_spec.rb b/spec/jobs/email_csv_job_spec.rb index d248d3dfb..f3c62067e 100644 --- a/spec/jobs/email_csv_job_spec.rb +++ b/spec/jobs/email_csv_job_spec.rb @@ -9,9 +9,10 @@ describe EmailCsvJob do let(:user) { FactoryBot.create(:user) } let(:organisation) { user.organisation } let(:other_organisation) { FactoryBot.create(:organisation) } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end context "when a log exists" do diff --git a/spec/models/form/page_spec.rb b/spec/models/form/page_spec.rb index ec1adff7a..364bb374d 100644 --- a/spec/models/form/page_spec.rb +++ b/spec/models/form/page_spec.rb @@ -14,9 +14,10 @@ RSpec.describe Form::Page, type: :model do let(:subsection) { Form::Subsection.new(subsection_id, subsection_definition, section) } let(:page_id) { "net_income" } let(:page_definition) { subsection_definition["pages"][page_id] } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end it "has an id" do diff --git a/spec/models/form/question_spec.rb b/spec/models/form/question_spec.rb index 128bab12f..dbaa92376 100644 --- a/spec/models/form/question_spec.rb +++ b/spec/models/form/question_spec.rb @@ -16,9 +16,10 @@ RSpec.describe Form::Question, type: :model do let(:page) { Form::Page.new(page_id, page_definition, subsection) } let(:question_id) { "earnings" } let(:question_definition) { page_definition["questions"][question_id] } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end it "has an id" do diff --git a/spec/models/form/section_spec.rb b/spec/models/form/section_spec.rb index b4c7d7952..087edd35b 100644 --- a/spec/models/form/section_spec.rb +++ b/spec/models/form/section_spec.rb @@ -7,9 +7,10 @@ RSpec.describe Form::Section, type: :model do let(:form) { lettings_log.form } let(:section_id) { "household" } let(:section_definition) { form.form_definition["sections"][section_id] } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end it "has an id" do diff --git a/spec/models/form/subsection_spec.rb b/spec/models/form/subsection_spec.rb index 49ea1ec61..9d9dfff26 100644 --- a/spec/models/form/subsection_spec.rb +++ b/spec/models/form/subsection_spec.rb @@ -11,10 +11,11 @@ RSpec.describe Form::Subsection, type: :model do let(:section) { Form::Section.new(section_id, section_definition, form) } let(:subsection_id) { "household_characteristics" } let(:subsection_definition) { section_definition["subsections"][subsection_id] } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do RequestHelper.stub_http_requests - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end it "has an id" do diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index ef8a05ad8..94097fb9b 100644 --- a/spec/models/form_handler_spec.rb +++ b/spec/models/form_handler_spec.rb @@ -32,17 +32,11 @@ RSpec.describe FormHandler do it "is able to load all the forms" do all_forms = form_handler.forms expect(all_forms.count).to be >= 1 - expect(all_forms[test_form_name]["form"]).to be_a(Form) + expect(all_forms["current_sales"]["form"]).to be_a(Form) end end describe "Get specific form" do - it "is able to load a specific form" do - form = form_handler.get_form(test_form_name) - expect(form).to be_a(Form) - expect(form.pages.count).to eq(45) - end - it "is able to load a current lettings form" do form = form_handler.get_form("current_lettings") expect(form).to be_a(Form) @@ -80,12 +74,8 @@ RSpec.describe FormHandler do it "loads the form once at boot time" do form_handler = described_class.instance - expect(Form).not_to receive(:new).with(:any, test_form_name) - expect(form_handler.get_form(test_form_name)).to be_a(Form) - end - - it "can get a saleslog form" do - expect(form_handler.get_form("2022_2023_sales")).to be_a(Form) + expect(Form).not_to receive(:new).with(:any, "current_sales") + expect(form_handler.get_form("current_sales")).to be_a(Form) end it "keeps track of form type and start year" do diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index a0d9e620a..6ab2ea673 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -4,9 +4,10 @@ RSpec.describe LettingsLog do let(:owning_organisation) { FactoryBot.create(:organisation) } let(:different_managing_organisation) { FactoryBot.create(:organisation) } let(:created_by_user) { FactoryBot.create(:user) } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end it "inherits from log" do diff --git a/spec/models/validations/financial_validations_spec.rb b/spec/models/validations/financial_validations_spec.rb index 478b73783..2629287ff 100644 --- a/spec/models/validations/financial_validations_spec.rb +++ b/spec/models/validations/financial_validations_spec.rb @@ -5,9 +5,10 @@ RSpec.describe Validations::FinancialValidations do let(:validator_class) { Class.new { include Validations::FinancialValidations } } let(:record) { FactoryBot.create(:lettings_log) } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "earnings and income frequency" do diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index 0e070e3ff..348483867 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -5,9 +5,10 @@ RSpec.describe Validations::HouseholdValidations do let(:validator_class) { Class.new { include Validations::HouseholdValidations } } let(:record) { FactoryBot.create(:lettings_log) } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "reasonable preference validations" do diff --git a/spec/models/validations/shared_validations_spec.rb b/spec/models/validations/shared_validations_spec.rb index b92d49be3..831569f1b 100644 --- a/spec/models/validations/shared_validations_spec.rb +++ b/spec/models/validations/shared_validations_spec.rb @@ -5,10 +5,11 @@ RSpec.describe Validations::SharedValidations do let(:validator_class) { Class.new { include Validations::SharedValidations } } let(:record) { FactoryBot.create(:lettings_log) } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } describe "numeric min max validations" do before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end context "when validating age" do diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index 9e48e6724..9c33b6edf 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -5,13 +5,6 @@ RSpec.describe FormController, type: :request do let(:user) { FactoryBot.create(:user) } let(:organisation) { user.organisation } let(:other_organisation) { FactoryBot.create(:organisation) } - let!(:lettings_log) do - FactoryBot.create( - :lettings_log, - owning_organisation: organisation, - managing_organisation: organisation, - ) - end let!(:unauthorized_lettings_log) do FactoryBot.create( :lettings_log, @@ -38,12 +31,21 @@ RSpec.describe FormController, type: :request do ) end let(:headers) { { "Accept" => "text/html" } } + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end context "when a user is not signed in" do + let!(:lettings_log) do + FactoryBot.create( + :lettings_log, + owning_organisation: organisation, + managing_organisation: organisation, + ) + end + describe "GET" do it "does not let you get lettings logs pages you don't have access to" do get "/lettings-logs/#{lettings_log.id}/person-1-age", headers: headers, params: {} @@ -65,6 +67,14 @@ RSpec.describe FormController, type: :request do end context "when a user is signed in" do + let!(:lettings_log) do + FactoryBot.create( + :lettings_log, + owning_organisation: organisation, + managing_organisation: organisation, + ) + end + before do allow(user).to receive(:need_two_factor_authentication?).and_return(false) sign_in user diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index d03d7c01c..9d5493630 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -18,12 +18,13 @@ RSpec.describe LettingsLogsController, type: :request do "Authorization" => basic_credentials, } end + let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") } before do allow(ENV).to receive(:[]) allow(ENV).to receive(:[]).with("API_USER").and_return(api_username) allow(ENV).to receive(:[]).with("API_KEY").and_return(api_password) - allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"]) + allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) end describe "POST #create" do