diff options
author | Stan Hu <stanhu@gmail.com> | 2018-07-31 12:31:15 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2018-07-31 12:31:15 -0700 |
commit | 852b5613c5eda43a9dce20ca9a71301f5630b1c6 (patch) | |
tree | 8c9d347a4c7f37a25ce337f134e6c1c0b91c0224 | |
parent | 0085b76fb387237af02f717a894c89f7227cb81e (diff) | |
download | gitlab-ce-852b5613c5eda43a9dce20ca9a71301f5630b1c6.tar.gz |
Fix namespaces_helper reporting multiple groups
-rw-r--r-- | app/helpers/namespaces_helper.rb | 7 | ||||
-rw-r--r-- | spec/helpers/namespaces_helper_spec.rb | 9 |
2 files changed, 14 insertions, 2 deletions
diff --git a/app/helpers/namespaces_helper.rb b/app/helpers/namespaces_helper.rb index 9008db1b300..19aa630007d 100644 --- a/app/helpers/namespaces_helper.rb +++ b/app/helpers/namespaces_helper.rb @@ -14,8 +14,11 @@ module NamespacesHelper extra_group = Group.find(extra_group) if Namespace.find(extra_group).kind == 'group' end - if extra_group && extra_group.is_a?(Group) && (!Group.exists?(name: extra_group.name) || Ability.allowed?(current_user, :read_group, extra_group)) - groups |= [extra_group] + if extra_group && extra_group.is_a?(Group) + # Avoid duplicate groups if one already exists by that name + existing_group = Group.find_by(name: extra_group.name) + extra_group = existing_group if existing_group + groups |= [extra_group] if Ability.allowed?(current_user, :read_group, extra_group) end options = [] diff --git a/spec/helpers/namespaces_helper_spec.rb b/spec/helpers/namespaces_helper_spec.rb index 343e140f5fb..b12b2587510 100644 --- a/spec/helpers/namespaces_helper_spec.rb +++ b/spec/helpers/namespaces_helper_spec.rb @@ -31,6 +31,15 @@ describe NamespacesHelper do expect(options).to include(user.name) end + it 'avoids duplicate groups when extra_group is used' do + allow(helper).to receive(:current_user).and_return(admin) + + options = helper.namespaces_options(user_group.id, display_path: true, extra_group: build(:group, name: admin_group.name)) + + expect(options.scan("data-name=\"#{admin_group.name}\"").count).to eq(1) + expect(options).to include(admin_group.name) + end + it 'returns only groups if groups_only option is true' do allow(helper).to receive(:current_user).and_return(user) |