diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 930a79b04..f9e572fb5 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -6,7 +6,7 @@ class MergeRequestsController < ApplicationController remove_merging_organisation absorbing_organisation confirm_telephone_number - new_org_name + new_organisation_name merge_date ] before_action :authenticate_user! @@ -15,7 +15,7 @@ class MergeRequestsController < ApplicationController def absorbing_organisation; end def confirm_telephone_number; end - def new_org_name; end + def new_organisation_name; end def merge_date; end def create @@ -65,8 +65,8 @@ private def next_page_path case page when "absorbing_organisation" - if create_new_org? - new_org_name_merge_request_path(@merge_request) + if create_new_organisation? + new_organisation_name_merge_request_path(@merge_request) else confirm_telephone_number_merge_request_path(@merge_request) end @@ -74,6 +74,8 @@ private absorbing_organisation_merge_request_path(@merge_request) when "confirm_telephone_number" merge_date_merge_request_path(@merge_request) + when "new_organisation_name" + new_organisation_address_merge_request_path(@merge_request) end end @@ -81,7 +83,7 @@ private page end - def create_new_org? + def create_new_organisation? params.dig(:merge_request, :absorbing_organisation_id) == "other" end @@ -102,6 +104,7 @@ private :absorbing_organisation_id, :telephone_number_correct, :new_telephone_number, + :new_organisation_name, ) if merge_params[:requesting_organisation_id].present? && (current_user.data_coordinator? || current_user.data_provider?) @@ -109,7 +112,7 @@ private end if merge_params[:absorbing_organisation_id].present? - if create_new_org? + if create_new_organisation? merge_params[:new_absorbing_organisation] = true merge_params[:absorbing_organisation_id] = nil else @@ -125,12 +128,14 @@ private end def validate_response - if page == "absorbing_organisation" && merge_request_params[:absorbing_organisation_id].blank? && merge_request_params[:new_absorbing_organisation].blank? - @merge_request.errors.add(:absorbing_organisation_id, I18n.t("validations.merge_request.absorbing_organisation_blank")) - render previous_template, status: :unprocessable_entity - end + case page - if page == "confirm_telephone_number" + when "absorbing_organisation" + if merge_request_params[:absorbing_organisation_id].blank? && merge_request_params[:new_absorbing_organisation].blank? + @merge_request.errors.add(:absorbing_organisation_id, I18n.t("validations.merge_request.absorbing_organisation_blank")) + render previous_template, status: :unprocessable_entity + end + when "confirm_telephone_number" if merge_request_params[:telephone_number_correct].blank? && merge_request_params[:new_telephone_number].blank? if @merge_request.absorbing_organisation.phone.present? @merge_request.errors.add(:telephone_number_correct, I18n.t("validations.merge_request.telephone_number_correct_blank")) @@ -142,6 +147,11 @@ private @merge_request.errors.add(:new_telephone_number, I18n.t("validations.merge_request.new_telephone_number_blank")) render previous_template, status: :unprocessable_entity end + when "new_organisation_name" + if merge_request_params[:new_organisation_name].blank? + @merge_request.errors.add(:new_organisation_name, I18n.t("validations.merge_request.new_organisation_name_blank")) + render previous_template, status: :unprocessable_entity + end end end diff --git a/app/views/merge_requests/new_org_name.html.erb b/app/views/merge_requests/new_org_name.html.erb deleted file mode 100644 index 9c4075735..000000000 --- a/app/views/merge_requests/new_org_name.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -<% content_for :before_content do %> - <% title = "Tell us if your organisation is merging" %> - <% content_for :title, title %> - <%= govuk_back_link href: absorbing_organisation_merge_request_path(id: @merge_request) %> -<% end %> - -Provide new org name diff --git a/app/views/merge_requests/new_organisation_name.html.erb b/app/views/merge_requests/new_organisation_name.html.erb new file mode 100644 index 000000000..8b391e735 --- /dev/null +++ b/app/views/merge_requests/new_organisation_name.html.erb @@ -0,0 +1,19 @@ +<% content_for :before_content do %> + <% title = "New organisation name" %> + <% content_for :title, title %> + <%= govuk_back_link href: absorbing_organisation_merge_request_path(id: @merge_request) %> +<% end %> + +<%= form_with model: @merge_request, url: merge_request_path, method: :patch do |f| %> + <%= f.govuk_error_summary %> + +

What is the new organisation called?

+ +
+
+ <%= f.govuk_text_field :new_organisation_name, label: nil %> + <%= f.hidden_field :page, value: "new_organisation_name" %> + <%= f.govuk_submit %> + <% end %> +
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index 5a3189f03..09ac55f95 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -518,6 +518,7 @@ en: absorbing_organisation_blank: Select the organisation absorbing the others telephone_number_correct_blank: Select to confirm or enter a new telephone number new_telephone_number_blank: Enter a valid telephone number + new_organisation_name_blank: "Enter an organisation name" soft_validations: net_income: diff --git a/config/routes.rb b/config/routes.rb index bec7aed6b..48afc3357 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -138,7 +138,8 @@ Rails.application.routes.draw do get "organisations/remove", to: "merge_requests#remove_merging_organisation" get "absorbing-organisation" get "confirm-telephone-number" - get "new-org-name" + get "new-organisation-name" + get "new-organisation-address" get "merge-date" end end diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index 943be6374..4f5df0d19 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -325,7 +325,7 @@ RSpec.describe MergeRequestsController, type: :request do it "redirects to new org path" do request - expect(response).to redirect_to(new_org_name_merge_request_path(merge_request)) + expect(response).to redirect_to(new_organisation_name_merge_request_path(merge_request)) end it "resets absorbing_organisation and sets new_absorbing_organisation to true" do @@ -472,6 +472,64 @@ RSpec.describe MergeRequestsController, type: :request do end end end + + describe "#new_organsation_name" do + let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, new_absorbing_organisation: true) } + + context "when viewing the new organisation name page" do + before do + get "/merge-request/#{merge_request.id}/new-organisation-name", headers: + end + + it "displays the correct question" do + expect(page).to have_content("What is the new organisation called?") + end + + it "has the correct back button" do + expect(page).to have_link("Back", href: absorbing_organisation_merge_request_path(merge_request)) + end + end + + context "when updating the new organisation name" do + let(:params) do + { merge_request: { new_organisation_name: "new org name", page: "new_organisation_name" } } + end + + let(:request) do + patch "/merge-request/#{merge_request.id}", headers:, params: + end + + it "redirects to new organisation address path" do + request + expect(response).to redirect_to(new_organisation_address_merge_request_path(merge_request)) + end + + it "updates new organisation name to the correct name" do + expect { request }.to change { + merge_request.reload.new_organisation_name + }.from(nil).to("new org name") + end + end + + context "when the new organisation name is not answered" do + let(:params) do + { merge_request: { new_organisation_name: nil, page: "new_organisation_name" } } + end + + let(:request) do + patch "/merge-request/#{merge_request.id}", headers:, params: + end + + it "renders the error" do + request + expect(page).to have_content("Enter an organisation name") + end + + it "does not update the organisation name" do + expect { request }.not_to(change { merge_request.reload.attributes }) + end + end + end end end