summaryrefslogtreecommitdiff
path: root/spec/models/user_spec.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-10-18 18:06:21 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-10-18 18:06:21 +0000
commit6d59e989185a7d2645792b713d1b5d95d46651fd (patch)
treef89d869a6c557a3e6e0b9305290259ab1d6fb589 /spec/models/user_spec.rb
parent5c521d1f9b1e389e2f9b2b5fccf3798159a10f8d (diff)
downloadgitlab-ce-6d59e989185a7d2645792b713d1b5d95d46651fd.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/models/user_spec.rb')
-rw-r--r--spec/models/user_spec.rb74
1 files changed, 74 insertions, 0 deletions
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 240c917e7cf..8eb2f9b5bc0 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -3735,6 +3735,80 @@ describe User do
end
end
+ describe '#notification_settings_for' do
+ let(:user) { create(:user) }
+ let(:source) { nil }
+
+ subject { user.notification_settings_for(source) }
+
+ context 'when source is nil' do
+ it 'returns a blank global notification settings object' do
+ expect(subject.source).to eq(nil)
+ expect(subject.notification_email).to eq(nil)
+ expect(subject.level).to eq('global')
+ end
+ end
+
+ context 'when source is a Group' do
+ let(:group) { create(:group) }
+
+ subject { user.notification_settings_for(group, inherit: true) }
+
+ context 'when group has no existing notification settings' do
+ context 'when group has no ancestors' do
+ it 'will be a default Global notification setting' do
+ expect(subject.notification_email).to eq(nil)
+ expect(subject.level).to eq('global')
+ end
+ end
+
+ context 'when group has ancestors' do
+ context 'when an ancestor has a level other than Global' do
+ let(:ancestor) { create(:group) }
+ let(:group) { create(:group, parent: ancestor) }
+
+ before do
+ create(:notification_setting, user: user, source: ancestor, level: 'participating', notification_email: 'ancestor@example.com')
+ end
+
+ it 'has the same level set' do
+ expect(subject.level).to eq('participating')
+ end
+
+ it 'has the same email set' do
+ expect(subject.notification_email).to eq('ancestor@example.com')
+ end
+
+ context 'when inherit is false' do
+ subject { user.notification_settings_for(group) }
+
+ it 'does not inherit settings' do
+ expect(subject.notification_email).to eq(nil)
+ expect(subject.level).to eq('global')
+ end
+ end
+ end
+
+ context 'when an ancestor has a Global level but has an email set' do
+ let(:grand_ancestor) { create(:group) }
+ let(:ancestor) { create(:group, parent: grand_ancestor) }
+ let(:group) { create(:group, parent: ancestor) }
+
+ before do
+ create(:notification_setting, user: user, source: grand_ancestor, level: 'participating', notification_email: 'grand@example.com')
+ create(:notification_setting, user: user, source: ancestor, level: 'global', notification_email: 'ancestor@example.com')
+ end
+
+ it 'has the same email set' do
+ expect(subject.level).to eq('global')
+ expect(subject.notification_email).to eq('ancestor@example.com')
+ end
+ end
+ end
+ end
+ end
+ end
+
describe '#notification_email_for' do
let(:user) { create(:user) }
let(:group) { create(:group) }