From 68366ecbd2435eb9538dd09cbdfe97e928cb2725 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Thu, 1 Dec 2022 13:33:48 +0000 Subject: [PATCH] test: more test updates and remove redundant files --- app/controllers/locations_controller.rb | 4 +- app/views/locations/edit.html.erb | 56 -- .../locations/edit_local_authority.html.erb | 31 - app/views/locations/edit_name.html.erb | 26 - config/routes.rb | 2 - spec/requests/locations_controller_spec.rb | 678 ------------------ 6 files changed, 2 insertions(+), 795 deletions(-) delete mode 100644 app/views/locations/edit.html.erb delete mode 100644 app/views/locations/edit_local_authority.html.erb delete mode 100644 app/views/locations/edit_name.html.erb diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index 0d3ede8bb..93a6abe87 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -218,7 +218,7 @@ class LocationsController < ApplicationController private def find_scheme - @scheme = if %w[new create index edit_name].include?(action_name) + @scheme = if %w[new index].include?(action_name) Scheme.find(params[:scheme_id]) else @location&.scheme @@ -234,7 +234,7 @@ private end def authenticate_action! - if %w[new edit update create index edit_name edit_local_authority new_deactivation deactivate_confirm deactivate].include?(action_name) && !((current_user.organisation == @scheme&.owning_organisation) || current_user.support?) + if %w[new update index new_deactivation deactivate_confirm deactivate].include?(action_name) && !((current_user.organisation == @scheme&.owning_organisation) || current_user.support?) render_not_found and return end end diff --git a/app/views/locations/edit.html.erb b/app/views/locations/edit.html.erb deleted file mode 100644 index dca0d04fb..000000000 --- a/app/views/locations/edit.html.erb +++ /dev/null @@ -1,56 +0,0 @@ -<% content_for :title, "Add a location to this scheme" %> - -<% content_for :before_content do %> - <%= govuk_back_link( - text: "Back", - href: scheme_check_answers_path(@scheme, anchor: "locations"), - ) %> -<% end %> - -<%= form_for(@location, method: :patch, url: scheme_location_path(scheme_id: @scheme.id, id: @location.id)) do |f| %> -
-
- <%= f.govuk_error_summary %> - - <%= render partial: "organisations/headings", locals: { main: "Add a location to this scheme", sub: @scheme.service_name } %> - - <%= f.govuk_text_field :postcode, - label: { size: "m" }, - hint: { text: I18n.t("hints.location.postcode") }, - width: 5 %> - - <%= f.govuk_text_field :name, - label: { text: I18n.t("questions.location.name"), size: "m" }, - hint: { text: I18n.t("hints.location.name") } %> - - <%= f.govuk_number_field :units, - label: { text: I18n.t("questions.location.units"), size: "m" }, - width: 2, - hint: { text: I18n.t("hints.location.units") }, - autofocus: true %> - - <%= f.govuk_collection_radio_buttons :type_of_unit, - type_of_units_selection, - :id, - :name, - legend: { text: I18n.t("questions.location.type_of_unit"), size: "m" } %> - - <%= f.govuk_collection_radio_buttons :mobility_type, - mobility_type_selection, - :id, - :name, - :description, - legend: { text: I18n.t("questions.location.mobility_type"), size: "m" } %> - - <%= f.govuk_date_field :startdate, - legend: { text: I18n.t("questions.location.startdate"), size: "m" }, - width: 20 %> - - <%= govuk_section_break(visible: true, size: "m") %> - - <%= f.hidden_field :page, value: "edit" %> - - <%= f.govuk_submit "Save and continue" %> -
-
-<% end %> diff --git a/app/views/locations/edit_local_authority.html.erb b/app/views/locations/edit_local_authority.html.erb deleted file mode 100644 index 1e5ab9fbb..000000000 --- a/app/views/locations/edit_local_authority.html.erb +++ /dev/null @@ -1,31 +0,0 @@ -<% content_for :before_content do %> - <%= govuk_back_link( - text: "Back", - href: "/schemes/#{@scheme.id}/locations", - ) %> -<% end %> - -<%= form_for(@location, method: :patch, url: scheme_location_path(scheme_id: @scheme.id, id: @location.id, add_another_location: params[:add_another_location])) do |f| %> -
-
- <%= f.govuk_error_summary %> - - <%= render partial: "organisations/headings", locals: { main: "What is the local authority of #{@location.postcode}?", sub: @scheme.service_name } %> - - <%= f.govuk_collection_select :location_admin_district, - local_authorities_selection, - :name, - :name, - label: { hidden: true }, - "data-controller": %w[conditional-filter accessible-autocomplete] %> - - <%= f.hidden_field :page, value: "edit-local-authority" %> - -
- <%= f.govuk_submit "Save and continue" %> - - <%= govuk_link_to "Skip for now", "/schemes/#{@scheme.id}/check-answers#locations" %> -
-
-
-<% end %> diff --git a/app/views/locations/edit_name.html.erb b/app/views/locations/edit_name.html.erb deleted file mode 100644 index 7e75edf9d..000000000 --- a/app/views/locations/edit_name.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<% content_for :title, "Location name for #{@location.postcode}" %> - -<% content_for :before_content do %> - <%= govuk_back_link( - text: "Back", - href: scheme_location_path(@scheme, @location), - ) %> -<% end %> - -<%= form_for(@location, method: :patch, url: scheme_location_path(scheme_id: @scheme.id, id: @location.id)) do |f| %> -
-
- <%= f.govuk_error_summary %> - - <%= render partial: "organisations/headings", locals: { main: "Location name for #{@location.postcode}", sub: @scheme.service_name } %> - - <%= f.govuk_text_field :name, - label: { hidden: true }, - hint: { text: "This is how you refer to this location within your organisation" } %> - - <%= f.hidden_field :page, value: "edit-name" %> - - <%= f.govuk_submit "Save and continue" %> -
-
-<% end %> diff --git a/config/routes.rb b/config/routes.rb index 72138f76a..6caff0929 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -58,8 +58,6 @@ Rails.application.routes.draw do patch "reactivate", to: "schemes#reactivate" resources :locations do - get "edit-name", to: "locations#edit_name" - get "edit-local-authority", to: "locations#edit_local_authority" get "new-deactivation", to: "locations#new_deactivation" get "deactivate-confirm", to: "locations#deactivate_confirm" get "reactivate", to: "locations#reactivate" diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb index 081f90e45..7d3b86e39 100644 --- a/spec/requests/locations_controller_spec.rb +++ b/spec/requests/locations_controller_spec.rb @@ -72,404 +72,6 @@ RSpec.describe LocationsController, type: :request do end end - describe "#create" do - context "when not signed in" do - it "redirects to the sign in page" do - post "/schemes/1/locations" - expect(response).to redirect_to("/account/sign-in") - end - end - - context "when signed in as a data provider" do - let(:user) { FactoryBot.create(:user) } - - before do - sign_in user - post "/schemes/1/locations" - end - - it "returns 401 unauthorized" do - request - expect(response).to have_http_status(:unauthorized) - end - end - - context "when signed in as a data coordinator" do - let(:user) { FactoryBot.create(:user, :data_coordinator) } - let!(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } - let(:startdate) { Time.utc(2022, 2, 2) } - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", startdate:, mobility_type: "A" } } } - - before do - sign_in user - post "/schemes/#{scheme.id}/locations", params: - end - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your answers before creating this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - expect(Location.last.startdate).to eq(startdate) - expect(Location.last.mobility_type).to eq("Fitted with equipment and adaptations") - end - - context "when postcode is submitted with lower case" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "zz1 1zz", mobility_type: "N" } } } - - it "creates a new location for scheme with postcode " do - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - end - end - - context "when startdate is submitted with leading zeroes" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - add_another_location: "No", - postcode: "zz1 1zz", - mobility_type: "N", - "startdate(3i)" => "01", - "startdate(2i)" => "01", - "startdate(1i)" => "2022", - } } - end - - it "creates a new location for scheme with postcode " do - expect(Location.last.startdate).to eq(Time.utc(2022, 1, 1)) - end - end - - context "when trying to add location to a scheme that belongs to another organisation" do - let(:another_scheme) { FactoryBot.create(:scheme) } - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - it "displays the new page with an error message" do - post "/schemes/#{another_scheme.id}/locations", params: params - expect(response).to have_http_status(:not_found) - end - end - - context "when do you want to add another location is selected as yes" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "Yes", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Add a location to this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - expect(Location.last.mobility_type).to eq("None") - end - end - - context "when do you want to add another location is selected as no" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is not selected" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", postcode: "ZZ1 1ZZ", mobility_type: "W" } } } - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - expect(Location.last.mobility_type).to eq("Wheelchair-user standard") - end - end - - context "when required param are missing" do - let(:params) { { location: { postcode: "", name: "Test", units: "", type_of_unit: "", add_another_location: "No" } } } - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.units.blank")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.type_of_unit.blank")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.mobility_type.blank")) - end - end - - context "when invalid time is supplied" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - mobility_type: "N", - add_another_location: "No", - postcode: "ZZ1 1ZZ", - "startdate(3i)" => "1", - "startdate(2i)" => "1", - "startdate(1i)" => "w", - } } - end - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.date.invalid_date")) - end - end - - context "when no startdate is supplied" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - mobility_type: "N", - add_another_location: "No", - postcode: "ZZ1 1ZZ", - "startdate(3i)" => "", - "startdate(2i)" => "", - "startdate(1i)" => "", - } } - end - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your answers before creating this scheme") - end - end - - context "when postcodes.io doesn't return a la_code" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - mobility_type: "N", - add_another_location: "No", - postcode: "AA1 4AA", - "startdate(3i)" => "", - "startdate(2i)" => "", - "startdate(1i)" => "", - } } - end - - it "redirects to la_fallback" do - post "/schemes/#{scheme.id}/locations", params: params - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("What is the local authority of AA1 4AA?") - end - end - end - - context "when signed in as a support user" do - let(:user) { FactoryBot.create(:user, :support) } - let!(:scheme) { FactoryBot.create(:scheme) } - let(:params) { { location: { name: " Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - before do - allow(user).to receive(:need_two_factor_authentication?).and_return(false) - sign_in user - post "/schemes/#{scheme.id}/locations", params: - end - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your answers before creating this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - - context "when postcode is submitted with lower case" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "zz1 1zz", mobility_type: "N" } } } - - it "creates a new location for scheme with postcode " do - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - end - end - - context "when required postcode param is missing" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No" } } } - - it "displays the new page with an error message" do - post "/schemes/#{scheme.id}/locations", params: params - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - end - end - - context "when do you want to add another location is selected as yes" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "Yes", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Add a location to this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is selected as no" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is not selected" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", postcode: "ZZ1 1ZZ", mobility_type: "N" } } } - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "creates a new location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when required param are missing" do - let(:params) { { location: { postcode: "", name: "Test", units: "", type_of_unit: "", add_another_location: "No" } } } - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.units.blank")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.type_of_unit.blank")) - end - end - - context "when invalid time is supplied" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - mobility_type: "N", - add_another_location: "No", - postcode: "ZZ1 1ZZ", - "startdate(3i)" => "1", - "startdate(2i)" => "1", - "startdate(1i)" => "w", - } } - end - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.date.invalid_date")) - end - end - - context "when no startdate is supplied" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - mobility_type: "N", - add_another_location: "No", - postcode: "ZZ1 1ZZ", - "startdate(3i)" => "", - "startdate(2i)" => "", - "startdate(1i)" => "", - } } - end - - it "creates a new location for scheme with valid params and redirects to correct page" do - expect { post "/schemes/#{scheme.id}/locations", params: }.to change(Location, :count).by(1) - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your answers before creating this scheme") - end - end - - context "when postcodes.io doesn't return a la_code" do - let(:params) do - { location: { - name: "Test", - units: "5", - type_of_unit: "Bungalow", - mobility_type: "N", - add_another_location: "No", - postcode: "AA1 4AA", - "startdate(3i)" => "", - "startdate(2i)" => "", - "startdate(1i)" => "", - } } - end - - it "redirects to la_fallback" do - post "/schemes/#{scheme.id}/locations", params: params - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("What is the local authority of AA1 4AA?") - end - end - end - end - describe "#edit" do context "when not signed in" do it "redirects to the sign in page" do @@ -544,286 +146,6 @@ RSpec.describe LocationsController, type: :request do end end - describe "#update" do - context "when not signed in" do - it "redirects to the sign in page" do - patch "/schemes/1/locations/1" - expect(response).to redirect_to("/account/sign-in") - end - end - - context "when signed in as a data provider" do - let(:user) { FactoryBot.create(:user) } - - before do - sign_in user - patch "/schemes/1/locations/1" - end - - it "returns 401 unauthorized" do - request - expect(response).to have_http_status(:unauthorized) - end - end - - context "when signed in as a data coordinator" do - let(:user) { FactoryBot.create(:user, :data_coordinator) } - let!(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } - let!(:location) { FactoryBot.create(:location, scheme:) } - let(:startdate) { Time.utc(2021, 1, 2) } - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", startdate:, page: "edit" } } } - - before do - sign_in user - patch "/schemes/#{scheme.id}/locations/#{location.id}", params: - end - - it "updates existing location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your answers before creating this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - expect(Location.last.startdate).to eq(startdate) - end - - context "when updating from edit-name page" do - let(:params) { { location: { name: "Test", page: "edit-name" } } } - - it "updates existing location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Test") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - end - end - - context "when postcode is submitted with lower case" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "zz1 1zz", page: "edit" } } } - - it "updates existing location for scheme with postcode " do - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - end - end - - context "when trying to update location for a scheme that belongs to another organisation" do - let(:another_scheme) { FactoryBot.create(:scheme) } - let(:another_location) { FactoryBot.create(:location) } - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "displays the new page with an error message" do - patch "/schemes/#{another_scheme.id}/locations/#{another_location.id}", params: params - expect(response).to have_http_status(:not_found) - end - end - - context "when required postcode param is invalid" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "invalid", page: "edit" } } } - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - end - end - - context "when do you want to add another location is selected as yes" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "Yes", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "updates existing location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Add a location to this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is selected as no" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "updates existing location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is not selected" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "updates existing location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.scheme.owning_organisation_id).to eq(user.organisation_id) - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when required param are missing" do - let(:params) { { location: { postcode: "", name: "Test", units: "", type_of_unit: "", add_another_location: "No" } } } - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.units.blank")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.type_of_unit.blank")) - end - end - - context "when the requested location does not exist" do - let(:location) { OpenStruct.new(id: (Location.maximum(:id) || 0) + 1) } - let(:params) { {} } - - it "returns not found" do - expect(response).to have_http_status(:not_found) - end - end - end - - context "when signed in as a support user" do - let(:user) { FactoryBot.create(:user, :data_coordinator) } - let!(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } - let!(:location) { FactoryBot.create(:location, scheme:) } - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", page: "edit" } } } - - before do - allow(user).to receive(:need_two_factor_authentication?).and_return(false) - sign_in user - patch "/schemes/#{scheme.id}/locations/#{location.id}", params: - end - - it "updates a location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your answers before creating this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - - context "when updating from edit-name page" do - let(:params) { { location: { name: "Test", page: "edit-name" } } } - - it "updates existing location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Test") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - end - end - - context "when postcode is submitted with lower case" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "zz1 1zz", page: "edit" } } } - - it "updates a location for scheme with postcode " do - expect(Location.last.postcode).to eq("ZZ1 1ZZ") - end - end - - context "when required postcode param is missing" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "invalid", page: "edit" } } } - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - end - end - - context "when do you want to add another location is selected as yes" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "Yes", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "updates location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Add a location to this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is selected as no" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", add_another_location: "No", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "updates a location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "updates existing location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when do you want to add another location is not selected" do - let(:params) { { location: { name: "Test", units: "5", type_of_unit: "Bungalow", postcode: "ZZ1 1ZZ", page: "edit" } } } - - it "updates a location for scheme with valid params and redirects to correct page" do - follow_redirect! - expect(response).to have_http_status(:ok) - expect(page).to have_content("Check your changes before creating this scheme") - end - - it "updates a location for scheme with valid params" do - expect(Location.last.name).to eq("Test") - expect(Location.last.units).to eq(5) - expect(Location.last.type_of_unit).to eq("Bungalow") - end - end - - context "when required param are missing" do - let(:params) { { location: { postcode: "", name: "Test", units: "", type_of_unit: "", add_another_location: "No" } } } - - it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) - expect(page).to have_content(I18n.t("validations.postcode")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.units.blank")) - expect(page).to have_content(I18n.t("activerecord.errors.models.location.attributes.type_of_unit.blank")) - end - end - end - end - describe "#index" do context "when not signed in" do it "redirects to the sign in page" do