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