From a88c47e65c5c9342f4790c5ffc4495ceb27b1368 Mon Sep 17 00:00:00 2001
From: Marco Zille <marco.zille@gmail.com>
Date: Sun, 7 Apr 2024 16:55:13 +0200
Subject: [PATCH] Exposed web_path on the MR GraphQL type

Changelog: added
---
 app/graphql/types/merge_request_type.rb       | 10 ++++++++++
 doc/api/graphql/reference/index.md            |  1 +
 spec/graphql/types/merge_request_type_spec.rb |  2 +-
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/app/graphql/types/merge_request_type.rb b/app/graphql/types/merge_request_type.rb
index 774f5a765d739..dd92cc4b18cb7 100644
--- a/app/graphql/types/merge_request_type.rb
+++ b/app/graphql/types/merge_request_type.rb
@@ -140,6 +140,12 @@ class MergeRequestType < BaseObject
     field :user_notes_count, GraphQL::Types::Int, null: true,
                                                   description: 'User notes count of the merge request.',
                                                   resolver: Resolvers::UserNotesCountResolver
+
+    field :web_path,
+          GraphQL::Types::String,
+          null: false,
+          description: 'Web path of the merge request.'
+
     field :web_url, GraphQL::Types::String, null: true,
                                             description: 'Web URL of the merge request.'
 
@@ -342,6 +348,10 @@ def detailed_merge_status
     def committers
       object.commits.committers
     end
+
+    def web_path
+      ::Gitlab::Routing.url_helpers.project_merge_request_path(object.project, object)
+    end
   end
 end
 
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 01295064525cb..16b0c3fc783f0 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -23267,6 +23267,7 @@ Defines which user roles, users, or groups can merge into a protected branch.
 | <a id="mergerequestuserdiscussionscount"></a>`userDiscussionsCount` | [`Int`](#int) | Number of user discussions in the merge request. |
 | <a id="mergerequestusernotescount"></a>`userNotesCount` | [`Int`](#int) | User notes count of the merge request. |
 | <a id="mergerequestuserpermissions"></a>`userPermissions` | [`MergeRequestPermissions!`](#mergerequestpermissions) | Permissions for the current user on the resource. |
+| <a id="mergerequestwebpath"></a>`webPath` | [`String!`](#string) | Web path of the merge request. |
 | <a id="mergerequestweburl"></a>`webUrl` | [`String`](#string) | Web URL of the merge request. |
 
 #### Fields with arguments
diff --git a/spec/graphql/types/merge_request_type_spec.rb b/spec/graphql/types/merge_request_type_spec.rb
index 4d1d651f0ca89..1652e25d1c459 100644
--- a/spec/graphql/types/merge_request_type_spec.rb
+++ b/spec/graphql/types/merge_request_type_spec.rb
@@ -28,7 +28,7 @@
       in_progress_merge_commit_sha
       merge_error allow_collaboration should_be_rebased rebase_commit_sha
       rebase_in_progress default_merge_commit_message
-      merge_ongoing mergeable_discussions_state web_url
+      merge_ongoing mergeable_discussions_state web_path web_url
       source_branch_exists target_branch_exists diverged_from_target_branch
       upvotes downvotes head_pipeline pipelines task_completion_status
       milestone assignees reviewers participants subscribed labels discussion_locked time_estimate
-- 
GitLab