Commit 9b664910 authored by Thong Kuah's avatar Thong Kuah

Merge branch 'mwps-settings' into 'master'

Add notification settings for mwps

See merge request gitlab-org/gitlab!37880
parents 68da946d 25b31a44
...@@ -49,7 +49,8 @@ class NotificationSetting < ApplicationRecord ...@@ -49,7 +49,8 @@ class NotificationSetting < ApplicationRecord
:failed_pipeline, :failed_pipeline,
:fixed_pipeline, :fixed_pipeline,
:success_pipeline, :success_pipeline,
:moved_project :moved_project,
:merge_when_pipeline_succeeds
].freeze ].freeze
def self.email_events(source = nil) def self.email_events(source = nil)
......
...@@ -665,7 +665,12 @@ class NotificationService ...@@ -665,7 +665,12 @@ class NotificationService
end end
def merge_when_pipeline_succeeds(merge_request, current_user) def merge_when_pipeline_succeeds(merge_request, current_user)
recipients = ::NotificationRecipients::BuildService.build_recipients(merge_request, current_user, action: 'merge_when_pipeline_succeeds') recipients = ::NotificationRecipients::BuildService.build_recipients(
merge_request,
current_user,
action: 'merge_when_pipeline_succeeds',
custom_action: :merge_when_pipeline_succeeds
)
recipients.each do |recipient| recipients.each do |recipient|
mailer.merge_when_pipeline_succeeds_email(recipient.user.id, merge_request.id, current_user.id).deliver_later mailer.merge_when_pipeline_succeeds_email(recipient.user.id, merge_request.id, current_user.id).deliver_later
......
---
title: Add setting to control merge when pipeline succeeds notification
merge_request: 37880
author: Ravishankar
type: added
# frozen_string_literal: true
# See https://docs.gitlab.com/ee/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class AddMergeWhenPipelineSucceedsToNotificationSettings < ActiveRecord::Migration[6.0]
DOWNTIME = false
def change
add_column :notification_settings, :merge_when_pipeline_succeeds, :boolean, default: false, null: false
end
end
4c6061f6ab1cb9e070a3ae87d44caf12d2c110a6033f0b33898b4b7ea7e37055
\ No newline at end of file
...@@ -14530,7 +14530,8 @@ CREATE TABLE notification_settings ( ...@@ -14530,7 +14530,8 @@ CREATE TABLE notification_settings (
fixed_pipeline boolean, fixed_pipeline boolean,
new_release boolean, new_release boolean,
moved_project boolean DEFAULT true NOT NULL, moved_project boolean DEFAULT true NOT NULL,
change_reviewer_merge_request boolean change_reviewer_merge_request boolean,
merge_when_pipeline_succeeds boolean DEFAULT false NOT NULL
); );
CREATE SEQUENCE notification_settings_id_seq CREATE SEQUENCE notification_settings_id_seq
...@@ -39,6 +39,7 @@ If the `custom` level is used, specific email events can be controlled. Availabl ...@@ -39,6 +39,7 @@ If the `custom` level is used, specific email events can be controlled. Availabl
- `fixed_pipeline` - `fixed_pipeline`
- `success_pipeline` - `success_pipeline`
- `moved_project` - `moved_project`
- `merge_when_pipeline_succeeds`
- `new_epic` **(ULTIMATE)** - `new_epic` **(ULTIMATE)**
## Global notification settings ## Global notification settings
...@@ -94,6 +95,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab ...@@ -94,6 +95,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
| `fixed_pipeline` | boolean | no | Enable/disable this notification | | `fixed_pipeline` | boolean | no | Enable/disable this notification |
| `success_pipeline` | boolean | no | Enable/disable this notification | | `success_pipeline` | boolean | no | Enable/disable this notification |
| `moved_project` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30371) in GitLab 13.3) | | `moved_project` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30371) in GitLab 13.3) |
| `merge_when_pipeline_succeeds` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/244840) in GitLab 13.9) |
| `new_epic` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5863) in GitLab 11.3) **(ULTIMATE)** | | `new_epic` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5863) in GitLab 11.3) **(ULTIMATE)** |
Example response: Example response:
...@@ -165,6 +167,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab ...@@ -165,6 +167,7 @@ curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab
| `fixed_pipeline` | boolean | no | Enable/disable this notification | | `fixed_pipeline` | boolean | no | Enable/disable this notification |
| `success_pipeline` | boolean | no | Enable/disable this notification | | `success_pipeline` | boolean | no | Enable/disable this notification |
| `moved_project` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30371) in GitLab 13.3) | | `moved_project` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30371) in GitLab 13.3) |
| `merge_when_pipeline_succeeds` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/244840) in GitLab 13.9) |
| `new_epic` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5863) in GitLab 11.3) **(ULTIMATE)** | | `new_epic` | boolean | no | Enable/disable this notification ([Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5863) in GitLab 11.3) **(ULTIMATE)** |
Example responses: Example responses:
......
...@@ -206,7 +206,7 @@ epics: ...@@ -206,7 +206,7 @@ epics:
| Failed pipeline | The author of the pipeline | | Failed pipeline | The author of the pipeline |
| Fixed pipeline ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/24309) in GitLab 13.1.) | The author of the pipeline. Enabled by default. | | Fixed pipeline ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/24309) in GitLab 13.1.) | The author of the pipeline. Enabled by default. |
| Merge merge request | | | Merge merge request | |
| Merge when pipeline succeeds ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/211961) in GitLab 13.4) | | | Merge when pipeline succeeds ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/211961) in GitLab 13.4) | Author, Participants, Watchers, Subscribers, and Custom notification level with this event selected. `Note:` Custom notification level is ignored for Author, Watchers and Subscribers |
| New comment | Participants, Watchers, Subscribers, and Custom notification level with this event selected, plus anyone mentioned by `@username` in the comment, with notification level "Mention" or higher | | New comment | Participants, Watchers, Subscribers, and Custom notification level with this event selected, plus anyone mentioned by `@username` in the comment, with notification level "Mention" or higher |
| New epic | | | New epic | |
| New issue | | | New issue | |
......
...@@ -30,6 +30,7 @@ RSpec.describe NotificationSetting do ...@@ -30,6 +30,7 @@ RSpec.describe NotificationSetting do
:fixed_pipeline, :fixed_pipeline,
:success_pipeline, :success_pipeline,
:moved_project, :moved_project,
:merge_when_pipeline_succeeds,
:new_epic :new_epic
] ]
) )
...@@ -59,7 +60,8 @@ RSpec.describe NotificationSetting do ...@@ -59,7 +60,8 @@ RSpec.describe NotificationSetting do
:failed_pipeline, :failed_pipeline,
:fixed_pipeline, :fixed_pipeline,
:success_pipeline, :success_pipeline,
:moved_project :moved_project,
:merge_when_pipeline_succeeds
] ]
) )
end end
...@@ -89,6 +91,7 @@ RSpec.describe NotificationSetting do ...@@ -89,6 +91,7 @@ RSpec.describe NotificationSetting do
:fixed_pipeline, :fixed_pipeline,
:success_pipeline, :success_pipeline,
:moved_project, :moved_project,
:merge_when_pipeline_succeeds,
:new_epic :new_epic
] ]
) )
......
...@@ -20466,6 +20466,9 @@ msgstr "" ...@@ -20466,6 +20466,9 @@ msgstr ""
msgid "NotificationEvent|Merge merge request" msgid "NotificationEvent|Merge merge request"
msgstr "" msgstr ""
msgid "NotificationEvent|Merge when pipeline succeeds"
msgstr ""
msgid "NotificationEvent|Moved project" msgid "NotificationEvent|Moved project"
msgstr "" msgstr ""
......
...@@ -21,3 +21,4 @@ N_('NotificationEvent|Merge merge request') ...@@ -21,3 +21,4 @@ N_('NotificationEvent|Merge merge request')
N_('NotificationEvent|Failed pipeline') N_('NotificationEvent|Failed pipeline')
N_('NotificationEvent|Fixed pipeline') N_('NotificationEvent|Fixed pipeline')
N_('NotificationEvent|Moved project') N_('NotificationEvent|Moved project')
N_('NotificationEvent|Merge when pipeline succeeds')
...@@ -337,6 +337,39 @@ RSpec.describe NotificationRecipient do ...@@ -337,6 +337,39 @@ RSpec.describe NotificationRecipient do
expect(recipient.suitable_notification_level?).to eq true expect(recipient.suitable_notification_level?).to eq true
end end
end end
context 'with merge_when_pipeline_succeeds' do
let(:notification_setting) { user.notification_settings_for(project) }
let(:recipient) do
described_class.new(
user,
:watch,
custom_action: :merge_when_pipeline_succeeds,
target: target,
project: project
)
end
context 'custom event enabled' do
before do
notification_setting.update!(merge_when_pipeline_succeeds: true)
end
it 'returns true' do
expect(recipient.suitable_notification_level?).to eq true
end
end
context 'custom event disabled' do
before do
notification_setting.update!(merge_when_pipeline_succeeds: false)
end
it 'returns false' do
expect(recipient.suitable_notification_level?).to eq false
end
end
end
end end
end end
......
...@@ -180,7 +180,8 @@ RSpec.describe NotificationSetting do ...@@ -180,7 +180,8 @@ RSpec.describe NotificationSetting do
:failed_pipeline, :failed_pipeline,
:success_pipeline, :success_pipeline,
:fixed_pipeline, :fixed_pipeline,
:moved_project :moved_project,
:merge_when_pipeline_succeeds
) )
end end
......
...@@ -2159,8 +2159,38 @@ RSpec.describe NotificationService, :mailer do ...@@ -2159,8 +2159,38 @@ RSpec.describe NotificationService, :mailer do
end end
describe '#merge_when_pipeline_succeeds' do describe '#merge_when_pipeline_succeeds' do
before do
update_custom_notification(:merge_when_pipeline_succeeds, @u_guest_custom, resource: project)
update_custom_notification(:merge_when_pipeline_succeeds, @u_custom_global)
end
it 'send notification that merge will happen when pipeline succeeds' do it 'send notification that merge will happen when pipeline succeeds' do
notification.merge_when_pipeline_succeeds(merge_request, assignee) notification.merge_when_pipeline_succeeds(merge_request, assignee)
should_email(merge_request.author)
should_email(@u_watcher)
should_email(@subscriber)
should_email(@u_guest_custom)
should_email(@u_custom_global)
should_not_email(@unsubscriber)
should_not_email(@u_disabled)
end
it 'does not send notification if the custom event is disabled' do
update_custom_notification(:merge_when_pipeline_succeeds, @u_guest_custom, resource: project, value: false)
update_custom_notification(:merge_when_pipeline_succeeds, @u_custom_global, resource: nil, value: false)
notification.merge_when_pipeline_succeeds(merge_request, assignee)
should_not_email(@u_guest_custom)
should_not_email(@u_custom_global)
end
it 'sends notification to participants even if the custom event is disabled' do
update_custom_notification(:merge_when_pipeline_succeeds, merge_request.author, resource: project, value: false)
update_custom_notification(:merge_when_pipeline_succeeds, @u_watcher, resource: project, value: false)
update_custom_notification(:merge_when_pipeline_succeeds, @subscriber, resource: project, value: false)
notification.merge_when_pipeline_succeeds(merge_request, assignee)
should_email(merge_request.author) should_email(merge_request.author)
should_email(@u_watcher) should_email(@u_watcher)
should_email(@subscriber) should_email(@subscriber)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment