From aea2c40248fdc2e6edc7ba56b84c59d2e14acb8f Mon Sep 17 00:00:00 2001
From: Payton Burdette <pburdette@gitlab.com>
Date: Fri, 26 Jul 2024 16:06:04 +0000
Subject: [PATCH] Add new merge trains link

Add a link to the merge trains viz

Changelog: added
EE: true
---
 .../merge_requests/_nav_btns.html.haml        |  1 +
 .../_merge_trains_button.html.haml            |  3 +
 .../user_sees_nav_buttons_spec.rb             | 61 +++++++++++++++++++
 .../user_sees_nav_buttons_spec.rb             | 55 +++++++++++++++++
 4 files changed, 120 insertions(+)
 create mode 100644 ee/app/views/projects/merge_requests/_merge_trains_button.html.haml
 create mode 100644 ee/spec/features/merge_requests/user_sees_nav_buttons_spec.rb
 create mode 100644 spec/features/merge_requests/user_sees_nav_buttons_spec.rb

diff --git a/app/views/projects/merge_requests/_nav_btns.html.haml b/app/views/projects/merge_requests/_nav_btns.html.haml
index d1e3f759f745a..130d0c848a252 100644
--- a/app/views/projects/merge_requests/_nav_btns.html.haml
+++ b/app/views/projects/merge_requests/_nav_btns.html.haml
@@ -1,3 +1,4 @@
+= render_if_exists 'projects/merge_requests/merge_trains_button'
 - if @can_bulk_update
   = render Pajamas::ButtonComponent.new(type: :submit, button_options: { class: 'gl-mr-3 js-bulk-update-toggle' }) do
     = _("Bulk edit")
diff --git a/ee/app/views/projects/merge_requests/_merge_trains_button.html.haml b/ee/app/views/projects/merge_requests/_merge_trains_button.html.haml
new file mode 100644
index 0000000000000..5be8815a5803b
--- /dev/null
+++ b/ee/app/views/projects/merge_requests/_merge_trains_button.html.haml
@@ -0,0 +1,3 @@
+- if merge_trains_available? && can?(@current_user, :read_merge_train, @project)
+  = render Pajamas::ButtonComponent.new(href: project_merge_trains_path(@project)) do
+    = _("Merge trains")
diff --git a/ee/spec/features/merge_requests/user_sees_nav_buttons_spec.rb b/ee/spec/features/merge_requests/user_sees_nav_buttons_spec.rb
new file mode 100644
index 0000000000000..1cbfb30515081
--- /dev/null
+++ b/ee/spec/features/merge_requests/user_sees_nav_buttons_spec.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Merge request > User sees nav buttons', :js, feature_category: :code_review_workflow do
+  let_it_be(:project) { create(:project) }
+  let_it_be(:maintainer) { create(:user) }
+  let_it_be(:guest) { create(:user) }
+  let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
+
+  before_all do
+    project.add_maintainer(maintainer)
+    project.add_guest(guest)
+  end
+
+  context 'as a maintainer' do
+    before do
+      project.update!(merge_trains_enabled: true)
+      stub_licensed_features(merge_trains: true)
+
+      sign_in(maintainer)
+
+      visit project_merge_requests_path(project)
+    end
+
+    it 'shows the "New merge request" link' do
+      expect(page).to have_link 'New merge request', href: project_new_merge_request_path(project)
+    end
+
+    it 'shows the "Bulk edit" button' do
+      expect(page).to have_button 'Bulk edit'
+    end
+
+    it 'shows the "Merge trains" link' do
+      expect(page).to have_link 'Merge trains', href: project_merge_trains_path(project)
+    end
+  end
+
+  context 'as a guest' do
+    before do
+      project.update!(merge_trains_enabled: true)
+      stub_licensed_features(merge_trains: true)
+
+      sign_in(guest)
+
+      visit project_merge_requests_path(project)
+    end
+
+    it 'does not show the "New merge request" link' do
+      expect(page).not_to have_link 'New merge request'
+    end
+
+    it 'does not show the "Bulk edit" button' do
+      expect(page).not_to have_button 'Bulk edit'
+    end
+
+    it 'does not show the "Merge trains" link' do
+      expect(page).not_to have_link 'Merge trains'
+    end
+  end
+end
diff --git a/spec/features/merge_requests/user_sees_nav_buttons_spec.rb b/spec/features/merge_requests/user_sees_nav_buttons_spec.rb
new file mode 100644
index 0000000000000..3679a2eed1d69
--- /dev/null
+++ b/spec/features/merge_requests/user_sees_nav_buttons_spec.rb
@@ -0,0 +1,55 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Merge request > User sees nav buttons', feature_category: :code_review_workflow do
+  let_it_be(:project) { create(:project) }
+  let_it_be(:maintainer) { create(:user) }
+  let_it_be(:guest) { create(:user) }
+  let_it_be(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
+
+  before_all do
+    project.add_maintainer(maintainer)
+    project.add_guest(guest)
+  end
+
+  context 'as a maintainer' do
+    before do
+      sign_in(maintainer)
+
+      visit project_merge_requests_path(project)
+    end
+
+    it 'shows the "New merge request" button' do
+      expect(page).to have_link 'New merge request', href: project_new_merge_request_path(project)
+    end
+
+    it 'shows the "Bulk edit" button' do
+      expect(page).to have_button 'Bulk edit'
+    end
+
+    it 'does not show the "Merge trains" button' do
+      expect(page).not_to have_link 'Merge trains'
+    end
+  end
+
+  context 'as a guest' do
+    before do
+      sign_in(guest)
+
+      visit project_merge_requests_path(project)
+    end
+
+    it 'does not show the "New merge request" button' do
+      expect(page).not_to have_link 'New merge request'
+    end
+
+    it 'does not show the "Bulk edit" button' do
+      expect(page).not_to have_button 'Bulk edit'
+    end
+
+    it 'does not show the "Merge trains" button' do
+      expect(page).not_to have_link 'Merge trains'
+    end
+  end
+end
-- 
GitLab