Skip to content

Commit

Permalink
Merge pull request #256 from shinusuresh/feature/labels-get-byname
Browse files Browse the repository at this point in the history
Support to labels endpoint - filter by labelname
  • Loading branch information
cdancy committed Jan 21, 2021
2 parents 39043f7 + f33f8d7 commit b05c52d
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@
import java.util.List;

@AutoValue
public abstract class Labels implements ErrorsHolder {
public abstract class Label implements ErrorsHolder {

public abstract String name();

Labels() {
Label() {
}

@SerializedNames({"name", "errors"})
public static Labels create(final String name, final List<Error> errors) {
return new AutoValue_Labels(BitbucketUtils.nullToEmpty(errors), name);
public static Label create(final String name, final List<Error> errors) {
return new AutoValue_Label(BitbucketUtils.nullToEmpty(errors), name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@
import java.util.List;

@AutoValue
public abstract class LabelsPage implements Page<Labels>, ErrorsHolder {
public abstract class LabelsPage implements Page<Label>, ErrorsHolder {

@SerializedNames({"start", "limit", "size", "nextPageStart", "isLastPage", "values", "errors"})
public static LabelsPage create(final int start,
final int limit,
final int size,
final int nextPageStart,
final boolean isLastPage,
final List<Labels> values,
final List<Label> values,
@Nullable final List<Error> errors) {

return new AutoValue_LabelsPage(start,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import com.cdancy.bitbucket.rest.domain.insights.AnnotationsResponse;
import com.cdancy.bitbucket.rest.domain.insights.InsightReport;
import com.cdancy.bitbucket.rest.domain.insights.InsightReportPage;
import com.cdancy.bitbucket.rest.domain.labels.Label;
import com.cdancy.bitbucket.rest.domain.labels.LabelsPage;
import com.cdancy.bitbucket.rest.domain.participants.Participants;
import com.cdancy.bitbucket.rest.domain.participants.Participants.Role;
Expand Down Expand Up @@ -598,6 +599,16 @@ public Object createOrPropagate(final Throwable throwable) throws Exception {
}
}

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

public static RequestStatus createRequestStatusFromErrors(final List<Error> errors) {
return RequestStatus.create(false, errors);
}
Expand Down Expand Up @@ -793,6 +804,10 @@ public static LabelsPage createLabelsPageFromErrors(final List<Error> errors) {
return LabelsPage.create(0, 0, 0, 0, false, null, errors);
}

public static Label createLabelByNameFromErrors(final List<Error> errors) {
return Label.create("", errors);
}

/**
* Parse list of Error's from output.
*
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/cdancy/bitbucket/rest/features/LabelsApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package com.cdancy.bitbucket.rest.features;

import com.cdancy.bitbucket.rest.annotations.Documentation;
import com.cdancy.bitbucket.rest.domain.labels.Label;
import com.cdancy.bitbucket.rest.domain.labels.LabelsPage;
import com.cdancy.bitbucket.rest.fallbacks.BitbucketFallbacks;
import com.cdancy.bitbucket.rest.filters.BitbucketAuthenticationFilter;
Expand All @@ -29,6 +30,7 @@
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
Expand All @@ -45,4 +47,12 @@ public interface LabelsApi {
@Fallback(BitbucketFallbacks.LabelsOnError.class)
@GET
LabelsPage list(@Nullable @QueryParam("prefix") String prefix);

@Named("labels:get-by-name")
@Documentation({"https://docs.atlassian.com/bitbucket-server/rest/6.0.0/bitbucket-rest.html#idp88"})
@Consumes(MediaType.APPLICATION_JSON)
@Path("/api/{jclouds.api-version}/labels/{labelName}")
@Fallback(BitbucketFallbacks.LabelByNameOnError.class)
@GET
Label getLabelByName(@PathParam("labelName") String labelName);
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ public void testLabel() {
assertThat(api().list(null).values()).isEmpty();
}

@Test
public void testLabelByName() {
assertThat(api().getLabelByName("labelName").name()).isEmpty();
}

private LabelsApi api() {
return api.labelsApi();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import com.cdancy.bitbucket.rest.BaseBitbucketMockTest;
import com.cdancy.bitbucket.rest.BitbucketApi;
import com.cdancy.bitbucket.rest.domain.labels.Label;
import com.cdancy.bitbucket.rest.domain.labels.LabelsPage;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
Expand Down Expand Up @@ -65,4 +66,49 @@ public void testListAllLabelError() throws IOException {
server.shutdown();
}
}

public void testGetLabelByName() throws IOException {
final MockWebServer server = mockWebServer();

server.enqueue(new MockResponse().setBody(payloadFromResource("/labels-get-byname.json")).setResponseCode(201));

try (final BitbucketApi baseApi = api(server.url("/").url())) {
final Label label = baseApi.labelsApi().getLabelByName("label");
assertThat(label).isNotNull();
assertThat(label.errors().isEmpty()).isTrue();

assertThat(label.name()).isEqualTo("labelName");

} finally {
server.shutdown();
}
}

public void testGetLabelByNameReturnError() throws IOException {
final MockWebServer server = mockWebServer();

server.enqueue(new MockResponse().setBody(payloadFromResource("/errors.json")).setResponseCode(401));

try (final BitbucketApi baseApi = api(server.url("/").url())) {
final Label label = baseApi.labelsApi().getLabelByName("label");
assertThat(label.name()).isEmpty();
assertThat(label.errors()).hasSizeGreaterThan(0);

} finally {
server.shutdown();
}
}

@Test(expectedExceptions = NullPointerException.class)
public void testLabelIfNullThrowException() throws IOException {
final MockWebServer server = mockWebServer();

server.enqueue(new MockResponse().setBody(payloadFromResource("/errors.json")).setResponseCode(401));

try (final BitbucketApi baseApi = api(server.url("/").url())) {
baseApi.labelsApi().getLabelByName(null);
} finally {
server.shutdown();
}
}
}
4 changes: 4 additions & 0 deletions src/test/resources/labels-get-byname.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"name": "labelName"
}

0 comments on commit b05c52d

Please sign in to comment.