summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Thomas <nick@gitlab.com>2018-09-21 15:13:15 +0100
committerNick Thomas <nick@gitlab.com>2018-09-21 15:13:15 +0100
commite5f83afc60439d5b22a8604d6429218ff9ddf4c2 (patch)
tree87c3a7a8a4177fff4b0c6e949c4332305c3f3530
parent45ced6c5de760ef64b1f5e201ce518b1912c7704 (diff)
downloadgitlab-ce-e5f83afc60439d5b22a8604d6429218ff9ddf4c2.tar.gz
Fix Event#visible_to_user? for milestones
-rw-r--r--app/models/event.rb2
-rw-r--r--spec/models/event_spec.rb37
2 files changed, 38 insertions, 1 deletions
diff --git a/app/models/event.rb b/app/models/event.rb
index 596155a9525..2d9097a7769 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -160,7 +160,7 @@ class Event < ActiveRecord::Base
elsif merge_request? || merge_request_note?
Ability.allowed?(user, :read_merge_request, note? ? note_target : target)
elsif milestone?
- Ability.allowed?(user, :read_project, project)
+ Ability.allowed?(user, :read_milestone, project)
else
false # No other event types are visible
end
diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb
index c1eac4fa489..15bcaa19d5b 100644
--- a/spec/models/event_spec.rb
+++ b/spec/models/event_spec.rb
@@ -151,6 +151,7 @@ describe Event do
let(:note_on_commit) { create(:note_on_commit, project: project) }
let(:note_on_issue) { create(:note_on_issue, noteable: issue, project: project) }
let(:note_on_confidential_issue) { create(:note_on_issue, noteable: confidential_issue, project: project) }
+ let(:milestone_on_project) { create(:milestone, project: project) }
let(:event) { described_class.new(project: project, target: target, author_id: author.id) }
before do
@@ -268,6 +269,42 @@ describe Event do
end
end
end
+
+ context 'milestone event' do
+ let(:target) { milestone_on_project }
+
+ it do
+ expect(event.visible_to_user?(nil)).to be_truthy
+ expect(event.visible_to_user?(non_member)).to be_truthy
+ expect(event.visible_to_user?(member)).to be_truthy
+ expect(event.visible_to_user?(guest)).to be_truthy
+ expect(event.visible_to_user?(admin)).to be_truthy
+ end
+
+ context 'on public project with private issue tracker and merge requests' do
+ let(:project) { create(:project, :public, :issues_private, :merge_requests_private) }
+
+ it do
+ expect(event.visible_to_user?(nil)).to be_falsy
+ expect(event.visible_to_user?(non_member)).to be_falsy
+ expect(event.visible_to_user?(member)).to be_truthy
+ expect(event.visible_to_user?(guest)).to be_truthy
+ expect(event.visible_to_user?(admin)).to be_truthy
+ end
+ end
+
+ context 'on private project' do
+ let(:project) { create(:project, :private) }
+
+ it do
+ expect(event.visible_to_user?(nil)).to be_falsy
+ expect(event.visible_to_user?(non_member)).to be_falsy
+ expect(event.visible_to_user?(member)).to be_truthy
+ expect(event.visible_to_user?(guest)).to be_truthy
+ expect(event.visible_to_user?(admin)).to be_truthy
+ end
+ end
+ end
end
describe '.limit_recent' do