diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index a7ab2e098..810777e63 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -8,6 +8,7 @@ class MergeRequestsController < ApplicationController
def merge_date; end
def helpdesk_ticket; end
def merge_start_confirmation; end
+ def user_outcomes; end
def create
ActiveRecord::Base.transaction do
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index f8d757aaa..33acc2e1f 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -21,7 +21,7 @@ module MergeRequestsHelper
def merge_outcomes(merge_request)
[
- { label: "Total users after merge", value: display_value_or_placeholder(merge_request.total_users), action: { text: "View", href: "#", visually_hidden_text: "total users after merge" } },
+ { label: "Total users after merge", value: display_value_or_placeholder(merge_request.total_users_label), action: merge_outcome_action(merge_request, "user_outcomes") },
{ label: "Total schemes after merge", value: display_value_or_placeholder(merge_request.total_schemes), action: { text: "View", href: "#", visually_hidden_text: "total schemes after merge" } },
{ label: "Total logs after merge", value: merge_request.total_lettings_logs.present? || merge_request.total_sales_logs.present? ? "#{merge_request.total_lettings_logs} lettings logs
#{merge_request.total_sales_logs} sales logs".html_safe : display_value_or_placeholder(nil), action: { text: "View", href: "#", visually_hidden_text: "total logs after merge" } },
{ label: "Total stock owners & managing agents after merge", value: merge_request.total_stock_owners.present? || merge_request.total_managing_agents.present? ? "#{merge_request.total_stock_owners} stock owners
#{merge_request.total_managing_agents} managing agents".html_safe : display_value_or_placeholder(nil), action: { text: "View", href: "#", visually_hidden_text: "total stock owners & managing agents after merge" } },
@@ -75,6 +75,12 @@ module MergeRequestsHelper
end
end
+ def merge_outcome_action(merge_request, page)
+ unless merge_request.status == "request_merged" || merge_request.status == "processing"
+ { text: "View", href: send("#{page}_merge_request_path", merge_request), visually_hidden_text: page.humanize }
+ end
+ end
+
def submit_merge_request_url(referrer)
referrer == "check_answers" ? merge_request_path(referrer: "check_answers") : merge_request_path
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 91db085c5..9df255516 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -54,4 +54,14 @@ class MergeRequest < ApplicationRecord
def absorbing_organisation_signed_dsa?
absorbing_organisation&.data_protection_confirmed?
end
+
+ def total_users_after_merge
+ return total_users if status == STATUS[:request_merged] || status == STATUS[:processing]
+
+ absorbing_organisation.users.count + merging_organisations.sum { |org| org.users.count }
+ end
+
+ def total_users_label
+ "#{total_users_after_merge} Users"
+ end
end
diff --git a/config/routes.rb b/config/routes.rb
index 96d738062..63bafbd51 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -210,6 +210,7 @@ Rails.application.routes.draw do
get "merge-date"
get "helpdesk-ticket"
get "merge-start-confirmation"
+ get "user-outcomes"
get "delete-confirmation", to: "merge_requests#delete_confirmation"
delete "delete", to: "merge_requests#delete"
patch "start-merge", to: "merge_requests#start_merge"
diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb
index 0c84b3c95..4cc4c0376 100644
--- a/spec/requests/merge_requests_controller_spec.rb
+++ b/spec/requests/merge_requests_controller_spec.rb
@@ -449,6 +449,7 @@ RSpec.describe MergeRequestsController, type: :request do
describe "#show" do
before do
+ create(:merge_request_organisation, merge_request:, merging_organisation: other_organisation)
get "/merge-request/#{merge_request.id}", headers:
end
@@ -473,6 +474,35 @@ RSpec.describe MergeRequestsController, type: :request do
it "has begin merge button" do
expect(page).to have_link("Begin merge", href: merge_start_confirmation_merge_request_path(merge_request))
end
+
+ context "with unmerged request" do
+ let(:merge_request) { create(:merge_request, absorbing_organisation_id: organisation.id, merge_date: Time.zone.today) }
+
+ it "shows users count and has links to view merge outcomes" do
+ expect(page).to have_link("View", href: user_outcomes_merge_request_path(merge_request))
+ expect(page).to have_content("4 Users")
+ end
+ end
+
+ context "with a merged request" do
+ let(:merge_request) { create(:merge_request, request_merged: true, total_users: 34) }
+
+ it "shows saved users count and doesn't have links to view merge outcomes" do
+ expect(merge_request.status).to eq("request_merged")
+ expect(page).not_to have_link("View", href: user_outcomes_merge_request_path(merge_request))
+ expect(page).to have_content("34 Users")
+ end
+ end
+
+ context "with a processing request" do
+ let(:merge_request) { create(:merge_request, processing: true, total_users: 51) }
+
+ it "shows saved users count and doesn't have links to view merge outcomes" do
+ expect(merge_request.status).to eq("processing")
+ expect(page).not_to have_link("View", href: user_outcomes_merge_request_path(merge_request))
+ expect(page).to have_content("51 Users")
+ end
+ end
end
end