Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
5.3 KiB

require "rails_helper"
RSpec.describe FormHandler do
let(:form_handler) { described_class.instance }
before do
Timecop.freeze(Time.utc(2022, 9, 20))
Singleton.__init__(described_class)
end
after do
Timecop.unfreeze
Singleton.__init__(described_class)
end
context "when accessing a form in a different year" do
before do
Timecop.freeze(Time.utc(2021, 8, 3))
Singleton.__init__(described_class)
end
after do
Timecop.unfreeze
Singleton.__init__(described_class) # reload FormHandler Instance to update form definitions between runs
end
it "is able to load a current lettings form" do
form = form_handler.get_form("current_lettings")
expect(form).to be_a(Form)
expect(form.pages.count).to eq(45)
end
it "is able to load a next lettings form" do
form = form_handler.get_form("next_lettings")
expect(form).to be_a(Form)
expect(form.pages.count).to eq(12)
end
end
describe "Get all forms" 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["current_sales"]).to be_a(Form)
end
end
describe "Get specific form" do
it "is able to load a current lettings form" do
form = form_handler.get_form("current_lettings")
expect(form).to be_a(Form)
expect(form.pages.count).to eq(12)
end
it "is able to load a previous lettings form" do
form = form_handler.get_form("previous_lettings")
expect(form).to be_a(Form)
expect(form.pages.count).to eq(45)
end
it "is able to load a current sales form" do
form = form_handler.get_form("current_sales")
expect(form).to be_a(Form)
Cldc 1482 sales log buyer company (#893) * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: update schema * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: update test * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * test: update tests
2 years ago
expect(form.pages.count).to eq(20)
expect(form.name).to eq("2022_2023_sales")
end
it "is able to load a previous sales form" do
form = form_handler.get_form("previous_sales")
expect(form).to be_a(Form)
Cldc 1482 sales log buyer company (#893) * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: update schema * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: update test * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: add boyer_company page and question (migration still to be committed) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * tests: add tests for question and page * refactor: spacing * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * feat: add migration and updated schema * feat: update tests (and add housingneeds_type to schema that was previously missing) * test: update tests
2 years ago
expect(form.pages.count).to eq(20)
expect(form.name).to eq("2021_2022_sales")
end
end
describe "Current form" do
it "returns the latest form by date" do
form = form_handler.current_lettings_form
expect(form).to be_a(Form)
expect(form.start_date.year).to eq(2022)
end
end
describe "Current collection start year" do
context "when the date is after 1st of April" do
before do
Timecop.freeze(Time.utc(2022, 8, 3))
end
after do
Timecop.unfreeze
end
it "returns the same year as the current start year" do
expect(form_handler.current_collection_start_year).to eq(2022)
end
it "returns the correct current lettings form name" do
expect(form_handler.form_name_from_start_year(2022, "lettings")).to eq("current_lettings")
end
it "returns the correct previous lettings form name" do
expect(form_handler.form_name_from_start_year(2021, "lettings")).to eq("previous_lettings")
end
it "returns the correct next lettings form name" do
expect(form_handler.form_name_from_start_year(2023, "lettings")).to eq("next_lettings")
end
it "returns the correct current sales form name" do
expect(form_handler.form_name_from_start_year(2022, "sales")).to eq("current_sales")
end
it "returns the correct previous sales form name" do
expect(form_handler.form_name_from_start_year(2021, "sales")).to eq("previous_sales")
end
it "returns the correct next sales form name" do
expect(form_handler.form_name_from_start_year(2023, "sales")).to eq("next_sales")
end
end
context "with the date before 1st of April" do
before do
Timecop.freeze(Time.utc(2022, 2, 3))
end
after do
Timecop.unfreeze
end
it "returns the previous year as the current start year" do
expect(form_handler.current_collection_start_year).to eq(2021)
end
it "returns the correct current lettings form name" do
expect(form_handler.form_name_from_start_year(2021, "lettings")).to eq("current_lettings")
end
it "returns the correct previous lettings form name" do
expect(form_handler.form_name_from_start_year(2020, "lettings")).to eq("previous_lettings")
end
it "returns the correct next lettings form name" do
expect(form_handler.form_name_from_start_year(2022, "lettings")).to eq("next_lettings")
end
it "returns the correct current sales form name" do
expect(form_handler.form_name_from_start_year(2021, "sales")).to eq("current_sales")
end
it "returns the correct previous sales form name" do
expect(form_handler.form_name_from_start_year(2020, "sales")).to eq("previous_sales")
end
it "returns the correct next sales form name" do
expect(form_handler.form_name_from_start_year(2022, "sales")).to eq("next_sales")
end
end
end
it "loads the form once at boot time" do
form_handler = described_class.instance
expect(Form).not_to receive(:new).with(:any, "current_sales")
expect(form_handler.get_form("current_sales")).to be_a(Form)
end
it "correctly sets form type and start year" do
form = form_handler.forms["current_lettings"]
expect(form.type).to eq("lettings")
expect(form.start_date.year).to eq(2022)
end
end