Skip to content

Commit cc0ee01

Browse files
authored
Merge pull request #192 from mronus/feature/list-all-repos
RepositoryApi: Listing all repos regardless of project ( copy of #191)
2 parents 9917801 + 7fcd7ab commit cc0ee01

File tree

5 files changed

+319
-34
lines changed

5 files changed

+319
-34
lines changed

src/main/java/com/cdancy/bitbucket/rest/features/RepositoryApi.java

+27-14
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@
5151

5252
@Produces(MediaType.APPLICATION_JSON)
5353
@RequestFilters(BitbucketAuthenticationFilter.class)
54-
@Path("/rest/api/{jclouds.api-version}/projects")
54+
@Path("/rest/api/{jclouds.api-version}")
5555
@SuppressWarnings("PMD.AvoidDuplicateLiterals")
5656
public interface RepositoryApi {
5757

5858
@Named("repository:create")
5959
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/latest/bitbucket-rest.html#idm45888277587248"})
6060
@Consumes(MediaType.APPLICATION_JSON)
61-
@Path("/{project}/repos")
61+
@Path("/projects/{project}/repos")
6262
@Fallback(BitbucketFallbacks.RepositoryOnError.class)
6363
@POST
6464
Repository create(@PathParam("project") String project,
@@ -67,7 +67,7 @@ Repository create(@PathParam("project") String project,
6767
@Named("repository:get")
6868
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/latest/bitbucket-rest.html#idm45888277593152"})
6969
@Consumes(MediaType.APPLICATION_JSON)
70-
@Path("/{project}/repos/{repo}")
70+
@Path("/projects/{project}/repos/{repo}")
7171
@Fallback(BitbucketFallbacks.RepositoryOnError.class)
7272
@GET
7373
Repository get(@PathParam("project") String project,
@@ -76,7 +76,7 @@ Repository get(@PathParam("project") String project,
7676
@Named("repository:fork")
7777
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/latest/bitbucket-rest.html#idm45888277587248"})
7878
@Consumes(MediaType.APPLICATION_JSON)
79-
@Path("/{project}/repos/{repo}")
79+
@Path("/projects/{project}/repos/{repo}")
8080
@Payload("%7B \"name\": \"{newRepo}\", \"project\": %7B \"key\": \"{newProject}\" %7D %7D")
8181
@Fallback(BitbucketFallbacks.RepositoryOnError.class)
8282
@POST
@@ -88,7 +88,7 @@ Repository fork(@PathParam("project") String project,
8888
@Named("repository:delete")
8989
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/latest/bitbucket-rest.html#idm45888277567792"})
9090
@Consumes(MediaType.APPLICATION_JSON)
91-
@Path("/{project}/repos/{repo}")
91+
@Path("/projects/{project}/repos/{repo}")
9292
@Fallback(BitbucketFallbacks.RequestStatusOnError.class)
9393
@ResponseParser(DeleteRepositoryParser.class)
9494
@DELETE
@@ -98,17 +98,30 @@ RequestStatus delete(@PathParam("project") String project,
9898
@Named("repository:list")
9999
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/latest/bitbucket-rest.html#idm45888277593152"})
100100
@Consumes(MediaType.APPLICATION_JSON)
101-
@Path("/{project}/repos")
101+
@Path("/projects/{project}/repos")
102102
@Fallback(BitbucketFallbacks.RepositoryPageOnError.class)
103103
@GET
104104
RepositoryPage list(@PathParam("project") String project,
105105
@Nullable @QueryParam("start") Integer start,
106106
@Nullable @QueryParam("limit") Integer limit);
107107

108+
@Named("repository:list-all")
109+
@Documentation({"https://docs.atlassian.com/bitbucket-server/rest/5.0.0/bitbucket-rest.html#idm45659055274784"})
110+
@Consumes(MediaType.APPLICATION_JSON)
111+
@Path("/repos")
112+
@Fallback(BitbucketFallbacks.RepositoryPageOnError.class)
113+
@GET
114+
RepositoryPage listAll(@Nullable @QueryParam("projectname") String project,
115+
@Nullable @QueryParam("name") String repo,
116+
@Nullable @QueryParam("permission") String permission,
117+
@Nullable @QueryParam("visibility") String visibility,
118+
@Nullable @QueryParam("start") Integer start,
119+
@Nullable @QueryParam("limit") Integer limit);
120+
108121
@Named("repository:get-pullrequest-settings")
109122
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054915136"})
110123
@Consumes(MediaType.APPLICATION_JSON)
111-
@Path("/{project}/repos/{repo}/settings/pull-requests")
124+
@Path("/projects/{project}/repos/{repo}/settings/pull-requests")
112125
@Fallback(BitbucketFallbacks.PullRequestSettingsOnError.class)
113126
@GET
114127
PullRequestSettings getPullRequestSettings(@PathParam("project") String project,
@@ -117,7 +130,7 @@ PullRequestSettings getPullRequestSettings(@PathParam("project") String project,
117130
@Named("repository:update-pullrequest-settings")
118131
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054915136"})
119132
@Consumes(MediaType.APPLICATION_JSON)
120-
@Path("/{project}/repos/{repo}/settings/pull-requests")
133+
@Path("/projects/{project}/repos/{repo}/settings/pull-requests")
121134
@Fallback(BitbucketFallbacks.PullRequestSettingsOnError.class)
122135
@POST
123136
PullRequestSettings updatePullRequestSettings(@PathParam("project") String project,
@@ -127,7 +140,7 @@ PullRequestSettings updatePullRequestSettings(@PathParam("project") String proje
127140
@Named("repository:create-permissions-by-user")
128141
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054938032"})
129142
@Consumes(MediaType.APPLICATION_JSON)
130-
@Path("/{project}/repos/{repo}/permissions/users")
143+
@Path("/projects/{project}/repos/{repo}/permissions/users")
131144
@Fallback(BitbucketFallbacks.RequestStatusOnError.class)
132145
@ResponseParser(RequestStatusParser.class)
133146
@PUT
@@ -139,7 +152,7 @@ RequestStatus createPermissionsByUser(@PathParam("project") String project,
139152
@Named("repository:delete-permissions-by-user")
140153
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054938032"})
141154
@Consumes(MediaType.APPLICATION_JSON)
142-
@Path("/{project}/repos/{repo}/permissions/users")
155+
@Path("/projects/{project}/repos/{repo}/permissions/users")
143156
@Fallback(BitbucketFallbacks.RequestStatusOnError.class)
144157
@ResponseParser(RequestStatusParser.class)
145158
@DELETE
@@ -150,7 +163,7 @@ RequestStatus deletePermissionsByUser(@PathParam("project") String project,
150163
@Named("repository:list-permissions-by-user")
151164
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054938032"})
152165
@Consumes(MediaType.APPLICATION_JSON)
153-
@Path("/{project}/repos/{repo}/permissions/users")
166+
@Path("/projects/{project}/repos/{repo}/permissions/users")
154167
@Fallback(BitbucketFallbacks.PermissionsPageOnError.class)
155168
@GET
156169
PermissionsPage listPermissionsByUser(@PathParam("project") String project,
@@ -161,7 +174,7 @@ PermissionsPage listPermissionsByUser(@PathParam("project") String project,
161174
@Named("repository:create-permissions-by-group")
162175
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054969200"})
163176
@Consumes(MediaType.APPLICATION_JSON)
164-
@Path("/{project}/repos/{repo}/permissions/groups")
177+
@Path("/projects/{project}/repos/{repo}/permissions/groups")
165178
@Fallback(BitbucketFallbacks.RequestStatusOnError.class)
166179
@ResponseParser(RequestStatusParser.class)
167180
@PUT
@@ -173,7 +186,7 @@ RequestStatus createPermissionsByGroup(@PathParam("project") String project,
173186
@Named("repository:delete-permissions-by-group")
174187
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054969200"})
175188
@Consumes(MediaType.APPLICATION_JSON)
176-
@Path("/{project}/repos/{repo}/permissions/groups")
189+
@Path("/projects/{project}/repos/{repo}/permissions/groups")
177190
@Fallback(BitbucketFallbacks.RequestStatusOnError.class)
178191
@ResponseParser(RequestStatusParser.class)
179192
@DELETE
@@ -184,7 +197,7 @@ RequestStatus deletePermissionsByGroup(@PathParam("project") String project,
184197
@Named("repository:list-permissions-by-group")
185198
@Documentation({"https://developer.atlassian.com/static/rest/bitbucket-server/5.0.0/bitbucket-rest.html#idm45659054969200"})
186199
@Consumes(MediaType.APPLICATION_JSON)
187-
@Path("/{project}/repos/{repo}/permissions/groups")
200+
@Path("/projects/{project}/repos/{repo}/permissions/groups")
188201
@Fallback(BitbucketFallbacks.PermissionsPageOnError.class)
189202
@GET
190203
PermissionsPage listPermissionsByGroup(@PathParam("project") String project,

src/test/java/com/cdancy/bitbucket/rest/features/RepositoryApiLiveTest.java

+59-8
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public void init() {
6161
this.user = TestUtilities.getDefaultUser(this.bitbucketAuthentication, this.api);
6262
}
6363

64-
@Test
64+
@Test
6565
public void testGetRepository() {
6666
final Repository repository = api().get(projectKey, repoKey);
6767
assertThat(repository).isNotNull();
@@ -105,6 +105,57 @@ public void testListRepositories() {
105105
assertThat(found).isTrue();
106106
}
107107

108+
@Test
109+
public void testListAllRepositories() {
110+
final RepositoryPage repositoryPage = api().listAll(null, null, null, null, 0, 100);
111+
112+
assertThat(repositoryPage).isNotNull();
113+
assertThat(repositoryPage.errors()).isEmpty();
114+
assertThat(repositoryPage.size()).isGreaterThan(0);
115+
116+
assertThat(repositoryPage.values()).isNotEmpty();
117+
boolean found = false;
118+
for (final Repository possibleRepo : repositoryPage.values()) {
119+
if (possibleRepo.name().equals(repoKey)) {
120+
found = true;
121+
break;
122+
}
123+
}
124+
assertThat(found).isTrue();
125+
}
126+
127+
@Test
128+
public void testListAllRepositoriesByRepository() {
129+
final RepositoryPage repositoryPage = api().listAll(null, repoKey, null, null, 0, 100);
130+
131+
assertThat(repositoryPage).isNotNull();
132+
assertThat(repositoryPage.errors()).isEmpty();
133+
assertThat(repositoryPage.size()).isEqualTo(1);
134+
135+
assertThat(repositoryPage.values()).isNotEmpty();
136+
assertThat(repositoryPage.values().get(0).name()).isEqualTo(repoKey);
137+
}
138+
139+
@Test
140+
public void testListAllRepositoriesByProjectNonExistent() {
141+
final String projectKey = "HelloWorld";
142+
final RepositoryPage repositoryPage = api().listAll(projectKey, null, null, null, 0, 100);
143+
assertThat(repositoryPage).isNotNull();
144+
assertThat(repositoryPage.errors()).isEmpty();
145+
assertThat(repositoryPage.size()).isEqualTo(0);
146+
assertThat(repositoryPage.values()).isEmpty();
147+
}
148+
149+
@Test
150+
public void testListAllRepositoriesByRepositoryNonExistent() {
151+
final String repoKey = "HelloWorld";
152+
final RepositoryPage repositoryPage = api().listAll(null, repoKey, null, null, 0, 100);
153+
assertThat(repositoryPage).isNotNull();
154+
assertThat(repositoryPage.errors()).isEmpty();
155+
assertThat(repositoryPage.size()).isEqualTo(0);
156+
assertThat(repositoryPage.values()).isEmpty();
157+
}
158+
108159
@Test
109160
public void testDeleteRepositoryNonExistent() {
110161
final String random = randomStringLettersOnly();
@@ -143,7 +194,7 @@ public void testUpdatePullRequestSettings() {
143194
assertThat(settings.mergeConfig().strategies()).isNotEmpty();
144195
assertThat(MergeStrategy.MergeStrategyId.SQUASH.equals(settings.mergeConfig().defaultStrategy().id()));
145196
}
146-
197+
147198
@Test (dependsOnMethods = "testUpdatePullRequestSettings")
148199
public void testGetPullRequestSettings() {
149200
final PullRequestSettings settings = api().getPullRequestSettings(projectKey, repoKey);
@@ -157,9 +208,9 @@ public void testCreatePermissionByUser() {
157208
final RequestStatus success = api().createPermissionsByUser(projectKey, repoKey, repoWriteKeyword, user.slug());
158209
assertThat(success).isNotNull();
159210
assertThat(success.value()).isTrue();
160-
assertThat(success.errors()).isEmpty();
211+
assertThat(success.errors()).isEmpty();
161212
}
162-
213+
163214
@Test(dependsOnMethods = "testCreatePermissionByUser")
164215
public void testListPermissionByUser() {
165216
final PermissionsPage permissionsPage = api().listPermissionsByUser(projectKey, repoKey, 0, 100);
@@ -173,21 +224,21 @@ public void testDeletePermissionByUser() {
173224
assertThat(success.value()).isTrue();
174225
assertThat(success.errors()).isEmpty();
175226
}
176-
227+
177228
@Test(dependsOnMethods = {testGetRepoKeyword})
178229
public void testCreatePermissionByGroup() {
179230
final RequestStatus success = api().createPermissionsByGroup(projectKey, repoKey, repoWriteKeyword, defaultBitbucketGroup);
180231
assertThat(success).isNotNull();
181232
assertThat(success.value()).isTrue();
182233
assertThat(success.errors()).isEmpty();
183234
}
184-
235+
185236
@Test(dependsOnMethods = "testCreatePermissionByGroup")
186237
public void testListPermissionByGroup() {
187238
final PermissionsPage permissionsPage = api().listPermissionsByGroup(projectKey, repoKey, 0, 100);
188239
assertThat(permissionsPage.values()).isNotEmpty();
189240
}
190-
241+
191242
@Test(dependsOnMethods = {"testListPermissionByGroup"})
192243
public void testDeletePermissionByGroup() {
193244
final RequestStatus success = api().deletePermissionsByGroup(projectKey, repoKey, defaultBitbucketGroup);
@@ -217,7 +268,7 @@ public void testCreatePermissionByUserNonExistent() {
217268
final RequestStatus success = api().createPermissionsByUser(projectKey, repoKey, repoWriteKeyword, TestUtilities.randomString());
218269
assertThat(success).isNotNull();
219270
assertThat(success.value()).isFalse();
220-
assertThat(success.errors()).isNotEmpty();
271+
assertThat(success.errors()).isNotEmpty();
221272
}
222273

223274
@Test(dependsOnMethods = {testGetRepoKeyword})

0 commit comments

Comments
 (0)