Skip to content
Snippets Groups Projects
Commit d879e7e8 authored by Chantal Rollison's avatar Chantal Rollison
Browse files

Add email notification for milestone changes

parent 716a52ed
No related branches found
No related tags found
No related merge requests found
<%= render 'removed_milestone_merge_request_email', issuable: @merge_request %>
---
title: Add email for milestone change
merge_request: 22279
author:
type: added
Loading
Loading
@@ -343,7 +343,40 @@ describe Issues::UpdateService, :mailer do
end
end
 
context 'when the milestone change' do
context 'when the milestone is removed' do
let!(:non_subscriber) { create(:user) }
let!(:subscriber) do
create(:user).tap do |u|
issue.toggle_subscription(u, project)
project.add_developer(u)
end
end
it_behaves_like 'system notes for milestones'
it 'sends notifications for subscribers of changed milestone' do
issue.milestone = create(:milestone)
issue.save
perform_enqueued_jobs do
update_issue(milestone_id: "")
end
should_email(subscriber)
should_not_email(non_subscriber)
end
end
context 'when the milestone is changed' do
let!(:non_subscriber) { create(:user) }
let!(:subscriber) do
create(:user).tap do |u|
issue.toggle_subscription(u, project)
project.add_developer(u)
end
end
it 'marks todos as done' do
update_issue(milestone: create(:milestone))
 
Loading
Loading
@@ -351,6 +384,15 @@ describe Issues::UpdateService, :mailer do
end
 
it_behaves_like 'system notes for milestones'
it 'sends notifications for subscribers of changed milestone' do
perform_enqueued_jobs do
update_issue(milestone: create(:milestone))
end
should_email(subscriber)
should_not_email(non_subscriber)
end
end
 
context 'when the labels change' do
Loading
Loading
Loading
Loading
@@ -315,7 +315,40 @@ describe MergeRequests::UpdateService, :mailer do
end
end
 
context 'when the milestone change' do
context 'when the milestone is removed' do
let!(:non_subscriber) { create(:user) }
let!(:subscriber) do
create(:user).tap do |u|
merge_request.toggle_subscription(u, project)
project.add_developer(u)
end
end
it_behaves_like 'system notes for milestones'
it 'sends notifications for subscribers of changed milestone' do
merge_request.milestone = create(:milestone)
merge_request.save
perform_enqueued_jobs do
update_merge_request(milestone_id: "")
end
should_email(subscriber)
should_not_email(non_subscriber)
end
end
context 'when the milestone is changed' do
let!(:non_subscriber) { create(:user) }
let!(:subscriber) do
create(:user).tap do |u|
merge_request.toggle_subscription(u, project)
project.add_developer(u)
end
end
it 'marks pending todos as done' do
update_merge_request({ milestone: create(:milestone) })
 
Loading
Loading
@@ -323,6 +356,15 @@ describe MergeRequests::UpdateService, :mailer do
end
 
it_behaves_like 'system notes for milestones'
it 'sends notifications for subscribers of changed milestone' do
perform_enqueued_jobs do
update_merge_request(milestone: create(:milestone))
end
should_email(subscriber)
should_not_email(non_subscriber)
end
end
 
context 'when the labels change' do
Loading
Loading
Loading
Loading
@@ -952,6 +952,134 @@ describe NotificationService, :mailer do
end
end
 
describe '#removed_milestone_issue' do
let(:milestone) { create(:milestone, project: project, issues: [issue]) }
let!(:subscriber_to_milestone) { create(:user) { |u| issue.toggle_subscription(u, project) } }
it "doesn't send email to anyone but subscribers of the given milestone" do
notification.removed_milestone_issue(issue, issue.author)
should_email(subscriber_to_milestone)
issue.assignees.each do |a|
should_email(a)
end
should_email(@u_watcher)
should_email(@u_guest_watcher)
should_email(@u_participant_mentioned)
should_email(@subscriber)
should_email(@subscribed_participant)
should_email(@watcher_and_subscriber)
should_not_email(@u_guest_custom)
should_not_email(@u_committer)
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_lazy_participant)
should_not_email(issue.author)
should_not_email(@u_disabled)
should_not_email(@u_custom_global)
should_not_email(@u_mentioned)
end
context 'confidential issues' do
let(:author) { create(:user) }
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:confidential_issue) { create(:issue, :confidential, project: project, title: 'Confidential issue', author: author, assignees: [assignee]) }
let(:milestone) { create(:milestone, project: project, issues: [confidential_issue]) }
it "emails subscribers of the issue's milestone that can read the issue" do
project.add_developer(member)
project.add_guest(guest)
confidential_issue.subscribe(non_member, project)
confidential_issue.subscribe(author, project)
confidential_issue.subscribe(assignee, project)
confidential_issue.subscribe(member, project)
confidential_issue.subscribe(guest, project)
confidential_issue.subscribe(admin, project)
reset_delivered_emails!
notification.removed_milestone_issue(confidential_issue, @u_disabled)
should_not_email(non_member)
should_not_email(guest)
should_email(author)
should_email(assignee)
should_email(member)
should_email(admin)
end
end
end
describe '#changed_milestone_issue' do
let(:new_milestone) { create(:milestone, project: project, issues: [issue]) }
let!(:subscriber_to_new_milestone) { create(:user) { |u| issue.toggle_subscription(u, project) } }
it "doesn't send email to anyone but subscribers of the given milestone" do
notification.changed_milestone_issue(issue, new_milestone, issue.author)
should_email(subscriber_to_new_milestone)
issue.assignees.each do |a|
should_email(a)
end
should_email(@u_watcher)
should_email(@u_guest_watcher)
should_email(@u_participant_mentioned)
should_email(@subscriber)
should_email(@subscribed_participant)
should_email(@watcher_and_subscriber)
should_not_email(@u_guest_custom)
should_not_email(@u_committer)
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_lazy_participant)
should_not_email(issue.author)
should_not_email(@u_disabled)
should_not_email(@u_custom_global)
should_not_email(@u_mentioned)
end
context 'confidential issues' do
let(:author) { create(:user) }
let(:assignee) { create(:user) }
let(:non_member) { create(:user) }
let(:member) { create(:user) }
let(:guest) { create(:user) }
let(:admin) { create(:admin) }
let(:confidential_issue) { create(:issue, :confidential, project: project, title: 'Confidential issue', author: author, assignees: [assignee]) }
let(:new_milestone) { create(:milestone, project: project, issues: [confidential_issue]) }
it "emails subscribers of the issue's milestone that can read the issue" do
project.add_developer(member)
project.add_guest(guest)
confidential_issue.subscribe(non_member, project)
confidential_issue.subscribe(author, project)
confidential_issue.subscribe(assignee, project)
confidential_issue.subscribe(member, project)
confidential_issue.subscribe(guest, project)
confidential_issue.subscribe(admin, project)
reset_delivered_emails!
notification.changed_milestone_issue(confidential_issue, new_milestone, @u_disabled)
should_not_email(non_member)
should_not_email(guest)
should_email(author)
should_email(assignee)
should_email(member)
should_email(admin)
end
end
end
describe '#close_issue' do
before do
update_custom_notification(:close_issue, @u_guest_custom, resource: project)
Loading
Loading
@@ -1304,6 +1432,64 @@ describe NotificationService, :mailer do
end
end
 
describe '#removed_milestone_merge_request' do
let(:milestone) { create(:milestone, project: project, merge_requests: [merge_request]) }
let!(:subscriber_to_milestone) { create(:user) { |u| merge_request.toggle_subscription(u, project) } }
it "doesn't send email to anyone but subscribers of the given milestone" do
notification.removed_milestone_merge_request(merge_request, merge_request.author)
should_email(subscriber_to_milestone)
merge_request.assignees.each do |a|
should_email(a)
end
should_email(@u_watcher)
should_email(@u_guest_watcher)
should_email(@u_participant_mentioned)
should_email(@subscriber)
should_email(@subscribed_participant)
should_email(@watcher_and_subscriber)
should_not_email(@u_guest_custom)
should_not_email(@u_committer)
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_lazy_participant)
should_not_email(merge_request.author)
should_not_email(@u_disabled)
should_not_email(@u_custom_global)
should_not_email(@u_mentioned)
end
end
describe '#changed_milestone_merge_request' do
let(:new_milestone) { create(:milestone, project: project, merge_requests: [merge_request]) }
let!(:subscriber_to_new_milestone) { create(:user) { |u| merge_request.toggle_subscription(u, project) } }
it "doesn't send email to anyone but subscribers of the given milestone" do
notification.changed_milestone_merge_request(merge_request, new_milestone, merge_request.author)
should_email(subscriber_to_new_milestone)
should_email(merge_request.assignee)
should_email(@u_watcher)
should_email(@u_guest_watcher)
should_email(@u_participant_mentioned)
should_email(@subscriber)
should_email(@subscribed_participant)
should_email(@watcher_and_subscriber)
should_not_email(@u_guest_custom)
should_not_email(@u_committer)
should_not_email(@unsubscriber)
should_not_email(@u_participating)
should_not_email(@u_lazy_participant)
should_not_email(merge_request.author)
should_not_email(@u_disabled)
should_not_email(@u_custom_global)
should_not_email(@u_mentioned)
end
end
describe '#merge_request_unmergeable' do
it "sends email to merge request author" do
notification.merge_request_unmergeable(merge_request)
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment