Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
root = true

[*]
insert_final_newline = true

[*.java]
indent_size = 4
indent_style = space
trim_trailing_whitespace = true
21 changes: 20 additions & 1 deletion src/main/java/org/gitlab4j/api/UserApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import org.gitlab4j.api.models.Email;
import org.gitlab4j.api.models.ImpersonationToken;
import org.gitlab4j.api.models.ImpersonationToken.Scope;
import org.gitlab4j.api.models.Membership;
import org.gitlab4j.api.models.Memberships;
import org.gitlab4j.api.models.SshKey;
import org.gitlab4j.api.models.User;
import org.gitlab4j.api.utils.EmailChecker;
Expand Down Expand Up @@ -522,7 +524,7 @@ public User createUser(User user, CharSequence password, Integer projectsLimit)
* Either password or resetPassword should be specified (resetPassword takes priority).</p>
*
* <pre><code>GitLab Endpoint: POST /users</code></pre>
*
*
* <p>The following properties of the provided User instance can be set during creation:<pre><code> email (required) - Email
* username (required) - Username
* name (required) - Name
Expand Down Expand Up @@ -1211,4 +1213,21 @@ public void deleteEmail(final Long emailId) throws GitLabApiException {
public void deleteEmail(final Object userIdOrUsername, final Long emailId) throws GitLabApiException {
delete(Response.Status.NO_CONTENT, null, "users", getUserIdOrUsername(userIdOrUsername), "emails", emailId);
}

/**
* Lists all projects and groups a user is a member of. (admin only)
*
* <pre><code>GitLab Endpoint: GET /users/:id/memberships</code></pre>
*
* @param userId the ID of the user to get the memberships for
* @return the list of memberships of the given user
* @throws GitLabApiException if any exception occurs
* @since GitLab 12.8
*/
public List<Membership> getMemberships(Integer userId) throws GitLabApiException {
GitLabApiForm formData = new GitLabApiForm();
Response response = get(Response.Status.OK, formData.asMap(), "users", userId, "memberships");
return (response.readEntity(Memberships.class));
}

}
48 changes: 48 additions & 0 deletions src/main/java/org/gitlab4j/api/models/Membership.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.gitlab4j.api.models;

import org.gitlab4j.api.utils.JacksonJson;

public class Membership {

private Integer sourceId;
private String sourceName;
private MembershipSourceType sourceType;
private AccessLevel accessLevel;

public Integer getSourceId() {
return sourceId;
}

public void setSourceId(Integer sourceId) {
this.sourceId = sourceId;
}

public String getSourceName() {
return sourceName;
}

public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}

public MembershipSourceType getSourceType() {
return sourceType;
}

public void setSourceType(MembershipSourceType sourceType) {
this.sourceType = sourceType;
}

public AccessLevel getAccessLevel() {
return accessLevel;
}

public void setAccessLevel(AccessLevel accessLevel) {
this.accessLevel = accessLevel;
}

@Override
public String toString() {
return (JacksonJson.toJsonString(this));
}
}
31 changes: 31 additions & 0 deletions src/main/java/org/gitlab4j/api/models/MembershipSourceType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.gitlab4j.api.models;

import org.gitlab4j.api.utils.JacksonJsonEnumHelper;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum MembershipSourceType {

PROJECT,

/** Representing a group */
NAMESPACE;

private static JacksonJsonEnumHelper<MembershipSourceType> enumHelper = new JacksonJsonEnumHelper<>(MembershipSourceType.class);

@JsonCreator
public static MembershipSourceType forValue(String value) {
return enumHelper.forValue(value);
}

@JsonValue
public String toValue() {
return (enumHelper.toString(this));
}

@Override
public String toString() {
return (enumHelper.toString(this));
}
}
7 changes: 7 additions & 0 deletions src/main/java/org/gitlab4j/api/models/Memberships.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.gitlab4j.api.models;

import java.util.ArrayList;

public class Memberships extends ArrayList<Membership> {
private static final long serialVersionUID = 1L;
}
55 changes: 27 additions & 28 deletions src/test/java/org/gitlab4j/api/PropertyConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,32 @@

public interface PropertyConstants {

public static final String TEST_PROJECT_SUBDIRECTORY_PATH = "src/main/docs/test-project.txt";
public static final String TEST_PROPERTIES_FILENAME = "test-gitlab4j.properties";
String TEST_PROJECT_SUBDIRECTORY_PATH = "src/main/docs/test-project.txt";

// The following are keys used to look up values in the test propertiues file
public static final String ADMIN_PASSWORD_KEY = "TEST_ADMIN_PASSWORD";
public static final String ADMIN_USERNAME_KEY = "TEST_ADMIN_USERNAME";
public static final String ACCESS_TOKEN_KEY = "TEST_ACCESS_TOKEN";
public static final String BLOCK_USERNAME_KEY = "TEST_BLOCK_USERNAME";
public static final String GROUP_KEY = "TEST_GROUP";
public static final String GROUP_MEMBER_USERNAME_KEY = "TEST_GROUP_MEMBER_USERNAME";
public static final String GROUP_PROJECT_KEY = "TEST_GROUP_PROJECT";
public static final String HEALTH_CHECK_TOKEN_KEY = "TEST_HEALTH_CHECK_TOKEN";
public static final String HOST_URL_KEY = "TEST_HOST_URL";
public static final String LOGIN_PASSWORD_KEY = "TEST_LOGIN_PASSWORD";
public static final String LOGIN_USERNAME_KEY = "TEST_LOGIN_USERNAME";
public static final String NAMESPACE_KEY = "TEST_NAMESPACE";
public static final String PRIVATE_TOKEN_KEY = "TEST_PRIVATE_TOKEN";
public static final String PROJECT_NAME_KEY = "TEST_PROJECT_NAME";
public static final String PROXY_PASSWORD_KEY = "TEST_PROXY_PASSWORD";
public static final String PROXY_URI_KEY = "TEST_PROXY_URI";
public static final String PROXY_USERNAME_KEY = "TEST_PROXY_USERNAME";
public static final String SUB_GROUP_KEY = "TEST_SUB_GROUP";
public static final String SUDO_AS_USERNAME_KEY = "TEST_SUDO_AS_USERNAME";
public static final String TEST_REQUEST_ACCESS_USERNAME_KEY = "TEST_REQUEST_ACCESS_USERNAME";
public static final String USERNAME_KEY = "TEST_USERNAME";
public static final String XFER_NAMESPACE_KEY = "TEST_XFER_NAMESPACE";
public static final String EXTERNAL_PROVIDER_KEY = "TEST_EXTERNAL_PROVIDER";
public static final String EXTERNAL_UID_KEY = "TEST_EXTERNAL_UID";
public static final String EXTERNAL_USERNAME_KEY = "TEST_EXTERNAL_USERNAME";
// The following are keys used to look up values in the test properties file
String ADMIN_PASSWORD_KEY = "TEST_ADMIN_PASSWORD";
String ADMIN_USERNAME_KEY = "TEST_ADMIN_USERNAME";
String ACCESS_TOKEN_KEY = "TEST_ACCESS_TOKEN";
String BLOCK_USERNAME_KEY = "TEST_BLOCK_USERNAME";
String GROUP_KEY = "TEST_GROUP";
String GROUP_MEMBER_USERNAME_KEY = "TEST_GROUP_MEMBER_USERNAME";
String GROUP_PROJECT_KEY = "TEST_GROUP_PROJECT";
String HEALTH_CHECK_TOKEN_KEY = "TEST_HEALTH_CHECK_TOKEN";
String HOST_URL_KEY = "TEST_HOST_URL";
String LOGIN_PASSWORD_KEY = "TEST_LOGIN_PASSWORD";
String LOGIN_USERNAME_KEY = "TEST_LOGIN_USERNAME";
String NAMESPACE_KEY = "TEST_NAMESPACE";
String PRIVATE_TOKEN_KEY = "TEST_PRIVATE_TOKEN";
String PROJECT_NAME_KEY = "TEST_PROJECT_NAME";
String PROXY_PASSWORD_KEY = "TEST_PROXY_PASSWORD";
String PROXY_URI_KEY = "TEST_PROXY_URI";
String PROXY_USERNAME_KEY = "TEST_PROXY_USERNAME";
String SUB_GROUP_KEY = "TEST_SUB_GROUP";
String SUDO_AS_USERNAME_KEY = "TEST_SUDO_AS_USERNAME";
String TEST_REQUEST_ACCESS_USERNAME_KEY = "TEST_REQUEST_ACCESS_USERNAME";
String USERNAME_KEY = "TEST_USERNAME";
String XFER_NAMESPACE_KEY = "TEST_XFER_NAMESPACE";
String EXTERNAL_PROVIDER_KEY = "TEST_EXTERNAL_PROVIDER";
String EXTERNAL_UID_KEY = "TEST_EXTERNAL_UID";
String EXTERNAL_USERNAME_KEY = "TEST_EXTERNAL_USERNAME";
}
32 changes: 32 additions & 0 deletions src/test/java/org/gitlab4j/api/TestUserApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,12 @@

import javax.ws.rs.core.Response;

import org.gitlab4j.api.models.AccessLevel;
import org.gitlab4j.api.models.Email;
import org.gitlab4j.api.models.ImpersonationToken;
import org.gitlab4j.api.models.ImpersonationToken.Scope;
import org.gitlab4j.api.models.Membership;
import org.gitlab4j.api.models.MembershipSourceType;
import org.gitlab4j.api.models.SshKey;
import org.gitlab4j.api.models.User;
import org.gitlab4j.api.models.Version;
Expand Down Expand Up @@ -447,4 +450,33 @@ public void testEmails() throws GitLabApiException {
found = emails.stream().filter(e -> e.getEmail().equals(TEST_USER_EMAIL)).findAny().orElse(null);
assertNull(found);
}

@Test
public void testGetMemberships() throws GitLabApiException {
User currentUser = gitLabApi.getUserApi().getCurrentUser();
assertNotNull(currentUser);
List<Membership> memberships = gitLabApi.getUserApi().getMemberships(currentUser.getId());
assertNotNull(memberships);
assertEquals(3, memberships.size());

Membership membership1 = memberships.get(0);
assertMembershipEquals(membership1, 1, "test-project", MembershipSourceType.PROJECT, AccessLevel.MAINTAINER);

Membership membership2 = memberships.get(1);
assertMembershipEquals(membership2, 4, "Test Group", MembershipSourceType.NAMESPACE, AccessLevel.OWNER);

Membership membership3 = memberships.get(2);
assertMembershipEquals(membership3, 5, "subgroup", MembershipSourceType.NAMESPACE, AccessLevel.OWNER);
}

private void assertMembershipEquals(Membership actualMembership,
int expectedSourceId,
String expectedSourceName,
MembershipSourceType expectedSourceType,
AccessLevel expectedAccessLevel) {
assertEquals(expectedSourceId, actualMembership.getSourceId().intValue());
assertEquals(expectedSourceName, actualMembership.getSourceName());
assertEquals(expectedSourceType, actualMembership.getSourceType());
assertEquals(expectedAccessLevel, actualMembership.getAccessLevel());
}
}