diff --git a/src/main/java/org/kohsuke/github/GHCheckRun.java b/src/main/java/org/kohsuke/github/GHCheckRun.java index 717bdc985..183b79bf3 100644 --- a/src/main/java/org/kohsuke/github/GHCheckRun.java +++ b/src/main/java/org/kohsuke/github/GHCheckRun.java @@ -1,8 +1,12 @@ package org.kohsuke.github; import com.fasterxml.jackson.annotation.JsonProperty; +import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.kohsuke.github.GHWorkflowRun.Conclusion; +import org.kohsuke.github.GHWorkflowRun.Status; +import org.kohsuke.github.internal.EnumUtils; import org.kohsuke.github.internal.Previews; import java.io.IOException; @@ -11,6 +15,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Locale; /** * Represents a check run. @@ -80,12 +85,27 @@ public class GHCheckRun extends GHObject { * @return Status of the check run * @see Status */ - public String getStatus() { + @WithBridgeMethods(value = String.class, adapterMethod = "statusAsStr") + public Status getStatus() { + return Status.from(status); + } + + @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", justification = "Bridge method of getStatus") + private Object statusAsStr(Status status, Class type) { return status; } public static enum Status { - QUEUED, IN_PROGRESS, COMPLETED + QUEUED, IN_PROGRESS, COMPLETED, UNKNOWN; + + public static Status from(String value) { + return EnumUtils.getEnum(Status.class, value, Status.UNKNOWN); + } + + @Override + public String toString() { + return name().toLowerCase(Locale.ROOT); + } } /** @@ -94,7 +114,13 @@ public class GHCheckRun extends GHObject { * @return Status of the check run * @see Conclusion */ - public String getConclusion() { + @WithBridgeMethods(value = String.class, adapterMethod = "conclusionAsStr") + public Conclusion getConclusion() { + return Conclusion.from(conclusion); + } + + @SuppressFBWarnings(value = "UPM_UNCALLED_PRIVATE_METHOD", justification = "Bridge method of getConclusion") + private Object conclusionAsStr(Conclusion conclusion, Class type) { return conclusion; } @@ -105,7 +131,16 @@ public class GHCheckRun extends GHObject { * Parameters - conclusion. */ public static enum Conclusion { - SUCCESS, FAILURE, NEUTRAL, CANCELLED, TIMED_OUT, ACTION_REQUIRED, SKIPPED + ACTION_REQUIRED, CANCELLED, FAILURE, NEUTRAL, SUCCESS, SKIPPED, STALE, TIMED_OUT, UNKNOWN; + + public static Conclusion from(String value) { + return EnumUtils.getEnum(Conclusion.class, value, Conclusion.UNKNOWN); + } + + @Override + public String toString() { + return name().toLowerCase(Locale.ROOT); + } } /** diff --git a/src/test/java/org/kohsuke/github/EnumTest.java b/src/test/java/org/kohsuke/github/EnumTest.java index 491d3b4f6..acd2ab563 100644 --- a/src/test/java/org/kohsuke/github/EnumTest.java +++ b/src/test/java/org/kohsuke/github/EnumTest.java @@ -14,8 +14,8 @@ public class EnumTest extends AbstractGitHubWireMockTest { @Test public void touchEnums() { assertThat(GHCheckRun.AnnotationLevel.values().length, equalTo(3)); - assertThat(GHCheckRun.Conclusion.values().length, equalTo(7)); - assertThat(GHCheckRun.Status.values().length, equalTo(3)); + assertThat(GHCheckRun.Conclusion.values().length, equalTo(9)); + assertThat(GHCheckRun.Status.values().length, equalTo(4)); assertThat(GHCommentAuthorAssociation.values().length, equalTo(7)); diff --git a/src/test/java/org/kohsuke/github/GHCheckRunBuilderTest.java b/src/test/java/org/kohsuke/github/GHCheckRunBuilderTest.java index 99f4cb8f3..a810db3ee 100644 --- a/src/test/java/org/kohsuke/github/GHCheckRunBuilderTest.java +++ b/src/test/java/org/kohsuke/github/GHCheckRunBuilderTest.java @@ -25,6 +25,7 @@ package org.kohsuke.github; import org.junit.Test; +import org.kohsuke.github.GHCheckRun.Status; import java.io.IOException; import java.util.Date; @@ -59,7 +60,7 @@ public class GHCheckRunBuilderTest extends AbstractGHAppInstallationTest { .withCaption("Princess Unikitty"))) .add(new GHCheckRunBuilder.Action("Help", "what I need help with", "doit")) .create(); - assertEquals("completed", checkRun.getStatus()); + assertEquals(Status.COMPLETED, checkRun.getStatus()); assertEquals(1, checkRun.getOutput().getAnnotationsCount()); assertEquals(1424883286, checkRun.getId()); assertEquals("Hello Text!", checkRun.getOutput().getText()); @@ -79,7 +80,7 @@ public class GHCheckRunBuilderTest extends AbstractGHAppInstallationTest { .withConclusion(GHCheckRun.Conclusion.SUCCESS) .add(output) .create(); - assertEquals("completed", checkRun.getStatus()); + assertEquals(Status.COMPLETED, checkRun.getStatus()); assertEquals("Big Run", checkRun.getOutput().getTitle()); assertEquals("Lots of stuff here ยป", checkRun.getOutput().getSummary()); assertEquals(101, checkRun.getOutput().getAnnotationsCount()); @@ -94,7 +95,7 @@ public class GHCheckRunBuilderTest extends AbstractGHAppInstallationTest { .withConclusion(GHCheckRun.Conclusion.NEUTRAL) .add(new GHCheckRunBuilder.Output("Quick note", "nothing more to see here")) .create(); - assertEquals("completed", checkRun.getStatus()); + assertEquals(Status.COMPLETED, checkRun.getStatus()); assertEquals(0, checkRun.getOutput().getAnnotationsCount()); assertEquals(1424883957, checkRun.getId()); } @@ -105,7 +106,7 @@ public class GHCheckRunBuilderTest extends AbstractGHAppInstallationTest { .createCheckRun("outstanding", "89a9ae301e35e667756034fdc933b1fc94f63fc1") .withStatus(GHCheckRun.Status.IN_PROGRESS) .create(); - assertEquals("in_progress", checkRun.getStatus()); + assertEquals(Status.IN_PROGRESS, checkRun.getStatus()); assertNull(checkRun.getConclusion()); assertEquals(1424883451, checkRun.getId()); } diff --git a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java index 3beeb34bb..8058ff653 100644 --- a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java +++ b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java @@ -2,6 +2,8 @@ package org.kohsuke.github; import org.junit.Rule; import org.junit.Test; +import org.kohsuke.github.GHCheckRun.Conclusion; +import org.kohsuke.github.GHCheckRun.Status; import java.io.IOException; import java.text.SimpleDateFormat; @@ -563,7 +565,7 @@ public class GHEventPayloadTest extends AbstractGitHubWireMockTest { GHCheckRun checkRun = event.getCheckRun(); assertThat(checkRun.getName(), is("Octocoders-linter")); assertThat(checkRun.getHeadSha(), is("ec26c3e57ca3a959ca5aad62de7213c562f8c821")); - assertThat(checkRun.getStatus(), is("completed")); + assertThat(checkRun.getStatus(), is(Status.COMPLETED)); assertThat(checkRun.getNodeId(), is("MDg6Q2hlY2tSdW4xMjg2MjAyMjg=")); assertThat(checkRun.getExternalId(), is("")); @@ -572,7 +574,7 @@ public class GHEventPayloadTest extends AbstractGitHubWireMockTest { assertThat(formatter.format(checkRun.getStartedAt()), is("2019-05-15T15:21:12Z")); assertThat(formatter.format(checkRun.getCompletedAt()), is("2019-05-15T20:22:22Z")); - assertThat(checkRun.getConclusion(), is("success")); + assertThat(checkRun.getConclusion(), is(Conclusion.SUCCESS)); assertThat(checkRun.getUrl().toString(), endsWith("/repos/Codertocat/Hello-World/check-runs/128620228")); assertThat(checkRun.getHtmlUrl().toString(), endsWith("https://github.com/Codertocat/Hello-World/runs/128620228")); diff --git a/src/test/java/org/kohsuke/github/GHRepositoryTest.java b/src/test/java/org/kohsuke/github/GHRepositoryTest.java index c85875364..04aa6ccb0 100644 --- a/src/test/java/org/kohsuke/github/GHRepositoryTest.java +++ b/src/test/java/org/kohsuke/github/GHRepositoryTest.java @@ -3,6 +3,7 @@ package org.kohsuke.github; import com.fasterxml.jackson.databind.JsonMappingException; import org.apache.commons.io.IOUtils; import org.junit.Test; +import org.kohsuke.github.GHCheckRun.Conclusion; import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; @@ -743,7 +744,7 @@ public class GHRepositoryTest extends AbstractGitHubWireMockTest { // Check if the checkruns are all succeeded and if we got all of them int checkRunsCount = 0; for (GHCheckRun checkRun : checkRuns) { - assertThat(checkRun.getConclusion(), equalTo("success")); + assertThat(checkRun.getConclusion(), equalTo(Conclusion.SUCCESS)); checkRunsCount++; } assertThat(checkRunsCount, equalTo(expectedCount));