diff --git a/app/models/milestone.rb b/app/models/milestone.rb index da6490611fde68061a86291c8f82b4f1bdd22969..0420aa90f526eada75b99518a2fec2ea617c63c6 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -170,6 +170,14 @@ def author_id alias_method :group_milestone?, :group_timebox? alias_method :project_milestone?, :project_timebox? + def parent + if group_milestone? + group + else + project + end + end + private def milestone_format_reference(format = :iid) diff --git a/ee/app/services/burnup_chart_service.rb b/ee/app/services/burnup_chart_service.rb index 31f427253d044801d96b952edbe04a44a77c43c2..f42a95aec5b5a22a73d9497e6d410a040bc3b07e 100644 --- a/ee/app/services/burnup_chart_service.rb +++ b/ee/app/services/burnup_chart_service.rb @@ -41,15 +41,7 @@ def execute attr_reader :milestone, :start_date, :due_date, :end_date, :user def can_read_milestone? - Ability.allowed?(user, :read_milestone, milestone_parent) - end - - def milestone_parent - if milestone.group_milestone? - milestone.group - else - milestone.project - end + Ability.allowed?(user, :read_milestone, milestone.parent) end def handle_added_milestone(event, assigned_milestones) diff --git a/spec/models/milestone_spec.rb b/spec/models/milestone_spec.rb index 9aaaf536351e6fd01d11035be6ceee2c4b207487..e51108947a7ae2c5fdeefb16ca0ac0aa888114cc 100644 --- a/spec/models/milestone_spec.rb +++ b/spec/models/milestone_spec.rb @@ -480,4 +480,22 @@ it { is_expected.not_to match("#{Gitlab.config.gitlab.url}/gitlab-org/gitlab-foss/issues/123") } it { is_expected.not_to match("gitlab-org/gitlab-ce/milestones/123") } end + + describe '#parent' do + context 'with group' do + it 'returns the expected parent' do + group = create(:group) + + expect(build(:milestone, group: group).parent).to eq(group) + end + end + + context 'with project' do + it 'returns the expected parent' do + project = create(:project) + + expect(build(:milestone, project: project).parent).to eq(project) + end + end + end end