diff --git a/spec/features/form/page_routing_spec.rb b/spec/features/form/page_routing_spec.rb index eb4f6acc2..312e0752b 100644 --- a/spec/features/form/page_routing_spec.rb +++ b/spec/features/form/page_routing_spec.rb @@ -20,95 +20,106 @@ RSpec.describe "Form Page Routing" do sign_in user end - it "can route the user to a different page based on their answer on the current page", js: true do - visit("/lettings-logs/#{id}/conditional-question") - # using a question name that is already in the db to avoid - # having to add a new column to the db for this test - choose("lettings-log-preg-occ-1-field", allow_label_click: true) - click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question-yes-page") - click_link(text: "Back") - expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question") - choose("lettings-log-preg-occ-2-field", allow_label_click: true) - click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question-no-page") - end - - it "can route based on multiple conditions", js: true do - visit("/lettings-logs/#{id}/person-1-gender") - choose("lettings-log-sex1-f-field", allow_label_click: true) - click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/person-1-working-situation") - visit("/lettings-logs/#{id}/conditional-question") - choose("lettings-log-preg-occ-2-field", allow_label_click: true) - click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question-no-page") - choose("lettings-log-cbl-0-field", allow_label_click: true) - click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question/check-answers") - end + context "with 21/22 logs" do + around do |example| + Timecop.freeze(Time.zone.local(2022, 1, 1)) do + Singleton.__init__(FormHandler) + example.run + end + Timecop.return + Singleton.__init__(FormHandler) + end - context "when the answers are inferred", js: true do - it "shows question if the answer could not be inferred" do - visit("/lettings-logs/#{id}/property-postcode") - fill_in("lettings-log-postcode-full-field", with: "PO5 3TE") + it "can route the user to a different page based on their answer on the current page", js: true do + visit("/lettings-logs/#{id}/conditional-question") + # using a question name that is already in the db to avoid + # having to add a new column to the db for this test + choose("lettings-log-preg-occ-1-field", allow_label_click: true) + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question-yes-page") + click_link(text: "Back") + expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question") + choose("lettings-log-preg-occ-2-field", allow_label_click: true) click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/do-you-know-the-local-authority") + expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question-no-page") end - it "shows question if the answer could not be inferred from an empty input" do - visit("/lettings-logs/#{id}/property-postcode") + it "can route based on multiple conditions", js: true do + visit("/lettings-logs/#{id}/person-1-gender") + choose("lettings-log-sex1-f-field", allow_label_click: true) click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/do-you-know-the-local-authority") + expect(page).to have_current_path("/lettings-logs/#{id}/person-1-working-situation") + visit("/lettings-logs/#{id}/conditional-question") + choose("lettings-log-preg-occ-2-field", allow_label_click: true) + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question-no-page") + choose("lettings-log-cbl-0-field", allow_label_click: true) + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{id}/conditional-question/check-answers") end - it "does not show question if the answer could be inferred" do - stub_request(:get, /api.postcodes.io/) - .to_return(status: 200, body: "{\"status\":200,\"result\":{\"admin_district\":\"Manchester\", \"codes\":{\"admin_district\": \"E08000003\"}}}", headers: {}) + context "when the answers are inferred", js: true do + it "shows question if the answer could not be inferred" do + visit("/lettings-logs/#{id}/property-postcode") + fill_in("lettings-log-postcode-full-field", with: "PO5 3TE") + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{id}/do-you-know-the-local-authority") + end - visit("/lettings-logs/#{id}/property-postcode") - fill_in("lettings-log-postcode-full-field", with: "P0 5ST") - click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/property-wheelchair-accessible") - end - end + it "shows question if the answer could not be inferred from an empty input" do + visit("/lettings-logs/#{id}/property-postcode") + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{id}/do-you-know-the-local-authority") + end - context "when answer is invalid" do - it "shows error with invalid value in the field" do - visit("/lettings-logs/#{id}/property-postcode") - fill_in("lettings-log-postcode-full-field", with: "fake_postcode") - click_button("Save and continue") + it "does not show question if the answer could be inferred" do + stub_request(:get, /api.postcodes.io/) + .to_return(status: 200, body: "{\"status\":200,\"result\":{\"admin_district\":\"Manchester\", \"codes\":{\"admin_district\": \"E08000003\"}}}", headers: {}) - expect(page).to have_current_path("/lettings-logs/#{id}/property-postcode") - expect(find("#lettings-log-postcode-full-field-error").value).to eq("fake_postcode") + visit("/lettings-logs/#{id}/property-postcode") + fill_in("lettings-log-postcode-full-field", with: "P0 5ST") + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{id}/property-wheelchair-accessible") + end end - it "does not reset the displayed date" do - lettings_log.update!(startdate: "2021/10/13") - visit("/lettings-logs/#{id}/tenancy-start-date") - fill_in("lettings_log[startdate(1i)]", with: "202") - fill_in("lettings_log[startdate(2i)]", with: "32") - fill_in("lettings_log[startdate(3i)]", with: "0") - click_button("Save and continue") + context "when answer is invalid" do + it "shows error with invalid value in the field" do + visit("/lettings-logs/#{id}/property-postcode") + fill_in("lettings-log-postcode-full-field", with: "fake_postcode") + click_button("Save and continue") - expect(page).to have_current_path("/lettings-logs/#{id}/tenancy-start-date") - expect(find_field("lettings_log[startdate(3i)]").value).to eq("13") - expect(find_field("lettings_log[startdate(2i)]").value).to eq("10") - expect(find_field("lettings_log[startdate(1i)]").value).to eq("2021") - end + expect(page).to have_current_path("/lettings-logs/#{id}/property-postcode") + expect(find("#lettings-log-postcode-full-field-error").value).to eq("fake_postcode") + end - it "does not reset the displayed date if it's empty" do - lettings_log.update!(startdate: nil) - visit("/lettings-logs/#{id}/tenancy-start-date") - fill_in("lettings_log[startdate(1i)]", with: "202") - fill_in("lettings_log[startdate(2i)]", with: "32") - fill_in("lettings_log[startdate(3i)]", with: "0") - click_button("Save and continue") + it "does not reset the displayed date" do + lettings_log.update!(startdate: "2021/10/13") + visit("/lettings-logs/#{id}/tenancy-start-date") + fill_in("lettings_log[startdate(1i)]", with: "202") + fill_in("lettings_log[startdate(2i)]", with: "32") + fill_in("lettings_log[startdate(3i)]", with: "0") + click_button("Save and continue") + + expect(page).to have_current_path("/lettings-logs/#{id}/tenancy-start-date") + expect(find_field("lettings_log[startdate(3i)]").value).to eq("13") + expect(find_field("lettings_log[startdate(2i)]").value).to eq("10") + expect(find_field("lettings_log[startdate(1i)]").value).to eq("2021") + end - expect(page).to have_current_path("/lettings-logs/#{id}/tenancy-start-date") - expect(find_field("lettings_log[startdate(3i)]").value).to eq(nil) - expect(find_field("lettings_log[startdate(2i)]").value).to eq(nil) - expect(find_field("lettings_log[startdate(1i)]").value).to eq(nil) + it "does not reset the displayed date if it's empty" do + lettings_log.update!(startdate: nil) + visit("/lettings-logs/#{id}/tenancy-start-date") + fill_in("lettings_log[startdate(1i)]", with: "202") + fill_in("lettings_log[startdate(2i)]", with: "32") + fill_in("lettings_log[startdate(3i)]", with: "0") + click_button("Save and continue") + + expect(page).to have_current_path("/lettings-logs/#{id}/tenancy-start-date") + expect(find_field("lettings_log[startdate(3i)]").value).to eq(nil) + expect(find_field("lettings_log[startdate(2i)]").value).to eq(nil) + expect(find_field("lettings_log[startdate(1i)]").value).to eq(nil) + end end end