From 4df0b136075477f33f47e40aa8dd54a294de458c Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 14 Apr 2023 12:30:23 +0200 Subject: [PATCH 1/2] Add repository submodules api Fixes #921 --- .../gitlab4j/api/RepositorySubmodulesApi.java | 42 +++++++++++++++ .../api/TestRepositorySubmodulesApi.java | 52 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/main/java/org/gitlab4j/api/RepositorySubmodulesApi.java create mode 100644 src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java diff --git a/src/main/java/org/gitlab4j/api/RepositorySubmodulesApi.java b/src/main/java/org/gitlab4j/api/RepositorySubmodulesApi.java new file mode 100644 index 000000000..50ab16d5f --- /dev/null +++ b/src/main/java/org/gitlab4j/api/RepositorySubmodulesApi.java @@ -0,0 +1,42 @@ +package org.gitlab4j.api; + +import javax.ws.rs.core.Response; + +import org.gitlab4j.api.models.Commit; + +/** + *

This class provides an entry point to all the GitLab API repository submodules calls. + * For more information on the repository APIs see:

+ * + * @see Repository Submodules API + */ +public class RepositorySubmodulesApi extends AbstractApi { + + public RepositorySubmodulesApi(GitLabApi gitLabApi) { + super(gitLabApi); + } + + /** + * Update existing submodule reference in repository. + * + *
GitLab Endpoint: PUT /projects/:id/repository/submodules/:submodule
+ * + * @param projectIdOrPath the project in the form of an Long(ID), String(path), or Project instance + * @param submodule full path to the submodule + * @param branch name of the branch to commit into + * @param commitSha full commit SHA to update the submodule to + * @param commitMessage commit message (optional). If no message is provided, a default is set + * @return the created commit + * @throws GitLabApiException if any exception occurs + */ + public Commit updateExistingSubmoduleReference(Object projectIdOrPath, String submodule, String branch, String commitSha, String commitMessage) throws GitLabApiException { + GitLabApiForm formData = new GitLabApiForm() + .withParam("branch", branch, true) + .withParam("commit_sha", commitSha, true) + .withParam("commit_message", commitMessage); + Response response = put(Response.Status.OK, formData.asMap(), "projects", + getProjectIdOrPath(projectIdOrPath), "repository", "submodules", urlEncode(submodule)); + return (response.readEntity(Commit.class)); + } + +} diff --git a/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java b/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java new file mode 100644 index 000000000..cb7577821 --- /dev/null +++ b/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java @@ -0,0 +1,52 @@ +package org.gitlab4j.api; + +import static org.gitlab4j.api.JsonUtils.compareJson; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; +import static org.mockito.MockitoAnnotations.openMocks; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.ws.rs.core.MultivaluedMap; + +import org.gitlab4j.api.models.Commit; +import org.gitlab4j.api.models.Link; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.Mock; +import org.mockito.Mockito; + +public class TestRepositorySubmodulesApi implements Constants { + + @Mock private GitLabApi gitLabApi; + @Mock private GitLabApiClient gitLabApiClient; + @Captor private ArgumentCaptor> attributeCaptor; + private MockResponse response; + + @BeforeEach + public void setUp() throws Exception { + openMocks(this); + } + + @Test + public void testUpdateExistingSubmoduleReference() throws Exception { + init(); + Commit result = new RepositorySubmodulesApi(gitLabApi).updateExistingSubmoduleReference(6L, "my-sub", "patch-1", "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", "message"); + assertNotNull(result); + assertTrue(compareJson(result, "commits.json")); + } + + private void init() throws Exception, IOException { + response = new MockResponse(Commit.class, null, "commit.json"); + when(gitLabApi.getApiClient()).thenReturn(gitLabApiClient); + when(gitLabApiClient.validateSecretToken(any())).thenReturn(true); + when(gitLabApiClient.get(attributeCaptor.capture(), Mockito.any())).thenReturn(response); + } +} From 0e5b59f60475dd3c20757c15ea553e113da20c7d Mon Sep 17 00:00:00 2001 From: Jeremie Bresson Date: Fri, 14 Apr 2023 13:36:57 +0200 Subject: [PATCH 2/2] Fix unit test --- .../org/gitlab4j/api/TestRepositorySubmodulesApi.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java b/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java index cb7577821..ef260a486 100644 --- a/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java +++ b/src/test/java/org/gitlab4j/api/TestRepositorySubmodulesApi.java @@ -8,14 +8,10 @@ import static org.mockito.MockitoAnnotations.openMocks; import java.io.IOException; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.ws.rs.core.MultivaluedMap; import org.gitlab4j.api.models.Commit; -import org.gitlab4j.api.models.Link; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -40,13 +36,13 @@ public void testUpdateExistingSubmoduleReference() throws Exception { init(); Commit result = new RepositorySubmodulesApi(gitLabApi).updateExistingSubmoduleReference(6L, "my-sub", "patch-1", "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30", "message"); assertNotNull(result); - assertTrue(compareJson(result, "commits.json")); + assertTrue(compareJson(result, "commit.json")); } private void init() throws Exception, IOException { - response = new MockResponse(Commit.class, null, "commit.json"); + response = new MockResponse(Commit.class, "commit.json", null); when(gitLabApi.getApiClient()).thenReturn(gitLabApiClient); when(gitLabApiClient.validateSecretToken(any())).thenReturn(true); - when(gitLabApiClient.get(attributeCaptor.capture(), Mockito.any())).thenReturn(response); + when(gitLabApiClient.put(attributeCaptor.capture(), Mockito.any())).thenReturn(response); } }