Merge branch 'bvl-shared-groups-on-group-page' into 'master'
Fix issues on groups group trees Closes #42407 See merge request gitlab-org/gitlab-ce!18390
This commit is contained in:
commit
a3bbd03918
5 changed files with 37 additions and 15 deletions
|
@ -134,10 +134,8 @@ class GroupDescendantsFinder
|
|||
end
|
||||
|
||||
def direct_child_projects
|
||||
GroupProjectsFinder.new(group: parent_group,
|
||||
current_user: current_user,
|
||||
options: { only_owned: true },
|
||||
params: params).execute
|
||||
GroupProjectsFinder.new(group: parent_group, current_user: current_user, params: params)
|
||||
.execute
|
||||
end
|
||||
|
||||
# Finds all projects nested under `parent_group` or any of its descendant
|
||||
|
|
|
@ -37,7 +37,20 @@ module GroupDescendant
|
|||
parent ||= preloaded.detect { |possible_parent| possible_parent.is_a?(Group) && possible_parent.id == child.parent_id }
|
||||
|
||||
if parent.nil? && !child.parent_id.nil?
|
||||
raise ArgumentError.new('parent was not preloaded')
|
||||
parent = child.parent
|
||||
|
||||
exception = ArgumentError.new <<~MSG
|
||||
parent: [GroupDescendant: #{parent.inspect}] was not preloaded for [#{child.inspect}]")
|
||||
This error is not user facing, but causes a +1 query.
|
||||
MSG
|
||||
extras = {
|
||||
parent: parent,
|
||||
child: child,
|
||||
preloaded: preloaded.map(&:full_path)
|
||||
}
|
||||
issue_url = 'https://gitlab.com/gitlab-org/gitlab-ce/issues/40785'
|
||||
|
||||
Gitlab::Sentry.track_exception(exception, issue_url: issue_url, extra: extras)
|
||||
end
|
||||
|
||||
if parent.nil? && hierarchy_top.present?
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Show shared projects on group page
|
||||
merge_request: 18390
|
||||
author:
|
||||
type: fixed
|
|
@ -35,15 +35,6 @@ describe GroupDescendantsFinder do
|
|||
expect(finder.execute).to contain_exactly(project)
|
||||
end
|
||||
|
||||
it 'does not include projects shared with the group' do
|
||||
project = create(:project, namespace: group)
|
||||
other_project = create(:project)
|
||||
other_project.project_group_links.create(group: group,
|
||||
group_access: ProjectGroupLink::MASTER)
|
||||
|
||||
expect(finder.execute).to contain_exactly(project)
|
||||
end
|
||||
|
||||
context 'when archived is `true`' do
|
||||
let(:params) { { archived: 'true' } }
|
||||
|
||||
|
|
|
@ -79,9 +79,24 @@ describe GroupDescendant, :nested_groups do
|
|||
expect(described_class.build_hierarchy(groups)).to eq(expected_hierarchy)
|
||||
end
|
||||
|
||||
it 'tracks the exception when a parent was not preloaded' do
|
||||
expect(Gitlab::Sentry).to receive(:track_exception).and_call_original
|
||||
|
||||
expect { GroupDescendant.build_hierarchy([subsub_group]) }.to raise_error(ArgumentError)
|
||||
end
|
||||
|
||||
it 'recovers if a parent was not reloaded by querying for the parent' do
|
||||
expected_hierarchy = { parent => { subgroup => subsub_group } }
|
||||
|
||||
# this does not raise in production, so stubbing it here.
|
||||
allow(Gitlab::Sentry).to receive(:track_exception)
|
||||
|
||||
expect(GroupDescendant.build_hierarchy([subsub_group])).to eq(expected_hierarchy)
|
||||
end
|
||||
|
||||
it 'raises an error if not all elements were preloaded' do
|
||||
expect { described_class.build_hierarchy([subsub_group]) }
|
||||
.to raise_error('parent was not preloaded')
|
||||
.to raise_error(/was not preloaded/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue