Skip to content

Commit 5ccdca2

Browse files
committed
Add UserApi.getMemberships() to list projects and groups a user is member of
1 parent 883999b commit 5ccdca2

File tree

5 files changed

+138
-1
lines changed

5 files changed

+138
-1
lines changed

src/main/java/org/gitlab4j/api/UserApi.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.gitlab4j.api.models.Email;
1717
import org.gitlab4j.api.models.ImpersonationToken;
1818
import org.gitlab4j.api.models.ImpersonationToken.Scope;
19+
import org.gitlab4j.api.models.Membership;
20+
import org.gitlab4j.api.models.Memberships;
1921
import org.gitlab4j.api.models.SshKey;
2022
import org.gitlab4j.api.models.User;
2123
import org.gitlab4j.api.utils.EmailChecker;
@@ -522,7 +524,7 @@ public User createUser(User user, CharSequence password, Integer projectsLimit)
522524
* Either password or resetPassword should be specified (resetPassword takes priority).</p>
523525
*
524526
* <pre><code>GitLab Endpoint: POST /users</code></pre>
525-
*
527+
*
526528
* <p>The following properties of the provided User instance can be set during creation:<pre><code> email (required) - Email
527529
* username (required) - Username
528530
* name (required) - Name
@@ -1211,4 +1213,21 @@ public void deleteEmail(final Long emailId) throws GitLabApiException {
12111213
public void deleteEmail(final Object userIdOrUsername, final Long emailId) throws GitLabApiException {
12121214
delete(Response.Status.NO_CONTENT, null, "users", getUserIdOrUsername(userIdOrUsername), "emails", emailId);
12131215
}
1216+
1217+
/**
1218+
* Lists all projects and groups a user is a member of. (admin only)
1219+
*
1220+
* <pre><code>GitLab Endpoint: GET /users/:id/memberships</code></pre>
1221+
*
1222+
* @param userId the ID of the user to get the memberships for
1223+
* @return the list of memberships of the given user
1224+
* @throws GitLabApiException if any exception occurs
1225+
* @since GitLab 12.8
1226+
*/
1227+
public List<Membership> getMemberships(Integer userId) throws GitLabApiException {
1228+
GitLabApiForm formData = new GitLabApiForm();
1229+
Response response = get(Response.Status.OK, formData.asMap(), "users", userId, "memberships");
1230+
return (response.readEntity(Memberships.class));
1231+
}
1232+
12141233
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.gitlab4j.api.models;
2+
3+
import org.gitlab4j.api.utils.JacksonJson;
4+
5+
public class Membership {
6+
7+
private Integer sourceId;
8+
private String sourceName;
9+
private MembershipSourceType sourceType;
10+
private AccessLevel accessLevel;
11+
12+
public Integer getSourceId() {
13+
return sourceId;
14+
}
15+
16+
public void setSourceId(Integer sourceId) {
17+
this.sourceId = sourceId;
18+
}
19+
20+
public String getSourceName() {
21+
return sourceName;
22+
}
23+
24+
public void setSourceName(String sourceName) {
25+
this.sourceName = sourceName;
26+
}
27+
28+
public MembershipSourceType getSourceType() {
29+
return sourceType;
30+
}
31+
32+
public void setSourceType(MembershipSourceType sourceType) {
33+
this.sourceType = sourceType;
34+
}
35+
36+
public AccessLevel getAccessLevel() {
37+
return accessLevel;
38+
}
39+
40+
public void setAccessLevel(AccessLevel accessLevel) {
41+
this.accessLevel = accessLevel;
42+
}
43+
44+
@Override
45+
public String toString() {
46+
return (JacksonJson.toJsonString(this));
47+
}
48+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.gitlab4j.api.models;
2+
3+
import org.gitlab4j.api.utils.JacksonJsonEnumHelper;
4+
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
8+
public enum MembershipSourceType {
9+
10+
PROJECT,
11+
12+
/** Representing a group */
13+
NAMESPACE;
14+
15+
private static JacksonJsonEnumHelper<MembershipSourceType> enumHelper = new JacksonJsonEnumHelper<>(MembershipSourceType.class);
16+
17+
@JsonCreator
18+
public static MembershipSourceType forValue(String value) {
19+
return enumHelper.forValue(value);
20+
}
21+
22+
@JsonValue
23+
public String toValue() {
24+
return (enumHelper.toString(this));
25+
}
26+
27+
@Override
28+
public String toString() {
29+
return (enumHelper.toString(this));
30+
}
31+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.gitlab4j.api.models;
2+
3+
import java.util.ArrayList;
4+
5+
public class Memberships extends ArrayList<Membership> {
6+
private static final long serialVersionUID = 1L;
7+
}

src/test/java/org/gitlab4j/api/TestUserApi.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818

1919
import javax.ws.rs.core.Response;
2020

21+
import org.gitlab4j.api.models.AccessLevel;
2122
import org.gitlab4j.api.models.Email;
2223
import org.gitlab4j.api.models.ImpersonationToken;
2324
import org.gitlab4j.api.models.ImpersonationToken.Scope;
25+
import org.gitlab4j.api.models.Membership;
26+
import org.gitlab4j.api.models.MembershipSourceType;
2427
import org.gitlab4j.api.models.SshKey;
2528
import org.gitlab4j.api.models.User;
2629
import org.gitlab4j.api.models.Version;
@@ -447,4 +450,33 @@ public void testEmails() throws GitLabApiException {
447450
found = emails.stream().filter(e -> e.getEmail().equals(TEST_USER_EMAIL)).findAny().orElse(null);
448451
assertNull(found);
449452
}
453+
454+
@Test
455+
public void testGetMemberships() throws GitLabApiException {
456+
User currentUser = gitLabApi.getUserApi().getCurrentUser();
457+
assertNotNull(currentUser);
458+
List<Membership> memberships = gitLabApi.getUserApi().getMemberships(currentUser.getId());
459+
assertNotNull(memberships);
460+
assertEquals(3, memberships.size());
461+
462+
Membership membership1 = memberships.get(0);
463+
assertMembershipEquals(membership1, 1, "test-project", MembershipSourceType.PROJECT, AccessLevel.MAINTAINER);
464+
465+
Membership membership2 = memberships.get(1);
466+
assertMembershipEquals(membership2, 4, "Test Group", MembershipSourceType.NAMESPACE, AccessLevel.OWNER);
467+
468+
Membership membership3 = memberships.get(2);
469+
assertMembershipEquals(membership3, 5, "subgroup", MembershipSourceType.NAMESPACE, AccessLevel.OWNER);
470+
}
471+
472+
private void assertMembershipEquals(Membership actualMembership,
473+
int expectedSourceId,
474+
String expectedSourceName,
475+
MembershipSourceType expectedSourceType,
476+
AccessLevel expectedAccessLevel) {
477+
assertEquals(expectedSourceId, actualMembership.getSourceId().intValue());
478+
assertEquals(expectedSourceName, actualMembership.getSourceName());
479+
assertEquals(expectedSourceType, actualMembership.getSourceType());
480+
assertEquals(expectedAccessLevel, actualMembership.getAccessLevel());
481+
}
450482
}

0 commit comments

Comments
 (0)