diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index 4b25b1eca..49f2585c5 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -1,6 +1,7 @@ class MergeRequestsController < ApplicationController before_action :authenticate_user! - before_action :find_resource, only: %i[organisations update_organisations remove_merging_organisation update_other_merging_organisations] + before_action :find_resource, only: %i[organisations update_organisations remove_merging_organisation] + before_action :find_resource_by_id, only: %i[update] def create @merge_request = MergeRequest.create!(merge_request_params) @@ -13,6 +14,14 @@ class MergeRequestsController < ApplicationController @merging_organisations_list = [@merge_request.requesting_organisation] + @merge_request.merging_organisations end + def update + if @merge_request.update(merge_request_params) + redirect_to next_page_path + else + render previous_template, status: :unprocessable_entity + end + end + def update_organisations merge_request_organisation = MergeRequestOrganisation.new(merge_request_organisation_params) @answer_options = organisations_answer_options @@ -26,14 +35,6 @@ class MergeRequestsController < ApplicationController end end - def update_other_merging_organisations - if @merge_request.update(other_merging_organisaitions_params) - redirect_to merge_request_absorbing_organisation_path(@merge_request) - else - render :organisations, status: :unprocessable_entity - end - end - def remove_merging_organisation MergeRequestOrganisation.find_by(merge_request_organisation_params).destroy! @merge_request.reload @@ -56,7 +57,7 @@ private def merge_request_params merge_params = params.fetch(:merge_request, {}).permit(:requesting_organisation_id, :other_merging_organisations) - if current_user.data_coordinator? || current_user.data_provider? + if merge_params[:requesting_organisation_id].present? && (current_user.data_coordinator? || current_user.data_provider?) merge_params[:requesting_organisation_id] = current_user.organisation.id end @@ -67,11 +68,19 @@ private { merge_request: @merge_request, merging_organisation_id: params[:merge_request][:merging_organisation] } end - def other_merging_organisaitions_params - params.fetch(:merge_request, {}).permit(:other_merging_organisations) - end - def find_resource @merge_request = MergeRequest.find(params[:merge_request_id]) end + + def find_resource_by_id + @merge_request = MergeRequest.find(params[:id]) + end + + def next_page_path + merge_request_absorbing_organisation_path(@merge_request) + end + + def previous_template + :organisations + end end diff --git a/app/views/merge_requests/organisations.html.erb b/app/views/merge_requests/organisations.html.erb index d8a5a17b8..c5f15136e 100644 --- a/app/views/merge_requests/organisations.html.erb +++ b/app/views/merge_requests/organisations.html.erb @@ -45,7 +45,7 @@ <% end %> <% end %> <% end %> -<%= form_with model: @merge_request, url: merge_request_other_merging_organisations_path, method: :patch do |f| %> +<%= form_with model: @merge_request, url: merge_request_path(id: @merge_request.id), method: :patch do |f| %> <%= govuk_details(summary_text: "Can't find the managing agent you're looking for?") do %> <%= f.govuk_text_area :other_merging_organisations, label: { text: "Other organisations" }, hint: { text: "List other organisations that are part of the merge but not registered on CORE." }, rows: 9 %> <% end %> diff --git a/config/routes.rb b/config/routes.rb index 52bd00afd..30a7321d0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -124,11 +124,9 @@ Rails.application.routes.draw do end resources :merge_requests, path: "/merge-request" do - post "merge-request", to: "merge_request#create_merge_request" get "organisations", to: "merge_requests#organisations" patch "organisations", to: "merge_requests#update_organisations" get "organisations/remove", to: "merge_requests#remove_merging_organisation" - patch "other-merging-organisations", to: "merge_requests#update_other_merging_organisations" get "absorbing-organisation", to: "merge_requests#absorbing_organisation" end diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index 8865ecaf5..608356a24 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -15,7 +15,7 @@ RSpec.describe MergeRequestsController, type: :request do end describe "#organisations" do - let(:params) { {} } + let(:params) { { merge_request: { requesting_organisation_id: "9" } } } before do organisation.update!(name: "Test Org") @@ -159,7 +159,7 @@ RSpec.describe MergeRequestsController, type: :request do context "when adding other merging organisations" do before do MergeRequestOrganisation.create!(merge_request_id: merge_request.id, merging_organisation_id: other_organisation.id) - patch "/merge-request/#{merge_request.id}/other-merging-organisations", headers:, params: + patch "/merge-request/#{merge_request.id}", headers:, params: end it "updates the merge request" do