From 7995faeb6764d36c600cc209df20071abd4d4d30 Mon Sep 17 00:00:00 2001
From: jmiocene <jmiocene@gitlab.com>
Date: Mon, 8 Apr 2024 13:37:49 +0200
Subject: [PATCH] Show alert when project transfer is still running

Changelog: changed
---
 app/views/layouts/project.html.haml          |  1 +
 app/views/projects/_transferring_alert.haml  |  9 ++++++++
 locale/gitlab.pot                            |  6 +++++
 spec/views/layouts/project.html.haml_spec.rb | 23 +++++++++++++++++++-
 4 files changed, 38 insertions(+), 1 deletion(-)
 create mode 100644 app/views/projects/_transferring_alert.haml

diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index a0d993c73c54f..ee87e0ae159e7 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -22,6 +22,7 @@
   = render 'projects/invite_members_modal', project: @project
   = render_if_exists "shared/saml_reload_modal", group_or_project: @project
 
+= dispensable_render_if_exists "projects/transferring_alert", project: @project
 = dispensable_render_if_exists "projects/importing_alert", project: @project
 = dispensable_render_if_exists "shared/web_hooks/web_hook_disabled_alert"
 = dispensable_render_if_exists "projects/free_user_cap_alert", project: @project
diff --git a/app/views/projects/_transferring_alert.haml b/app/views/projects/_transferring_alert.haml
new file mode 100644
index 0000000000000..3546b7a17c519
--- /dev/null
+++ b/app/views/projects/_transferring_alert.haml
@@ -0,0 +1,9 @@
+- return unless project.git_transfer_in_progress?
+
+- content_for :page_level_alert do
+  = render Pajamas::AlertComponent.new(variant: :warning,
+    dismissible: false,
+    title: _('Transfer in progress'),
+    alert_options: { class: 'gl-mb-3', data: { testid: "transferring-alert" } }) do |c|
+    - c.with_body do
+      = s_('TransferProject|This project is being transferred. Do not make any changes to the project until the transfer is complete.')
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 0117709fb6e42..470921040ba49 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -54011,6 +54011,9 @@ msgstr ""
 msgid "Transfer group to another parent group."
 msgstr ""
 
+msgid "Transfer in progress"
+msgstr ""
+
 msgid "Transfer project"
 msgstr ""
 
@@ -54065,6 +54068,9 @@ msgstr ""
 msgid "TransferProject|Root namespace can't be updated if the project has NPM packages scoped to the current root level namespace."
 msgstr ""
 
+msgid "TransferProject|This project is being transferred. Do not make any changes to the project until the transfer is complete."
+msgstr ""
+
 msgid "TransferProject|You don't have permission to transfer projects into that namespace."
 msgstr ""
 
diff --git a/spec/views/layouts/project.html.haml_spec.rb b/spec/views/layouts/project.html.haml_spec.rb
index d19c600d9f20e..ac75c8259470b 100644
--- a/spec/views/layouts/project.html.haml_spec.rb
+++ b/spec/views/layouts/project.html.haml_spec.rb
@@ -4,10 +4,11 @@
 
 RSpec.describe 'layouts/project', feature_category: :groups_and_projects do
   let(:invite_member) { true }
+  let(:project) { build_stubbed(:project) }
 
   before do
     allow(view).to receive(:can_admin_project_member?).and_return(invite_member)
-    assign(:project, build_stubbed(:project))
+    assign(:project, project)
     allow(view).to receive(:current_user_mode).and_return(Gitlab::Auth::CurrentUserMode.new(build_stubbed(:user)))
   end
 
@@ -26,4 +27,24 @@
 
     it { is_expected.not_to have_selector('.js-invite-members-modal') }
   end
+
+  context 'with no transfer in progress' do
+    before do
+      allow(project).to receive(:git_transfer_in_progress?).and_return(false)
+    end
+
+    it 'does not render the alert' do
+      is_expected.not_to have_css('[data-testid="transferring-alert"]')
+    end
+  end
+
+  context 'with transfer in progress' do
+    before do
+      allow(project).to receive(:git_transfer_in_progress?).and_return(true)
+    end
+
+    it 'renders the alert' do
+      is_expected.to have_css('[data-testid="transferring-alert"]')
+    end
+  end
 end
-- 
GitLab