From 5ac1ef49a819b957f8dfe241a750cf11247d1505 Mon Sep 17 00:00:00 2001 From: JG Date: Wed, 20 Jul 2022 10:59:09 +0100 Subject: [PATCH] added tests --- app/controllers/locations_controller.rb | 7 +- spec/requests/locations_controller_spec.rb | 88 ++++++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index e321ebe75..3476cd236 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -16,12 +16,11 @@ class LocationsController < ApplicationController end def create - if valid_date_params?(location_params) + if date_params_missing?(location_params) || valid_date_params?(location_params) @location = Location.new(location_params) if @location.save location_params[:add_another_location] == "Yes" ? redirect_to(new_location_path(id: @scheme.id)) : redirect_to(scheme_check_answers_path(scheme_id: @scheme.id)) else - @location.errors.add(:startdate) render :new, status: :unprocessable_entity end else @@ -58,6 +57,10 @@ private Date.valid_date?(location_params["startdate(1i)"].to_i, location_params["startdate(2i)"].to_i, location_params["startdate(3i)"].to_i) end + def date_params_missing?(location_params) + location_params["startdate(1i)"].empty? && location_params["startdate(2i)"].empty? && location_params["startdate(3i)"].empty? + end + def is_integer?(string) string.to_i.to_s == string end diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb index 0ff43e5f7..61bc1f1f8 100644 --- a/spec/requests/locations_controller_spec.rb +++ b/spec/requests/locations_controller_spec.rb @@ -221,6 +221,50 @@ RSpec.describe LocationsController, type: :request do expect(page).to have_content(I18n.t("validations.date.invalid_date")) end end + + context "when invalid time is supplied" do + let(:params) do + { location: { + name: "Test", + units: "5", + type_of_unit: "Bungalow", + wheelchair_adaptation: "No", + 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", + wheelchair_adaptation: "No", + 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 end context "when signed in as a support user" do @@ -331,6 +375,50 @@ RSpec.describe LocationsController, type: :request do 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", + wheelchair_adaptation: "No", + 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", + wheelchair_adaptation: "No", + 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 end end