Skip to content

Commit b4b55b0

Browse files
committed
Mods to support creating a project in a namespace (#380).
1 parent 0fd6f26 commit b4b55b0

File tree

5 files changed

+102
-25
lines changed

5 files changed

+102
-25
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ To utilize GitLab4J™ API in your Java project, simply add the following de
1212
```java
1313
dependencies {
1414
...
15-
compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '4.11.7'
15+
compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '4.11.8'
1616
}
1717
```
1818

@@ -23,7 +23,7 @@ dependencies {
2323
<dependency>
2424
<groupId>org.gitlab4j</groupId>
2525
<artifactId>gitlab4j-api</artifactId>
26-
<version>4.11.7</version>
26+
<version>4.11.8</version>
2727
</dependency>
2828
```
2929

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

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.gitlab4j.api.models.FileUpload;
4545
import org.gitlab4j.api.models.Issue;
4646
import org.gitlab4j.api.models.Member;
47+
import org.gitlab4j.api.models.Namespace;
4748
import org.gitlab4j.api.models.Project;
4849
import org.gitlab4j.api.models.ProjectFilter;
4950
import org.gitlab4j.api.models.ProjectHook;
@@ -767,19 +768,38 @@ public Optional<Project> getOptionalProject(String namespace, String project, Bo
767768
}
768769

769770
/**
770-
* Create a new project in the specified group.
771+
* Create a new project belonging to the namespace ID. A namespace ID is either a user or group ID.
771772
*
772-
* @param groupId the group ID to create the project under
773+
* @param namespaceId the namespace ID to create the project under
773774
* @param projectName the name of the project top create
774775
* @return the created project
775776
* @throws GitLabApiException if any exception occurs
776777
*/
777-
public Project createProject(Integer groupId, String projectName) throws GitLabApiException {
778-
GitLabApiForm formData = new GitLabApiForm().withParam("namespace_id", groupId).withParam("name", projectName, true);
778+
public Project createProject(Integer namespaceId, String projectName) throws GitLabApiException {
779+
GitLabApiForm formData = new GitLabApiForm().withParam("namespace_id", namespaceId).withParam("name", projectName, true);
779780
Response response = post(Response.Status.CREATED, formData, "projects");
780781
return (response.readEntity(Project.class));
781782
}
782783

784+
/**
785+
* Create a new project belonging to the namespace ID and project configuration. A namespace ID is either a user or group ID.
786+
*
787+
* @param namespaceId the namespace ID to create the project under
788+
* @param project the Project instance holding the new project configuration
789+
* @return the created project
790+
* @throws GitLabApiException if any exception occurs
791+
*/
792+
public Project createProject(Integer namespaceId, Project project) throws GitLabApiException {
793+
794+
if (project == null) {
795+
throw new RuntimeException("Project instance cannot be null.");
796+
}
797+
798+
Namespace namespace = new Namespace().withId(namespaceId);
799+
project.setNamespace(namespace);
800+
return (createProject(project));
801+
}
802+
783803
/**
784804
* Create a new project with the current user's namespace.
785805
*
@@ -879,6 +899,11 @@ public Project createProject(Project project, String importUrl) throws GitLabApi
879899
.withParam("initialize_with_readme", project.getInitializeWithReadme())
880900
.withParam("packages_enabled", project.getPackagesEnabled());
881901

902+
Namespace namespace = project.getNamespace();
903+
if (namespace != null && namespace.getId() != null) {
904+
formData.withParam("namespace_id", namespace.getId());
905+
}
906+
882907
if (isApiVersion(ApiVersion.V3)) {
883908
boolean isPublic = (project.getPublic() != null ? project.getPublic() : project.getVisibility() == Visibility.PUBLIC);
884909
formData.withParam("public", isPublic);

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.gitlab4j.api.GitLabApi.ApiVersion;
88
import org.gitlab4j.api.models.Project;
9+
import org.gitlab4j.api.models.User;
910

1011
/**
1112
* In order for the integration tests to run you must set the following properties in test-gitlab4j.properties
@@ -120,4 +121,28 @@ protected static Project getTestProject() {
120121
return (null);
121122
}
122123
}
124+
125+
/**
126+
* Get the current user (the testing user).
127+
*
128+
* @return the user that is being used for testing
129+
*/
130+
protected static User getCurrentUser() {
131+
132+
Throwable t = new Throwable();
133+
StackTraceElement directCaller = t.getStackTrace()[1];
134+
String callingClassName = directCaller.getClassName();
135+
BaseTestResources baseResources = baseTestResourcesMap.get(callingClassName);
136+
if (baseResources == null || baseResources.gitLabApi == null) {
137+
System.err.println("Problems fetching current user: GitLabApi instance is null");
138+
return (null);
139+
}
140+
141+
try {
142+
return (baseResources.gitLabApi.getUserApi().getCurrentUser());
143+
} catch (Exception e) {
144+
System.err.println("Problems fetching current user: " + e.getMessage());
145+
return (null);
146+
}
147+
}
123148
}

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,8 @@ private static void seedData() throws GitLabApiException {
259259
.withDefaultBranch("master")
260260
.withPublic(true)
261261
.withInitializeWithReadme(true);
262-
Project groupProject = gitLabApi.getProjectApi().createProject(projectSettings);
263-
System.out.format("Created %s project%n", projectSettings.getName());
262+
Project groupProject = gitLabApi.getProjectApi().createProject(testGroup.getId(), projectSettings);
263+
System.out.format("Created %s project%n", groupProject.getNameWithNamespace());
264264

265265
// Update the contents of README.md, so we have at minimum 2 commits
266266
RepositoryFile repoFile = new RepositoryFile();
@@ -269,9 +269,6 @@ private static void seedData() throws GitLabApiException {
269269
gitLabApi.getRepositoryFileApi().updateFile(groupProject, repoFile, "master", "Updated contents");
270270
System.out.format("Updated content of %s repository file%n", repoFile.getFilePath());
271271

272-
gitLabApi.getGroupApi().transferProject(testGroup, groupProject);
273-
System.out.format("Transfered %s project to %s group%n", TEST_GROUP_PROJECT_NAME, TEST_GROUP);
274-
275272
} else if (!gitLabApi.getRepositoryFileApi().getOptionalFile(testProject, "README.md", "master").isPresent()) {
276273

277274
// Create the README.md file since it does not exists

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

Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,14 @@ public class TestProjectApi extends AbstractIntegrationTest {
8282

8383
private static final String TEST_PROJECT_NAME_1 = "test-gitlab4j-create-project";
8484
private static final String TEST_PROJECT_NAME_2 = "test-gitlab4j-create-project-2";
85+
private static final String TEST_NAMESPACE_PROJECT_NAME = "test-gitlab4j-create-namespace-project";
8586
private static final String TEST_PROJECT_NAME_UPDATE = "test-gitlab4j-create-project-update";
8687
private static final String TEST_XFER_PROJECT_NAME = "test-gitlab4j-xfer-project";
8788
private static final String TEST_VARIABLE_KEY_PREFIX = "TEST_VARIABLE_KEY_";
8889

8990
private static GitLabApi gitLabApi;
9091
private static Project testProject;
92+
private static User currentUser;
9193

9294
public TestProjectApi() {
9395
super();
@@ -99,6 +101,7 @@ public static void setup() {
99101
// Must setup the connection to the GitLab test server
100102
gitLabApi = baseTestSetup();
101103
testProject = getTestProject();
104+
currentUser = getCurrentUser();
102105

103106
deleteAllTestProjects();
104107
}
@@ -109,28 +112,29 @@ public static void teardown() throws GitLabApiException {
109112
}
110113

111114
private static void deleteAllTestProjects() {
115+
112116
if (gitLabApi == null) {
113117
return;
114118
}
115119

116120
try {
117-
Project project = gitLabApi.getProjectApi().getProject(TEST_NAMESPACE, TEST_PROJECT_NAME_1);
118-
gitLabApi.getProjectApi().deleteProject(project);
121+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_NAMESPACE, TEST_PROJECT_NAME_1));
119122
} catch (GitLabApiException ignore) {}
120123

121124
try {
122-
Project project = gitLabApi.getProjectApi().getProject(TEST_NAMESPACE, TEST_PROJECT_NAME_2);
123-
gitLabApi.getProjectApi().deleteProject(project);
125+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_NAMESPACE, TEST_PROJECT_NAME_2));
124126
} catch (GitLabApiException ignore) {}
125127

126128
try {
127-
Project project = gitLabApi.getProjectApi().getProject(TEST_NAMESPACE, TEST_PROJECT_NAME_UPDATE);
128-
gitLabApi.getProjectApi().deleteProject(project);
129+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_NAMESPACE, TEST_PROJECT_NAME_UPDATE));
129130
} catch (GitLabApiException ignore) {}
130131

131132
try {
132-
Project project = gitLabApi.getProjectApi().getProject(TEST_NAMESPACE, TEST_XFER_PROJECT_NAME);
133-
gitLabApi.getProjectApi().deleteProject(project);
133+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_NAMESPACE, TEST_XFER_PROJECT_NAME));
134+
} catch (GitLabApiException ignore) {}
135+
136+
try {
137+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_NAMESPACE, TEST_NAMESPACE_PROJECT_NAME));
134138
} catch (GitLabApiException ignore) {}
135139

136140
if (TEST_GROUP != null && TEST_PROJECT_NAME != null) {
@@ -153,15 +157,13 @@ private static void deleteAllTestProjects() {
153157

154158
if (TEST_GROUP != null && TEST_GROUP_PROJECT != null) {
155159
try {
156-
Project project = gitLabApi.getProjectApi().getProject(TEST_NAMESPACE, TEST_GROUP_PROJECT);
157-
gitLabApi.getProjectApi().deleteProject(project);
160+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_NAMESPACE, TEST_GROUP_PROJECT));
158161
} catch (GitLabApiException ignore) {}
159162
}
160163

161164
if (TEST_XFER_NAMESPACE != null) {
162165
try {
163-
Project project = gitLabApi.getProjectApi().getProject(TEST_XFER_NAMESPACE, TEST_XFER_PROJECT_NAME);
164-
gitLabApi.getProjectApi().deleteProject(project);
166+
gitLabApi.getProjectApi().deleteProject(Project.getPathWithNammespace(TEST_XFER_NAMESPACE, TEST_XFER_PROJECT_NAME));
165167
} catch (GitLabApiException ignore) {}
166168
}
167169

@@ -536,6 +538,24 @@ public void testProjectLanguages() throws GitLabApiException {
536538
assertNotNull(projectLanguages);
537539
}
538540

541+
@Test
542+
public void testCreateProjectInNamespace() throws GitLabApiException {
543+
544+
assumeNotNull(currentUser);
545+
546+
Project namespaceProject = null;
547+
try {
548+
namespaceProject = gitLabApi.getProjectApi().createProject(currentUser.getId(), TEST_NAMESPACE_PROJECT_NAME);
549+
assertNotNull(namespaceProject);
550+
} finally {
551+
if (namespaceProject != null) {
552+
try {
553+
gitLabApi.getProjectApi().deleteProject(namespaceProject);
554+
} catch (Exception ignore) {}
555+
}
556+
}
557+
}
558+
539559
@Test
540560
public void testForkProject() throws GitLabApiException {
541561

@@ -544,8 +564,18 @@ public void testForkProject() throws GitLabApiException {
544564

545565
Project project = gitLabApi.getProjectApi().getProject(TEST_GROUP, TEST_GROUP_PROJECT);
546566
assertNotNull(project);
547-
Project forkedProject = gitLabApi.getProjectApi().forkProject(project.getId(), TEST_NAMESPACE);
548-
assertNotNull(forkedProject);
567+
568+
Project forkedProject = null;
569+
try {
570+
forkedProject = gitLabApi.getProjectApi().forkProject(project.getId(), TEST_NAMESPACE);
571+
assertNotNull(forkedProject);
572+
} finally {
573+
if (forkedProject != null) {
574+
try {
575+
gitLabApi.getProjectApi().deleteProject(forkedProject);
576+
} catch (Exception ignore) {}
577+
}
578+
}
549579
}
550580

551581
@Test

0 commit comments

Comments
 (0)