Skip to content

Commit

Permalink
Code cleanup and minor refactorings to make overall API more consistent.
Browse files Browse the repository at this point in the history
  • Loading branch information
cdancy committed Feb 3, 2017
1 parent 23b1f16 commit b4ff92c
Show file tree
Hide file tree
Showing 9 changed files with 91 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import com.cdancy.bitbucket.rest.domain.common.Error;
import com.cdancy.bitbucket.rest.domain.project.Project;
import com.cdancy.bitbucket.rest.domain.commit.Commit;
import com.cdancy.bitbucket.rest.domain.project.ProjectPage;
import com.cdancy.bitbucket.rest.domain.pullrequest.MergeStatus;
import com.cdancy.bitbucket.rest.domain.repository.Repository;
import com.cdancy.bitbucket.rest.domain.tags.Tag;
Expand Down Expand Up @@ -118,6 +119,15 @@ public Object createOrPropagate(Throwable throwable) throws Exception {
throw propagate(throwable);
}
}

public static final class ProjectPageOnError implements Fallback<Object> {
public Object createOrPropagate(Throwable throwable) throws Exception {
if (checkNotNull(throwable, "throwable") != null) {
return createProjectPageFromErrors(getErrors(throwable.getMessage()));
}
throw propagate(throwable);
}
}

public static final class PullRequestOnError implements Fallback<Object> {
public Object createOrPropagate(Throwable throwable) throws Exception {
Expand Down Expand Up @@ -165,13 +175,18 @@ public static Tag createTagFromErrors(List<Error> errors) {
public static Repository createRepositoryFromErrors(List<Error> errors) {
return Repository.create(null, -1, null, null, null, null, false, null, false, null, errors);
}

public static RepositoryPage createRepositoryPageFromErrors(List<Error> errors) {
return RepositoryPage.create(-1, -1, -1, -1, true, null, errors);
}

public static Project createProjectFromErrors(List<Error> errors) {
return Project.create(null, -1, null, null, false, null, null, errors);
}

public static ProjectPage createProjectPageFromErrors(List<Error> errors) {
return ProjectPage.create(-1, -1, -1, -1, true, null, errors);
}

public static PullRequest createPullRequestFromErrors(List<Error> errors) {
return PullRequest.create(-1, -1, null, null, null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public interface BranchApi {
@Named("branch:list")
@Consumes(MediaType.APPLICATION_JSON)
@Path("/api/{jclouds.api-version}/projects/{project}/repos/{repo}/branches")
@Fallback(BitbucketFallbacks.BranchOnError.class)
@Fallback(BitbucketFallbacks.BranchPageOnError.class)
@GET
BranchPage list(@PathParam("project") String project,
@PathParam("repo") String repo,
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/cdancy/bitbucket/rest/features/ProjectApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ public interface ProjectApi {
@GET
@Named("project:list")
@Consumes(MediaType.APPLICATION_JSON)
@Fallback(BitbucketFallbacks.ProjectOnError.class)
ProjectPage list(@Nullable @QueryParam("start") Integer start,
@Nullable @QueryParam("limit") Integer limit,
@Nullable @QueryParam("name") String name,
@Nullable @QueryParam("permission") String permission);
@Fallback(BitbucketFallbacks.ProjectPageOnError.class)
ProjectPage list(@Nullable @QueryParam("name") String name,
@Nullable @QueryParam("permission") String permission,
@Nullable @QueryParam("start") Integer start,
@Nullable @QueryParam("limit") Integer limit);
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,11 @@ Repository get(@PathParam("project") String project,
boolean delete(@PathParam("project") String project,
@PathParam("repo") String repo);

@GET
@Named("repository:list")
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{project}/repos")
@Fallback(BitbucketFallbacks.RepositoryOnError.class)
@Fallback(BitbucketFallbacks.RepositoryPageOnError.class)
@GET
RepositoryPage list(@PathParam("project") String project,
@Nullable @QueryParam("start") Integer start,
@Nullable @QueryParam("limit") Integer limit);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,29 @@ public void testListBranches() throws Exception {
server.shutdown();
}
}

public void testListBranchesNonExistent() throws Exception {
MockWebServer server = mockEtcdJavaWebServer();

server.enqueue(new MockResponse().setBody(payloadFromResource("/branch-list-error.json")).setResponseCode(404));
BitbucketApi baseApi = api(server.getUrl("/"));
BranchApi api = baseApi.branchApi();
try {
String projectKey = "hello";
String repoKey = "world";

BranchPage branch = api.list(projectKey, repoKey, null, null, null, null, null, 1);
assertNotNull(branch);
assertTrue(branch.errors().size() > 0);

Map<String, ?> queryParams = ImmutableMap.of("limit", 1);
assertSent(server, "GET", "/rest/api/" + BitbucketApiMetadata.API_VERSION
+ "/projects/" + projectKey + "/repos/" + repoKey + "/branches", queryParams);
} finally {
baseApi.close();
server.shutdown();
}
}

public void testGetBranchModel() throws Exception {
MockWebServer server = mockEtcdJavaWebServer();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public void testDeleteProject() {

@Test(dependsOnMethods = "testGetProject")
public void testListProjects() {
ProjectPage projectPage = api().list(0, 100, null, null);
ProjectPage projectPage = api().list(null, null, 0, 100);

assertNotNull(projectPage);
assertThat(projectPage.errors()).isEmpty();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ public void testGetProjectListWithLimit() throws Exception {

int start = 0;
int limit = 2;
ProjectPage projectPage = api.list(start, limit, null, null);
ProjectPage projectPage = api.list(null, null, start, limit);

Map<String, ?> queryParams = ImmutableMap.of("start", start, "limit", limit);
assertSent(server, "GET", "/rest/api/" + BitbucketApiMetadata.API_VERSION + "/projects", queryParams);
Expand All @@ -211,4 +211,20 @@ public void testGetProjectListWithLimit() throws Exception {
server.shutdown();
}
}

public void testGetProjectListNonExistent() throws Exception {
MockWebServer server = mockEtcdJavaWebServer();

server.enqueue(new MockResponse().setBody(payloadFromResource("/project-not-exist.json")).setResponseCode(404));
try (BitbucketApi baseApi = api(server.getUrl("/"))) {
ProjectApi api = baseApi.projectApi();
ProjectPage projectPage = api.list(null, null, null, null);

assertThat(projectPage).isNotNull();
assertThat(projectPage.errors()).isNotEmpty();
assertSent(server, "GET", "/rest/api/" + BitbucketApiMetadata.API_VERSION + "/projects");
} finally {
server.shutdown();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,22 @@ public void testGetRepositoryListWithLimit() throws Exception {
server.shutdown();
}
}

public void testGetRepositoryListNonExistent() throws Exception {
MockWebServer server = mockEtcdJavaWebServer();

server.enqueue(new MockResponse().setBody(payloadFromResource("/repository-not-exist.json")).setResponseCode(404));
try (BitbucketApi baseApi = api(server.getUrl("/"))) {
RepositoryApi api = baseApi.repositoryApi();

String projectKey = "non-existent";
RepositoryPage repositoryPage = api.list(projectKey, null, null);

assertThat(repositoryPage).isNotNull();
assertThat(repositoryPage.errors()).isNotEmpty();
assertSent(server, "GET", "/rest/api/" + BitbucketApiMetadata.API_VERSION + "/projects/" + projectKey + "/repos");
} finally {
server.shutdown();
}
}
}
9 changes: 9 additions & 0 deletions src/test/resources/branch-list-error.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"errors":[
{
"context":null,
"message":"The repository 'hello' does not exist in project 'world'",
"exceptionName":"com.atlassian.stash.exception.NoSuchChangesetException"
}
]
}

0 comments on commit b4ff92c

Please sign in to comment.