From 27570b9c8b31a744c652fc849d0e42c3fef88d57 Mon Sep 17 00:00:00 2001 From: charlie ablett Date: Wed, 19 Jan 2022 17:49:20 +1300 Subject: [PATCH] Replace owner check with team owner method check Add tests --- app/models/issue.rb | 2 +- app/models/project_team.rb | 4 ++++ spec/models/project_team_spec.rb | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/app/models/issue.rb b/app/models/issue.rb index 4f2773f4147012..c14dcd938615da 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -584,7 +584,7 @@ def update_upvotes_count def readable_by?(user) if user.can_read_all_resources? true - elsif project.owner == user + elsif project.personal? && project.team.owner?(user) true elsif confidential? && !assignee_or_author?(user) project.team.member?(user, Gitlab::Access::REPORTER) diff --git a/app/models/project_team.rb b/app/models/project_team.rb index 8061554006d727..c3c7508df9f391 100644 --- a/app/models/project_team.rb +++ b/app/models/project_team.rb @@ -107,6 +107,10 @@ def owners end end + def owner?(user) + owners.include?(user) + end + def import(source_project, current_user = nil) target_project = project diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb index c0bad96effc151..d5af2d8090634c 100644 --- a/spec/models/project_team_spec.rb +++ b/spec/models/project_team_spec.rb @@ -77,6 +77,32 @@ end end + describe 'owner methods' do + context 'personal project' do + let(:project) { create(:project) } + let(:owner) { project.owner } + + specify { expect(project.team.owners).to contain_exactly(owner) } + specify { expect(project.team.owner?(owner)).to be_truthy } + end + + context 'group project' do + let(:group) { create(:group) } + let(:project) { create(:project, group: group) } + let(:user1) { create(:user) } + let(:user2) { create(:user) } + + before do + group.add_owner(user1) + group.add_owner(user2) + end + + specify { expect(project.team.owners).to contain_exactly(user1, user2) } + specify { expect(project.team.owner?(user1)).to be_truthy } + specify { expect(project.team.owner?(user2)).to be_truthy } + end + end + describe '#fetch_members' do context 'personal project' do let(:project) { create(:project) } -- GitLab