Commit 9fe93e3c authored by Sean McGivern's avatar Sean McGivern

Merge branch '23888-fix-unsubscription-link-for-snippet-notification' into 'master'

Don't show an "Unsubscribe" link in snippet comment notifications

Closes #23888

See merge request gitlab-org/gitlab-ce!14764
parents 8ed259b0 3acbbb1a
...@@ -53,13 +53,17 @@ class SentNotification < ActiveRecord::Base ...@@ -53,13 +53,17 @@ class SentNotification < ActiveRecord::Base
end end
def unsubscribable? def unsubscribable?
!for_commit? !(for_commit? || for_snippet?)
end end
def for_commit? def for_commit?
noteable_type == "Commit" noteable_type == "Commit"
end end
def for_snippet?
noteable_type.end_with?('Snippet')
end
def noteable def noteable
if for_commit? if for_commit?
project.commit(commit_id) rescue nil project.commit(commit_id) rescue nil
......
---
title: Don't show an "Unsubscribe" link in snippet comment notifications
merge_request: 14764
author:
type: fixed
This diff is collapsed.
require 'spec_helper' require 'spec_helper'
describe SentNotification do describe SentNotification do
set(:user) { create(:user) }
set(:project) { create(:project) }
describe 'validation' do describe 'validation' do
describe 'note validity' do describe 'note validity' do
context "when the project doesn't match the noteable's project" do context "when the project doesn't match the noteable's project" do
...@@ -34,7 +37,6 @@ describe SentNotification do ...@@ -34,7 +37,6 @@ describe SentNotification do
end end
describe '.record' do describe '.record' do
let(:user) { create(:user) }
let(:issue) { create(:issue) } let(:issue) { create(:issue) }
it 'creates a new SentNotification' do it 'creates a new SentNotification' do
...@@ -43,7 +45,6 @@ describe SentNotification do ...@@ -43,7 +45,6 @@ describe SentNotification do
end end
describe '.record_note' do describe '.record_note' do
let(:user) { create(:user) }
let(:note) { create(:diff_note_on_merge_request) } let(:note) { create(:diff_note_on_merge_request) }
it 'creates a new SentNotification' do it 'creates a new SentNotification' do
...@@ -51,6 +52,123 @@ describe SentNotification do ...@@ -51,6 +52,123 @@ describe SentNotification do
end end
end end
describe '#unsubscribable?' do
shared_examples 'an unsubscribable notification' do |noteable_type|
subject { described_class.record(noteable, user.id) }
context "for #{noteable_type}" do
it { expect(subject).to be_unsubscribable }
end
end
shared_examples 'a non-unsubscribable notification' do |noteable_type|
subject { described_class.record(noteable, user.id) }
context "for a #{noteable_type}" do
it { expect(subject).not_to be_unsubscribable }
end
end
it_behaves_like 'an unsubscribable notification', 'issue' do
let(:noteable) { create(:issue, project: project) }
end
it_behaves_like 'an unsubscribable notification', 'merge request' do
let(:noteable) { create(:merge_request, source_project: project) }
end
it_behaves_like 'a non-unsubscribable notification', 'commit' do
let(:project) { create(:project, :repository) }
let(:noteable) { project.commit }
end
it_behaves_like 'a non-unsubscribable notification', 'personal snippet' do
let(:noteable) { create(:personal_snippet, project: project) }
end
it_behaves_like 'a non-unsubscribable notification', 'project snippet' do
let(:noteable) { create(:project_snippet, project: project) }
end
end
describe '#for_commit?' do
shared_examples 'a commit notification' do |noteable_type|
subject { described_class.record(noteable, user.id) }
context "for #{noteable_type}" do
it { expect(subject).to be_for_commit }
end
end
shared_examples 'a non-commit notification' do |noteable_type|
subject { described_class.record(noteable, user.id) }
context "for a #{noteable_type}" do
it { expect(subject).not_to be_for_commit }
end
end
it_behaves_like 'a non-commit notification', 'issue' do
let(:noteable) { create(:issue, project: project) }
end
it_behaves_like 'a non-commit notification', 'merge request' do
let(:noteable) { create(:merge_request, source_project: project) }
end
it_behaves_like 'a commit notification', 'commit' do
let(:project) { create(:project, :repository) }
let(:noteable) { project.commit }
end
it_behaves_like 'a non-commit notification', 'personal snippet' do
let(:noteable) { create(:personal_snippet, project: project) }
end
it_behaves_like 'a non-commit notification', 'project snippet' do
let(:noteable) { create(:project_snippet, project: project) }
end
end
describe '#for_snippet?' do
shared_examples 'a snippet notification' do |noteable_type|
subject { described_class.record(noteable, user.id) }
context "for #{noteable_type}" do
it { expect(subject).to be_for_snippet }
end
end
shared_examples 'a non-snippet notification' do |noteable_type|
subject { described_class.record(noteable, user.id) }
context "for a #{noteable_type}" do
it { expect(subject).not_to be_for_snippet }
end
end
it_behaves_like 'a non-snippet notification', 'issue' do
let(:noteable) { create(:issue, project: project) }
end
it_behaves_like 'a non-snippet notification', 'merge request' do
let(:noteable) { create(:merge_request, source_project: project) }
end
it_behaves_like 'a non-snippet notification', 'commit' do
let(:project) { create(:project, :repository) }
let(:noteable) { project.commit }
end
it_behaves_like 'a snippet notification', 'personal snippet' do
let(:noteable) { create(:personal_snippet, project: project) }
end
it_behaves_like 'a snippet notification', 'project snippet' do
let(:noteable) { create(:project_snippet, project: project) }
end
end
describe '#create_reply' do describe '#create_reply' do
context 'for issue' do context 'for issue' do
let(:issue) { create(:issue) } let(:issue) { create(:issue) }
......
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