diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index c34e00581..65bedb6ca 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -6,6 +6,7 @@ class MergeRequestsController < ApplicationController
def absorbing_organisation; end
def merge_date; end
+ def existing_absorbing_organisation; end
def helpdesk_ticket; end
def merge_start_confirmation; end
def user_outcomes; end
@@ -86,6 +87,8 @@ private
when "merging_organisations"
merge_date_merge_request_path(@merge_request)
when "merge_date"
+ existing_absorbing_organisation_merge_request_path(@merge_request)
+ when "existing_absorbing_organisation"
helpdesk_ticket_merge_request_path(@merge_request)
when "helpdesk_ticket"
merge_request_path(@merge_request)
@@ -115,6 +118,7 @@ private
:status,
:absorbing_organisation_id,
:merge_date,
+ :existing_absorbing_organisation,
)
merge_params[:requesting_organisation_id] = current_user.organisation.id
@@ -140,6 +144,10 @@ private
else
@merge_request.errors.add(:merge_date, :invalid)
end
+ when "existing_absorbing_organisation"
+ if merge_request_params[:existing_absorbing_organisation].nil?
+ @merge_request.errors.add(:existing_absorbing_organisation, :blank)
+ end
end
end
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index 23623b0a6..31e6fb807 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -67,8 +67,10 @@ module MergeRequestsHelper
absorbing_organisation_merge_request_path(merge_request)
when "merge_date"
merging_organisations_merge_request_path(merge_request)
- when "helpdesk_ticket"
+ when "existing_absorbing_organisation"
merge_date_merge_request_path(merge_request)
+ when "helpdesk_ticket"
+ existing_absorbing_organisation_merge_request_path(merge_request)
end
end
diff --git a/app/views/merge_requests/existing_absorbing_organisation.html.erb b/app/views/merge_requests/existing_absorbing_organisation.html.erb
new file mode 100644
index 000000000..9a13905b5
--- /dev/null
+++ b/app/views/merge_requests/existing_absorbing_organisation.html.erb
@@ -0,0 +1,24 @@
+<% content_for :before_content do %>
+ <% title = "Tell us if your organisation is merging" %>
+ <% content_for :title, title %>
+ <%= govuk_back_link href: merge_request_back_link(@merge_request, "existing_absorbing_organisation", request.query_parameters["referrer"]) %>
+<% end %>
+
+
+ <%= form_with model: @merge_request, url: submit_merge_request_url(request.query_parameters["referrer"]), method: :patch do |f| %>
+ <%= f.govuk_error_summary %>
+ <%= f.govuk_radio_buttons_fieldset :existing_absorbing_organisation,
+ legend: { text: "Was #{@merge_request.absorbing_organisation&.name} already active before the merge date?", size: "l" } do %>
+ <%= f.govuk_radio_button :existing_absorbing_organisation,
+ "true",
+ label: { text: "Yes, this organisation existed before the merge" } %>
+ <%= f.govuk_radio_button :existing_absorbing_organisation,
+ "false",
+ label: { text: "No, it is a new organisation created by this merge" } %>
+ <% end %>
+
+ <%= f.hidden_field :page, value: "existing_absorbing_organisation" %>
+ <%= f.govuk_submit submit_merge_request_button_text(request.query_parameters["referrer"]) %>
+ <% end %>
+
+
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 649ec358a..7d52a92e0 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -179,6 +179,8 @@ en:
merge_date:
blank: "Enter a merge date"
invalid: "Enter a valid merge date"
+ existing_absorbing_organisation:
+ blank: "You must answer absorbing organisation already active?"
notification:
logs_deleted:
diff --git a/config/routes.rb b/config/routes.rb
index d8e61c04b..a22324ef3 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -208,6 +208,7 @@ Rails.application.routes.draw do
get "merging-organisations/remove", to: "merge_requests#remove_merging_organisation"
get "absorbing-organisation"
get "merge-date"
+ get "existing-absorbing-organisation"
get "helpdesk-ticket"
get "merge-start-confirmation"
get "user-outcomes"
diff --git a/db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb b/db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb
new file mode 100644
index 000000000..f1a0d8b1e
--- /dev/null
+++ b/db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb
@@ -0,0 +1,5 @@
+class AddExistingAbsorbingOrganisationField < ActiveRecord::Migration[7.0]
+ def change
+ add_column :merge_requests, :existing_absorbing_organisation, :boolean
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index cb4a44e44..449d7ece2 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[7.0].define(version: 2024_08_19_143150) do
+ActiveRecord::Schema[7.0].define(version: 2024_08_22_080228) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -434,6 +434,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_08_19_143150) do
t.datetime "last_failed_attempt"
t.boolean "request_merged"
t.boolean "processing"
+ t.boolean "existing_absorbing_organisation"
end
create_table "notifications", force: :cascade do |t|
diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb
index 30941360e..1571c5f98 100644
--- a/spec/requests/merge_requests_controller_spec.rb
+++ b/spec/requests/merge_requests_controller_spec.rb
@@ -219,6 +219,23 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
+ describe "#existing_absorbing_organisation" do
+ context "when viewing helpdesk ticket page" do
+ before do
+ merge_request.update!(absorbing_organisation_id: organisation.id, merge_date: Time.zone.today)
+ get "/merge-request/#{merge_request.id}/existing-absorbing-organisation", headers:
+ end
+
+ it "shows the correct content" do
+ expect(page).to have_content("Was #{merge_request.absorbing_organisation.name} already active before the merge date?")
+ expect(page).to have_content("Yes, this organisation existed before the merge")
+ expect(page).to have_content("No, it is a new organisation created by this merge")
+ expect(page).to have_link("Back", href: merge_date_merge_request_path(merge_request))
+ expect(page).to have_button("Save and continue")
+ end
+ end
+ end
+
describe "#helpdesk_ticket" do
context "when viewing helpdesk ticket page" do
before do
@@ -228,6 +245,8 @@ RSpec.describe MergeRequestsController, type: :request do
it "shows the correct content" do
expect(page).to have_content("Which helpdesk ticket reported this merge?")
+ expect(page).to have_link("Back", href: existing_absorbing_organisation_merge_request_path(merge_request))
+ expect(page).to have_button("Save and continue")
end
end
end
@@ -365,10 +384,10 @@ RSpec.describe MergeRequestsController, type: :request do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
- it "redirects to helpdesk ticket path" do
+ it "redirects to existing absorbing organisation path" do
request
- expect(response).to redirect_to(helpdesk_ticket_merge_request_path(merge_request))
+ expect(response).to redirect_to(existing_absorbing_organisation_merge_request_path(merge_request))
end
it "updates merge_date" do
@@ -400,6 +419,29 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
end
+
+ describe "from existing_absorbing_organisation page" do
+ context "when not answering the question" do
+ let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
+ let(:params) do
+ { merge_request: { page: "existing_absorbing_organisation" } }
+ end
+ let(:request) do
+ patch "/merge-request/#{merge_request.id}", headers:, params:
+ end
+
+ it "renders the error" do
+ request
+
+ expect(response).to have_http_status(:unprocessable_entity)
+ expect(page).to have_content("You must answer absorbing organisation already active?")
+ end
+
+ it "does not update the request" do
+ expect { request }.not_to(change { merge_request.reload.attributes })
+ end
+ end
+ end
end
describe "#merge_start_confirmation" do