diff options
author | Jan Provaznik <jprovaznik@gitlab.com> | 2019-05-27 14:58:31 +0000 |
---|---|---|
committer | Jan Provaznik <jprovaznik@gitlab.com> | 2019-05-27 14:58:31 +0000 |
commit | 1db09731e77e0869a54faff8bf8494892d4bd640 (patch) | |
tree | e21fc723dd97f34af65e385c7475e1d87db53fba /spec | |
parent | 31315850b0108b82b7bb3aa70194dc4dafc9ee7d (diff) | |
parent | a9827e0e18b532fb5cc3f227ce6c6bddaf7a960b (diff) | |
download | gitlab-ce-1db09731e77e0869a54faff8bf8494892d4bd640.tar.gz |
Merge branch '51854-api-to-get-all-project-group-members-returns-duplicates' into 'master'
Resolve "API to get all project/group members returns duplicates"
Closes #51854
See merge request gitlab-org/gitlab-ce!24005
Diffstat (limited to 'spec')
-rw-r--r-- | spec/finders/members_finder_spec.rb | 44 | ||||
-rw-r--r-- | spec/requests/api/members_spec.rb | 13 |
2 files changed, 50 insertions, 7 deletions
diff --git a/spec/finders/members_finder_spec.rb b/spec/finders/members_finder_spec.rb index db48f00cd74..83348457caa 100644 --- a/spec/finders/members_finder_spec.rb +++ b/spec/finders/members_finder_spec.rb @@ -1,13 +1,13 @@ require 'spec_helper' describe MembersFinder, '#execute' do - let(:group) { create(:group) } - let(:nested_group) { create(:group, :access_requestable, parent: group) } - let(:project) { create(:project, namespace: nested_group) } - let(:user1) { create(:user) } - let(:user2) { create(:user) } - let(:user3) { create(:user) } - let(:user4) { create(:user) } + set(:group) { create(:group) } + set(:nested_group) { create(:group, :access_requestable, parent: group) } + set(:project) { create(:project, namespace: nested_group) } + set(:user1) { create(:user) } + set(:user2) { create(:user) } + set(:user3) { create(:user) } + set(:user4) { create(:user) } it 'returns members for project and parent groups', :nested_groups do nested_group.request_access(user1) @@ -31,4 +31,34 @@ describe MembersFinder, '#execute' do expect(result.to_a).to match_array([member1, member2, member3]) end + + context 'when include_invited_groups_members == true', :nested_groups do + subject { described_class.new(project, user2).execute(include_invited_groups_members: true) } + + set(:linked_group) { create(:group, :public, :access_requestable) } + set(:nested_linked_group) { create(:group, parent: linked_group) } + set(:linked_group_member) { linked_group.add_developer(user1) } + set(:nested_linked_group_member) { nested_linked_group.add_developer(user2) } + + it 'includes all the invited_groups members including members inherited from ancestor groups', :nested_groups do + create(:project_group_link, project: project, group: nested_linked_group) + + expect(subject).to contain_exactly(linked_group_member, nested_linked_group_member) + end + + it 'includes all the invited_groups members' do + create(:project_group_link, project: project, group: linked_group) + + expect(subject).to contain_exactly(linked_group_member) + end + + it 'excludes group_members not visible to the user' do + create(:project_group_link, project: project, group: linked_group) + private_linked_group = create(:group, :private) + private_linked_group.add_developer(user3) + create(:project_group_link, project: project, group: private_linked_group) + + expect(subject).to contain_exactly(linked_group_member) + end + end end diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb index 48869cab4da..55f38079b1f 100644 --- a/spec/requests/api/members_spec.rb +++ b/spec/requests/api/members_spec.rb @@ -132,6 +132,19 @@ describe API::Members do expect(json_response.map { |u| u['id'] }).to match_array [maintainer.id, developer.id, nested_user.id, project_user.id, linked_group_user.id] end + it 'returns only one member for each user without returning duplicated members' do + linked_group.add_developer(developer) + + get api("/projects/#{project.id}/members/all", developer) + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an Array + expect(json_response.map { |u| u['id'] }).to eq [developer.id, maintainer.id, nested_user.id, project_user.id, linked_group_user.id] + expect(json_response.map { |u| u['access_level'] }).to eq [Gitlab::Access::DEVELOPER, Gitlab::Access::OWNER, Gitlab::Access::DEVELOPER, + Gitlab::Access::DEVELOPER, Gitlab::Access::DEVELOPER] + end + it 'finds all group members including inherited members' do get api("/groups/#{nested_group.id}/members/all", developer) |