From f7070ae0c513497ec1f4406264fa22394043db6a Mon Sep 17 00:00:00 2001 From: Simon Chapman Date: Tue, 12 Mar 2024 11:55:30 +0000 Subject: [PATCH 1/3] Add group avatar upload test --- .../java/org/gitlab4j/api/TestAvatarUpload.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/gitlab4j/api/TestAvatarUpload.java b/src/test/java/org/gitlab4j/api/TestAvatarUpload.java index 949005146..52709ac6a 100644 --- a/src/test/java/org/gitlab4j/api/TestAvatarUpload.java +++ b/src/test/java/org/gitlab4j/api/TestAvatarUpload.java @@ -7,6 +7,7 @@ import java.io.File; import java.util.Map; +import org.gitlab4j.api.models.Group; import org.gitlab4j.api.models.Project; import org.gitlab4j.api.models.User; import org.junit.jupiter.api.BeforeAll; @@ -45,6 +46,7 @@ public class TestAvatarUpload extends AbstractIntegrationTest { private static GitLabApi gitLabApi; private static Project testProject; + private static Group testGroup; public TestAvatarUpload() { super(); @@ -52,9 +54,10 @@ public TestAvatarUpload() { @BeforeAll public static void setup() { - // Must setup the connection to the GitLab test server and get the test Project instance + // Must setup the connection to the GitLab test server and get the test Project and Group instances gitLabApi = baseTestSetup(); testProject = getTestProject(); + testGroup = getTestGroup(); } @Test @@ -100,4 +103,15 @@ public void testSetUserAvatar() throws GitLabApiException { assertNotNull(updatedUser); assertTrue(updatedUser.getAvatarUrl().endsWith(AVATAR_FILENAME)); } + + @Test + public void testSetGroupAvatar() throws GitLabApiException { + + assumeTrue(testGroup != null); + + File avatarFile = new File("src/test/resources/org/gitlab4j/api", AVATAR_FILENAME); + Group updatedGroup = gitLabApi.getGroupApi().setGroupAvatar(testGroup.getId(), avatarFile); + assertNotNull(updatedGroup); + assertTrue(updatedGroup.getAvatarUrl().endsWith(AVATAR_FILENAME)); + } } From 7eae0b9304e9eac05fa5014a88af26eabd601bd1 Mon Sep 17 00:00:00 2001 From: Simon Chapman Date: Tue, 12 Mar 2024 11:56:18 +0000 Subject: [PATCH 2/3] Add API-based retrieval of project and group avatars --- src/main/java/org/gitlab4j/api/GroupApi.java | 19 +++++++++++++ .../java/org/gitlab4j/api/ProjectApi.java | 19 +++++++++++++ .../java/org/gitlab4j/api/TestGroupApi.java | 28 +++++++++++++++++++ .../java/org/gitlab4j/api/TestProjectApi.java | 28 +++++++++++++++++++ 4 files changed, 94 insertions(+) diff --git a/src/main/java/org/gitlab4j/api/GroupApi.java b/src/main/java/org/gitlab4j/api/GroupApi.java index 91376dc9d..df4fbf253 100644 --- a/src/main/java/org/gitlab4j/api/GroupApi.java +++ b/src/main/java/org/gitlab4j/api/GroupApi.java @@ -1,6 +1,7 @@ package org.gitlab4j.api; import java.io.File; +import java.io.InputStream; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -11,6 +12,7 @@ import javax.ws.rs.core.Form; import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; @@ -1881,6 +1883,23 @@ public Group setGroupAvatar(Object groupIdOrPath, File avatarFile) throws GitLab return (response.readEntity(Group.class)); } + /** + * Gets the group avatar. + * + *
GitLab Endpoint: GET /groups/:id/avatar
+ * + * @param groupIdOrPath the group ID, path of the group, or a Group instance holding the group ID or path + * @return an InputStream to read the raw file from + * @throws GitLabApiException if any exception occurs + */ + public InputStream getAvatar(Object groupIdOrPath) throws GitLabApiException { + + Response response = getWithAccepts(Response.Status.OK, null, MediaType.MEDIA_TYPE_WILDCARD, + "groups", getGroupIdOrPath(groupIdOrPath), "avatar"); + return (response.readEntity(InputStream.class)); + + } + /** * Share group with another group. Returns 200 and the group details on success. * diff --git a/src/main/java/org/gitlab4j/api/ProjectApi.java b/src/main/java/org/gitlab4j/api/ProjectApi.java index 34647de0c..9727f3999 100644 --- a/src/main/java/org/gitlab4j/api/ProjectApi.java +++ b/src/main/java/org/gitlab4j/api/ProjectApi.java @@ -35,6 +35,7 @@ import java.util.stream.Stream; import javax.ws.rs.core.Form; import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import org.gitlab4j.api.GitLabApi.ApiVersion; @@ -1068,6 +1069,24 @@ public Project createProject(Project project, String importUrl) throws GitLabApi return (response.readEntity(Project.class)); } + /** + * Gets the project avatar. + * Only working with GitLab 16.9 and above. + * + *
GitLab Endpoint: GET /projects/:id/avatar
+ * + * @param projectIdOrPath the project in the form of an Long(ID), String(path), or Project instance + * @return an InputStream to read the raw file from + * @throws GitLabApiException if any exception occurs + */ + public InputStream getAvatar(Object projectIdOrPath) throws GitLabApiException { + + Response response = getWithAccepts(Response.Status.OK, null, MediaType.MEDIA_TYPE_WILDCARD, + "projects", getProjectIdOrPath(projectIdOrPath), "avatar"); + return (response.readEntity(InputStream.class)); + + } + /** * Creates a Project * diff --git a/src/test/java/org/gitlab4j/api/TestGroupApi.java b/src/test/java/org/gitlab4j/api/TestGroupApi.java index 0b1f023da..cd716f0a5 100644 --- a/src/test/java/org/gitlab4j/api/TestGroupApi.java +++ b/src/test/java/org/gitlab4j/api/TestGroupApi.java @@ -6,6 +6,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeTrue; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.util.List; import java.util.Optional; import java.util.stream.Stream; @@ -21,6 +27,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -46,6 +53,8 @@ public class TestGroupApi extends AbstractIntegrationTest { private static final String TEST_GROUP_MEMBER_USERNAME = HelperUtils.getProperty(GROUP_MEMBER_USERNAME_KEY); private static final String TEST_REQUEST_ACCESS_USERNAME = HelperUtils.getProperty(TEST_REQUEST_ACCESS_USERNAME_KEY); + private static final String AVATAR_FILENAME = "avatar.png"; + private static GitLabApi gitLabApi; private static Group testGroup; private static User testUser; @@ -196,6 +205,25 @@ public void getOptionalGroup() { assertEquals(Response.Status.NOT_FOUND.getStatusCode(), GitLabApi.getOptionalException(optional).getHttpStatus()); } + @Test + @Disabled("Required Gitlab version not less then 14.0") + public void testGetAvatar() throws GitLabApiException, IOException { + + assumeTrue(testGroup != null); + + File avatarFile = new File("src/test/resources/org/gitlab4j/api", AVATAR_FILENAME); + gitLabApi.getGroupApi().setGroupAvatar(testGroup.getId(), avatarFile); + + // Get the avatar of the test Group + InputStream in = gitLabApi.getGroupApi().getAvatar(testGroup); + + Path target = Files.createTempFile(TEST_PROJECT_NAME + "-avatar", "png"); + Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING); + + assertTrue(target.toFile().length() > 0); + Files.delete(target); + } + @Test public void testRequestAccess() throws GitLabApiException { diff --git a/src/test/java/org/gitlab4j/api/TestProjectApi.java b/src/test/java/org/gitlab4j/api/TestProjectApi.java index 07485068e..5f091acfe 100644 --- a/src/test/java/org/gitlab4j/api/TestProjectApi.java +++ b/src/test/java/org/gitlab4j/api/TestProjectApi.java @@ -31,6 +31,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assumptions.assumeTrue; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.time.Instant; import java.util.Arrays; import java.util.Date; @@ -56,6 +62,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -94,6 +101,8 @@ public class TestProjectApi extends AbstractIntegrationTest { private static final String TEST_XFER_PROJECT_NAME = "test-gitlab4j-xfer-project"; private static final String TEST_VARIABLE_KEY_PREFIX = "TEST_VARIABLE_KEY_"; + private static final String AVATAR_FILENAME = "avatar.png"; + private static GitLabApi gitLabApi; private static Project testProject; private static User currentUser; @@ -311,6 +320,25 @@ else if (TEST_PROJECT_NAME_2.equals(project.getName())) assertEquals(TEST_PROJECT_NAME_1, projects.get(1).getName()); } + @Test + @Disabled("Required Gitlab version not less then 16.9") + public void testGetAvatar() throws GitLabApiException, IOException { + + assumeTrue(testProject != null); + + File avatarFile = new File("src/test/resources/org/gitlab4j/api", AVATAR_FILENAME); + gitLabApi.getProjectApi().setProjectAvatar(testProject.getId(), avatarFile); + + // Get the avatar of the test project + InputStream in = gitLabApi.getProjectApi().getAvatar(testProject); + + Path target = Files.createTempFile(TEST_PROJECT_NAME + "-avatar", "png"); + Files.copy(in, target, StandardCopyOption.REPLACE_EXISTING); + + assertTrue(target.toFile().length() > 0); + Files.delete(target); + } + @Test public void testListProjectsWithParams() throws GitLabApiException { From d19a52e0f3d802e4a6f4793d76982bee531357d2 Mon Sep 17 00:00:00 2001 From: Simon Chapman Date: Tue, 12 Mar 2024 11:58:45 +0000 Subject: [PATCH 3/3] Add version warning --- src/main/java/org/gitlab4j/api/GroupApi.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/gitlab4j/api/GroupApi.java b/src/main/java/org/gitlab4j/api/GroupApi.java index df4fbf253..2494e18f5 100644 --- a/src/main/java/org/gitlab4j/api/GroupApi.java +++ b/src/main/java/org/gitlab4j/api/GroupApi.java @@ -1885,6 +1885,7 @@ public Group setGroupAvatar(Object groupIdOrPath, File avatarFile) throws GitLab /** * Gets the group avatar. + * Only working with GitLab 14.0 and above. * *
GitLab Endpoint: GET /groups/:id/avatar
*