Browse Source

Remove "startyear_endyear" forms from form handler

pull/875/head
Kat 3 years ago
parent
commit
2afc758ea9
  1. 4
      app/models/form_handler.rb
  2. 3
      spec/features/form/check_answers_page_spec.rb
  3. 3
      spec/features/form/conditional_questions_spec.rb
  4. 3
      spec/features/form/form_navigation_spec.rb
  5. 14
      spec/features/form/validations_spec.rb
  6. 3
      spec/helpers/conditional_questions_helper_spec.rb
  7. 3
      spec/helpers/question_attribute_helper_spec.rb
  8. 3
      spec/helpers/tasklist_helper_spec.rb
  9. 3
      spec/jobs/email_csv_job_spec.rb
  10. 3
      spec/models/form/page_spec.rb
  11. 3
      spec/models/form/question_spec.rb
  12. 3
      spec/models/form/section_spec.rb
  13. 3
      spec/models/form/subsection_spec.rb
  14. 16
      spec/models/form_handler_spec.rb
  15. 3
      spec/models/lettings_log_spec.rb
  16. 3
      spec/models/validations/financial_validations_spec.rb
  17. 3
      spec/models/validations/household_validations_spec.rb
  18. 3
      spec/models/validations/shared_validations_spec.rb
  19. 26
      spec/requests/form_controller_spec.rb
  20. 3
      spec/requests/lettings_logs_controller_spec.rb

4
app/models/form_handler.rb

@ -22,8 +22,7 @@ class FormHandler
sales_sections = [] # Add section classes here e.g. Form::Sales::Property::Sections::PropertyInformation 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") 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") 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 } } "previous_sales" => { "form" => previous_form, "type" => "sales", "start_year" => previous_form.start_date.year } }
end end
@ -34,7 +33,6 @@ class FormHandler
form_name = File.basename(form_path, ".json") form_name = File.basename(form_path, ".json")
form = Form.new(form_path, form_name) form = Form.new(form_path, form_name)
lettings_form_definition = { "form" => form, "type" => "lettings", "start_year" => form.start_date.year } 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_mappings = { 0 => "current_lettings", 1 => "previous_lettings", -1 => "next_lettings" }
form_to_set = form_mappings[current_collection_start_year - form.start_date.year] form_to_set = form_mappings[current_collection_start_year - form.start_date.year]

3
spec/features/form/check_answers_page_spec.rb

@ -39,10 +39,11 @@ RSpec.describe "Form Check Answers Page" do
) )
end end
let(:id) { lettings_log.id } let(:id) { lettings_log.id }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before do before do
sign_in user 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 end
context "when the user needs to check their answers for a subsection" do context "when the user needs to check their answers for a subsection" do

3
spec/features/form/conditional_questions_spec.rb

@ -13,10 +13,11 @@ RSpec.describe "Form Conditional Questions" do
) )
end end
let(:id) { lettings_log.id } let(:id) { lettings_log.id }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before do before do
sign_in user 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 end
context "with a page where some questions are only conditionally shown, depending on how you answer the first question" do context "with a page where some questions are only conditionally shown, depending on how you answer the first question" do

3
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" }, hhmemb: { type: "numeric", answer: 1, path: "household-number-of-members" },
} }
end end
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before do before do
sign_in user 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 end
describe "Create a new lettings log" do describe "Create a new lettings log" do

14
spec/features/form/validations_spec.rb

@ -2,12 +2,7 @@ require "rails_helper"
require_relative "helpers" require_relative "helpers"
RSpec.describe "validations" do RSpec.describe "validations" do
before do let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
sign_in user
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(FormHandler.instance.forms["2021_2022"]["form"])
end
include Helpers
let(:user) { FactoryBot.create(:user) } let(:user) { FactoryBot.create(:user) }
let(:lettings_log) do let(:lettings_log) do
FactoryBot.create( FactoryBot.create(
@ -36,6 +31,13 @@ RSpec.describe "validations" do
end end
let(:id) { lettings_log.id } 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 describe "Question validation" do
context "when the tenant age is invalid" do context "when the tenant age is invalid" do
it "shows validation for under 0" do it "shows validation for under 0" do

3
spec/helpers/conditional_questions_helper_spec.rb

@ -3,9 +3,10 @@ require "rails_helper"
RSpec.describe ConditionalQuestionsHelper do RSpec.describe ConditionalQuestionsHelper do
let(:lettings_log) { FactoryBot.build(:lettings_log) } let(:lettings_log) { FactoryBot.build(:lettings_log) }
let(:page) { lettings_log.form.get_page("armed_forces") } 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 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 end
describe "conditional questions for page" do describe "conditional questions for page" do

3
spec/helpers/question_attribute_helper_spec.rb

@ -4,9 +4,10 @@ RSpec.describe QuestionAttributeHelper do
let(:lettings_log) { FactoryBot.build(:lettings_log) } let(:lettings_log) { FactoryBot.build(:lettings_log) }
let(:form) { lettings_log.form } let(:form) { lettings_log.form }
let(:questions) { form.get_page("rent").questions } let(:questions) { form.get_page("rent").questions }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before 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 end
describe "html attributes" do describe "html attributes" do

3
spec/helpers/tasklist_helper_spec.rb

@ -3,9 +3,10 @@ require "rails_helper"
RSpec.describe TasklistHelper do RSpec.describe TasklistHelper do
let(:empty_lettings_log) { FactoryBot.create(:lettings_log) } let(:empty_lettings_log) { FactoryBot.create(:lettings_log) }
let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1) } 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 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 end
describe "get next incomplete section" do describe "get next incomplete section" do

3
spec/jobs/email_csv_job_spec.rb

@ -9,9 +9,10 @@ describe EmailCsvJob do
let(:user) { FactoryBot.create(:user) } let(:user) { FactoryBot.create(:user) }
let(:organisation) { user.organisation } let(:organisation) { user.organisation }
let(:other_organisation) { FactoryBot.create(:organisation) } let(:other_organisation) { FactoryBot.create(:organisation) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before 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 end
context "when a log exists" do context "when a log exists" do

3
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(:subsection) { Form::Subsection.new(subsection_id, subsection_definition, section) }
let(:page_id) { "net_income" } let(:page_id) { "net_income" }
let(:page_definition) { subsection_definition["pages"][page_id] } 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 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 end
it "has an id" do it "has an id" do

3
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(:page) { Form::Page.new(page_id, page_definition, subsection) }
let(:question_id) { "earnings" } let(:question_id) { "earnings" }
let(:question_definition) { page_definition["questions"][question_id] } 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 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 end
it "has an id" do it "has an id" do

3
spec/models/form/section_spec.rb

@ -7,9 +7,10 @@ RSpec.describe Form::Section, type: :model do
let(:form) { lettings_log.form } let(:form) { lettings_log.form }
let(:section_id) { "household" } let(:section_id) { "household" }
let(:section_definition) { form.form_definition["sections"][section_id] } 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 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 end
it "has an id" do it "has an id" do

3
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(:section) { Form::Section.new(section_id, section_definition, form) }
let(:subsection_id) { "household_characteristics" } let(:subsection_id) { "household_characteristics" }
let(:subsection_definition) { section_definition["subsections"][subsection_id] } 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 before do
RequestHelper.stub_http_requests 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 end
it "has an id" do it "has an id" do

16
spec/models/form_handler_spec.rb

@ -32,17 +32,11 @@ RSpec.describe FormHandler do
it "is able to load all the forms" do it "is able to load all the forms" do
all_forms = form_handler.forms all_forms = form_handler.forms
expect(all_forms.count).to be >= 1 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
end end
describe "Get specific form" do 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 it "is able to load a current lettings form" do
form = form_handler.get_form("current_lettings") form = form_handler.get_form("current_lettings")
expect(form).to be_a(Form) expect(form).to be_a(Form)
@ -80,12 +74,8 @@ RSpec.describe FormHandler do
it "loads the form once at boot time" do it "loads the form once at boot time" do
form_handler = described_class.instance form_handler = described_class.instance
expect(Form).not_to receive(:new).with(:any, test_form_name) expect(Form).not_to receive(:new).with(:any, "current_sales")
expect(form_handler.get_form(test_form_name)).to be_a(Form) expect(form_handler.get_form("current_sales")).to be_a(Form)
end
it "can get a saleslog form" do
expect(form_handler.get_form("2022_2023_sales")).to be_a(Form)
end end
it "keeps track of form type and start year" do it "keeps track of form type and start year" do

3
spec/models/lettings_log_spec.rb

@ -4,9 +4,10 @@ RSpec.describe LettingsLog do
let(:owning_organisation) { FactoryBot.create(:organisation) } let(:owning_organisation) { FactoryBot.create(:organisation) }
let(:different_managing_organisation) { FactoryBot.create(:organisation) } let(:different_managing_organisation) { FactoryBot.create(:organisation) }
let(:created_by_user) { FactoryBot.create(:user) } let(:created_by_user) { FactoryBot.create(:user) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before 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 end
it "inherits from log" do it "inherits from log" do

3
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(:validator_class) { Class.new { include Validations::FinancialValidations } }
let(:record) { FactoryBot.create(:lettings_log) } let(:record) { FactoryBot.create(:lettings_log) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before 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 end
describe "earnings and income frequency" do describe "earnings and income frequency" do

3
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(:validator_class) { Class.new { include Validations::HouseholdValidations } }
let(:record) { FactoryBot.create(:lettings_log) } let(:record) { FactoryBot.create(:lettings_log) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before 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 end
describe "reasonable preference validations" do describe "reasonable preference validations" do

3
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(:validator_class) { Class.new { include Validations::SharedValidations } }
let(:record) { FactoryBot.create(:lettings_log) } 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 describe "numeric min max validations" do
before 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 end
context "when validating age" do context "when validating age" do

26
spec/requests/form_controller_spec.rb

@ -5,13 +5,6 @@ RSpec.describe FormController, type: :request do
let(:user) { FactoryBot.create(:user) } let(:user) { FactoryBot.create(:user) }
let(:organisation) { user.organisation } let(:organisation) { user.organisation }
let(:other_organisation) { FactoryBot.create(: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 let!(:unauthorized_lettings_log) do
FactoryBot.create( FactoryBot.create(
:lettings_log, :lettings_log,
@ -38,12 +31,21 @@ RSpec.describe FormController, type: :request do
) )
end end
let(:headers) { { "Accept" => "text/html" } } let(:headers) { { "Accept" => "text/html" } }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before 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 end
context "when a user is not signed in" do 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 describe "GET" do
it "does not let you get lettings logs pages you don't have access to" 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: {} get "/lettings-logs/#{lettings_log.id}/person-1-age", headers: headers, params: {}
@ -65,6 +67,14 @@ RSpec.describe FormController, type: :request do
end end
context "when a user is signed in" do 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 before do
allow(user).to receive(:need_two_factor_authentication?).and_return(false) allow(user).to receive(:need_two_factor_authentication?).and_return(false)
sign_in user sign_in user

3
spec/requests/lettings_logs_controller_spec.rb

@ -18,12 +18,13 @@ RSpec.describe LettingsLogsController, type: :request do
"Authorization" => basic_credentials, "Authorization" => basic_credentials,
} }
end end
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json", "2021_2022") }
before do before do
allow(ENV).to receive(:[]) allow(ENV).to receive(:[])
allow(ENV).to receive(:[]).with("API_USER").and_return(api_username) allow(ENV).to receive(:[]).with("API_USER").and_return(api_username)
allow(ENV).to receive(:[]).with("API_KEY").and_return(api_password) 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 end
describe "POST #create" do describe "POST #create" do

Loading…
Cancel
Save