From 49ece41320d2e1e6b8124ade140d1b12fe489fe5 Mon Sep 17 00:00:00 2001 From: Patrick Bajao <ebajao@gitlab.com> Date: Thu, 20 Jul 2023 13:18:07 +0800 Subject: [PATCH] Add new REVIEW_SUBMITTED Todo action The REVIEW_SUBMITTED todo gets created when a review is submitted. This links to the MR that was reviewed. --- app/graphql/types/todo_action_enum.rb | 1 + app/helpers/todos_helper.rb | 1 + app/models/todo.rb | 4 +++- doc/api/graphql/reference/index.md | 1 + ee/app/services/ee/todo_service.rb | 12 ++++++++++++ ee/spec/services/todo_service_spec.rb | 20 ++++++++++++++++++++ locale/gitlab.pot | 3 +++ spec/factories/todos.rb | 4 ++++ spec/helpers/todos_helper_spec.rb | 1 + 9 files changed, 46 insertions(+), 1 deletion(-) diff --git a/app/graphql/types/todo_action_enum.rb b/app/graphql/types/todo_action_enum.rb index fda96796c0f2a..45b83ea1d6465 100644 --- a/app/graphql/types/todo_action_enum.rb +++ b/app/graphql/types/todo_action_enum.rb @@ -12,5 +12,6 @@ class TodoActionEnum < BaseEnum value 'merge_train_removed', value: 8, description: 'Merge request authored by the user was removed from the merge train.' value 'review_requested', value: 9, description: 'Review was requested from the user.' value 'member_access_requested', value: 10, description: 'Group or project access requested from the user.' + value 'review_submitted', value: 11, description: 'Merge request authored by the user received a review.' end end diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb index 9b0810f3d17c6..4f17634f3e435 100644 --- a/app/helpers/todos_helper.rb +++ b/app/helpers/todos_helper.rb @@ -30,6 +30,7 @@ def todo_action_name(todo) when Todo::MEMBER_ACCESS_REQUESTED then format( s_("Todos|has requested access to %{what} %{which}"), what: _(todo.member_access_type), which: _(todo.target.name) ) + when Todo::REVIEW_SUBMITTED then s_('Todos|reviewed your merge request') end end diff --git a/app/models/todo.rb b/app/models/todo.rb index f202e1a266dd6..2f2e731fc7ef7 100644 --- a/app/models/todo.rb +++ b/app/models/todo.rb @@ -24,6 +24,7 @@ class Todo < ApplicationRecord MERGE_TRAIN_REMOVED = 8 # This is an EE-only feature REVIEW_REQUESTED = 9 MEMBER_ACCESS_REQUESTED = 10 + REVIEW_SUBMITTED = 11 # This is an EE-only feature ACTION_NAMES = { ASSIGNED => :assigned, @@ -35,7 +36,8 @@ class Todo < ApplicationRecord UNMERGEABLE => :unmergeable, DIRECTLY_ADDRESSED => :directly_addressed, MERGE_TRAIN_REMOVED => :merge_train_removed, - MEMBER_ACCESS_REQUESTED => :member_access_requested + MEMBER_ACCESS_REQUESTED => :member_access_requested, + REVIEW_SUBMITTED => :review_submitted }.freeze ACTIONS_MULTIPLE_ALLOWED = [Todo::MENTIONED, Todo::DIRECTLY_ADDRESSED, Todo::MEMBER_ACCESS_REQUESTED].freeze diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index cbf39cf343ff4..820f598951278 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -26956,6 +26956,7 @@ Values for sorting timelogs. | <a id="todoactionenummentioned"></a>`mentioned` | User was mentioned. | | <a id="todoactionenummerge_train_removed"></a>`merge_train_removed` | Merge request authored by the user was removed from the merge train. | | <a id="todoactionenumreview_requested"></a>`review_requested` | Review was requested from the user. | +| <a id="todoactionenumreview_submitted"></a>`review_submitted` | Merge request authored by the user received a review. | | <a id="todoactionenumunmergeable"></a>`unmergeable` | Merge request authored by the user could not be merged. | ### `TodoStateEnum` diff --git a/ee/app/services/ee/todo_service.rb b/ee/app/services/ee/todo_service.rb index 6d1febdff64c6..cff159424a94d 100644 --- a/ee/app/services/ee/todo_service.rb +++ b/ee/app/services/ee/todo_service.rb @@ -40,6 +40,18 @@ def merge_train_removed(merge_request) end end + def review_submitted(review) + merge_request = review.merge_request + + # We don't need to create a To-Do for the review author if they added a + # review for their own merge request. + return if merge_request.author == review.author + + project = merge_request.project + attributes = attributes_for_todo(project, merge_request, review.author, ::Todo::REVIEW_SUBMITTED) + create_todos(merge_request.author, attributes, project.namespace, project) + end + private override :attributes_for_target diff --git a/ee/spec/services/todo_service_spec.rb b/ee/spec/services/todo_service_spec.rb index e4179412281f6..ea77b413ee1f0 100644 --- a/ee/spec/services/todo_service_spec.rb +++ b/ee/spec/services/todo_service_spec.rb @@ -389,6 +389,26 @@ end end end + + describe '#review_submitted' do + let(:review) { create(:review, merge_request: merge_request) } + + before do + service.review_submitted(review) + end + + it 'creates a pending todo for reviewed merge request author' do + should_create_todo(user: merge_request.author, author: review.author, target: merge_request, action: Todo::REVIEW_SUBMITTED) + end + + context 'when merge request author is the review author' do + let(:review) { create(:review, merge_request: merge_request, author: merge_request.author) } + + it 'does not create a pending todo for reviewed merge request author' do + should_not_create_todo(user: merge_request.author, author: review.author, target: merge_request, action: Todo::REVIEW_SUBMITTED) + end + end + end end def should_create_todo(attributes = {}) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index e7920c8e762a8..5f27e03299e7b 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -48428,6 +48428,9 @@ msgstr "" msgid "Todos|requested a review" msgstr "" +msgid "Todos|reviewed your merge request" +msgstr "" + msgid "Todos|set %{who} as an approver" msgstr "" diff --git a/spec/factories/todos.rb b/spec/factories/todos.rb index 760367539fc5f..12d77abe5c901 100644 --- a/spec/factories/todos.rb +++ b/spec/factories/todos.rb @@ -45,6 +45,10 @@ action { Todo::MEMBER_ACCESS_REQUESTED } end + trait :review_submitted do + action { Todo::REVIEW_SUBMITTED } + end + trait :pending do state { :pending } end diff --git a/spec/helpers/todos_helper_spec.rb b/spec/helpers/todos_helper_spec.rb index 9cbcca69dc893..dfb5cb995bc75 100644 --- a/spec/helpers/todos_helper_spec.rb +++ b/spec/helpers/todos_helper_spec.rb @@ -370,6 +370,7 @@ Todo::APPROVAL_REQUIRED | false | format(s_("Todos|set %{who} as an approver"), who: _('you')) Todo::UNMERGEABLE | true | s_('Todos|Could not merge') Todo::MERGE_TRAIN_REMOVED | true | s_("Todos|Removed from Merge Train") + Todo::REVIEW_SUBMITTED | false | s_('Todos|reviewed your merge request') end with_them do -- GitLab