From 7018b87628f71624aa3bc607c5bedee6c03e849d Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 19 Aug 2024 12:42:11 +0100 Subject: [PATCH] Remove absorbing org from merging organisations list --- app/controllers/merge_requests_controller.rb | 22 ++++++++++++++----- .../merge_requests_controller_spec.rb | 19 ++++++++++++++++ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index c0fc40092..0d59b7b67 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -21,12 +21,9 @@ class MergeRequestsController < ApplicationController validate_response if @merge_request.errors.blank? && @merge_request.update(merge_request_params) - if page == "merging_organisations" - new_merging_org_ids = params["merge_request"]["new_merging_org_ids"].split(" ") - new_merging_org_ids.each do |org_id| - MergeRequestOrganisation.create!(merge_request: @merge_request, merging_organisation_id: org_id) - end - end + add_merging_organsations if page == "merging_organisations" + remove_absorbing_org_from_merging_organisations if page == "absorbing_organisation" && @merge_request.absorbing_organisation_id.present? + redirect_to next_page_path else render previous_template, status: :unprocessable_entity @@ -176,4 +173,17 @@ private parsed_params = CGI.parse(query_params) parsed_params[query_param]&.first end + + def add_merging_organsations + new_merging_org_ids = params["merge_request"]["new_merging_org_ids"].split(" ") + new_merging_org_ids.each do |org_id| + MergeRequestOrganisation.create!(merge_request: @merge_request, merging_organisation_id: org_id) + end + end + + def remove_absorbing_org_from_merging_organisations + if @merge_request.merge_request_organisations.where(merging_organisation_id: @merge_request.absorbing_organisation_id).exists? + MergeRequestOrganisation.find_by(merge_request: @merge_request, merging_organisation_id: @merge_request.absorbing_organisation_id).destroy! + end + end end diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index 592d2521a..25220b594 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -294,6 +294,25 @@ RSpec.describe MergeRequestsController, type: :request do expect(page).to have_button("Save changes") end end + + context "when absorbing_organisation_id set to one of the merging organisations" do + let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) } + let(:params) do + { merge_request: { absorbing_organisation_id: other_organisation.id, page: "absorbing_organisation" } } + end + + let(:request) do + MergeRequestOrganisation.create!(merge_request_id: merge_request.id, merging_organisation_id: other_organisation.id) + patch "/merge-request/#{merge_request.id}", headers:, params: + end + + it "removes organisation from merge request organisations" do + request + + merge_request.reload + expect(merge_request.merging_organisations.count).to eq(0) + end + end end describe "from merge_date page" do