mirror of
https://github.com/jlengrand/github-api.git
synced 2026-03-10 08:21:21 +00:00
Merge pull request #1159 from gsmet/check-run-enum
Fix issues related to introduction of new values in GHEvent
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
package org.kohsuke.github;
|
package org.kohsuke.github;
|
||||||
|
|
||||||
|
import org.kohsuke.github.internal.EnumUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.kohsuke.github.internal.Previews.MACHINE_MAN;
|
import static org.kohsuke.github.internal.Previews.MACHINE_MAN;
|
||||||
|
|
||||||
@@ -20,7 +23,7 @@ public class GHApp extends GHObject {
|
|||||||
private String description;
|
private String description;
|
||||||
private String externalUrl;
|
private String externalUrl;
|
||||||
private Map<String, String> permissions;
|
private Map<String, String> permissions;
|
||||||
private List<GHEvent> events;
|
private List<String> events;
|
||||||
private long installationsCount;
|
private long installationsCount;
|
||||||
private String htmlUrl;
|
private String htmlUrl;
|
||||||
|
|
||||||
@@ -114,7 +117,9 @@ public class GHApp extends GHObject {
|
|||||||
* @return the events
|
* @return the events
|
||||||
*/
|
*/
|
||||||
public List<GHEvent> getEvents() {
|
public List<GHEvent> getEvents() {
|
||||||
return events;
|
return events.stream()
|
||||||
|
.map(e -> EnumUtils.getEnumOrDefault(GHEvent.class, e, GHEvent.UNKNOWN))
|
||||||
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -126,7 +131,7 @@ public class GHApp extends GHObject {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void setEvents(List<GHEvent> events) {
|
public void setEvents(List<GHEvent> events) {
|
||||||
this.events = events;
|
this.events = events.stream().map(GHEvent::symbol).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package org.kohsuke.github;
|
package org.kohsuke.github;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.kohsuke.github.internal.EnumUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.kohsuke.github.internal.Previews.GAMBIT;
|
import static org.kohsuke.github.internal.Previews.GAMBIT;
|
||||||
import static org.kohsuke.github.internal.Previews.MACHINE_MAN;
|
import static org.kohsuke.github.internal.Previews.MACHINE_MAN;
|
||||||
@@ -35,7 +37,7 @@ public class GHAppInstallation extends GHObject {
|
|||||||
@JsonProperty("target_type")
|
@JsonProperty("target_type")
|
||||||
private GHTargetType targetType;
|
private GHTargetType targetType;
|
||||||
private Map<String, GHPermissionType> permissions;
|
private Map<String, GHPermissionType> permissions;
|
||||||
private List<GHEvent> events;
|
private List<String> events;
|
||||||
@JsonProperty("single_file_name")
|
@JsonProperty("single_file_name")
|
||||||
private String singleFileName;
|
private String singleFileName;
|
||||||
@JsonProperty("repository_selection")
|
@JsonProperty("repository_selection")
|
||||||
@@ -250,7 +252,9 @@ public class GHAppInstallation extends GHObject {
|
|||||||
* @return the events
|
* @return the events
|
||||||
*/
|
*/
|
||||||
public List<GHEvent> getEvents() {
|
public List<GHEvent> getEvents() {
|
||||||
return events;
|
return events.stream()
|
||||||
|
.map(e -> EnumUtils.getEnumOrDefault(GHEvent.class, e, GHEvent.UNKNOWN))
|
||||||
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -262,7 +266,7 @@ public class GHAppInstallation extends GHObject {
|
|||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void setEvents(List<GHEvent> events) {
|
public void setEvents(List<GHEvent> events) {
|
||||||
this.events = events;
|
this.events = events.stream().map(GHEvent::symbol).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
package org.kohsuke.github;
|
package org.kohsuke.github;
|
||||||
|
|
||||||
import org.kohsuke.github.internal.EnumUtils;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook event type.
|
* Hook event type.
|
||||||
*
|
*
|
||||||
@@ -24,6 +20,8 @@ public enum GHEvent {
|
|||||||
DEPLOY_KEY,
|
DEPLOY_KEY,
|
||||||
DEPLOYMENT,
|
DEPLOYMENT,
|
||||||
DEPLOYMENT_STATUS,
|
DEPLOYMENT_STATUS,
|
||||||
|
DISCUSSION,
|
||||||
|
DISCUSSION_COMMENT,
|
||||||
DOWNLOAD,
|
DOWNLOAD,
|
||||||
FOLLOW,
|
FOLLOW,
|
||||||
FORK,
|
FORK,
|
||||||
@@ -89,46 +87,4 @@ public enum GHEvent {
|
|||||||
return "*";
|
return "*";
|
||||||
return name().toLowerCase(Locale.ENGLISH);
|
return name().toLowerCase(Locale.ENGLISH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Representation of GitHub Event Type
|
|
||||||
*
|
|
||||||
* @see <a href="https://docs.github.com/en/developers/webhooks-and-events/github-event-types">GitHub event
|
|
||||||
* types</a>
|
|
||||||
*/
|
|
||||||
enum GitHubEventType {
|
|
||||||
CommitCommentEvent(COMMIT_COMMENT),
|
|
||||||
CreateEvent(CREATE),
|
|
||||||
DeleteEvent(DELETE),
|
|
||||||
ForkEvent(FORK),
|
|
||||||
GollumEvent(GOLLUM),
|
|
||||||
IssueCommentEvent(ISSUE_COMMENT),
|
|
||||||
IssuesEvent(ISSUES),
|
|
||||||
MemberEvent(MEMBER),
|
|
||||||
PublicEvent(PUBLIC),
|
|
||||||
PullRequestEvent(PULL_REQUEST),
|
|
||||||
PullRequestReviewEvent(PULL_REQUEST_REVIEW),
|
|
||||||
PullRequestReviewCommentEvent(PULL_REQUEST_REVIEW_COMMENT),
|
|
||||||
PushEvent(PUSH),
|
|
||||||
ReleaseEvent(RELEASE),
|
|
||||||
WatchEvent(WATCH),
|
|
||||||
UnknownEvent(UNKNOWN);
|
|
||||||
|
|
||||||
private final GHEvent event;
|
|
||||||
GitHubEventType(GHEvent event) {
|
|
||||||
this.event = event;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Required due to different naming conventions between different GitHub event names for Webhook events and
|
|
||||||
* GitHub events
|
|
||||||
*
|
|
||||||
* @param event
|
|
||||||
* the github event as a string to convert to Event enum
|
|
||||||
* @return GHEvent
|
|
||||||
*/
|
|
||||||
static GHEvent transformToGHEvent(@Nonnull String event) {
|
|
||||||
return EnumUtils.getEnumOrDefault(GitHubEventType.class, event, UnknownEvent).event;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,9 @@ package org.kohsuke.github;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||||
import org.kohsuke.github.GHEvent.GitHubEventType;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents an event.
|
* Represents an event.
|
||||||
@@ -19,6 +18,16 @@ public class GHEventInfo extends GitHubInteractiveObject {
|
|||||||
|
|
||||||
private long id;
|
private long id;
|
||||||
private String created_at;
|
private String created_at;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of GitHub Event API Event Type.
|
||||||
|
*
|
||||||
|
* This is not the same as the values used for hook methods such as
|
||||||
|
* {@link GHRepository#createHook(String, Map, Collection, boolean)}.
|
||||||
|
*
|
||||||
|
* @see <a href="https://docs.github.com/en/developers/webhooks-and-events/github-event-types">GitHub event
|
||||||
|
* types</a>
|
||||||
|
*/
|
||||||
private String type;
|
private String type;
|
||||||
|
|
||||||
// these are all shallow objects
|
// these are all shallow objects
|
||||||
@@ -41,13 +50,45 @@ public class GHEventInfo extends GitHubInteractiveObject {
|
|||||||
private String name; // owner/repo
|
private String name; // owner/repo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static final Map<String, GHEvent> mapTypeStringToEvent = createEventMap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map for GitHub Event API Event Type to GHEvent.
|
||||||
|
*
|
||||||
|
* @see <a href="https://docs.github.com/en/developers/webhooks-and-events/github-event-types">GitHub event
|
||||||
|
* types</a>
|
||||||
|
*/
|
||||||
|
private static Map<String, GHEvent> createEventMap() {
|
||||||
|
HashMap<String, GHEvent> map = new HashMap<>();
|
||||||
|
map.put("CommitCommentEvent", GHEvent.COMMIT_COMMENT);
|
||||||
|
map.put("CreateEvent", GHEvent.CREATE);
|
||||||
|
map.put("DeleteEvent", GHEvent.DELETE);
|
||||||
|
map.put("ForkEvent", GHEvent.FORK);
|
||||||
|
map.put("GollumEvent", GHEvent.GOLLUM);
|
||||||
|
map.put("IssueCommentEvent", GHEvent.ISSUE_COMMENT);
|
||||||
|
map.put("IssuesEvent", GHEvent.ISSUES);
|
||||||
|
map.put("MemberEvent", GHEvent.MEMBER);
|
||||||
|
map.put("PublicEvent", GHEvent.PUBLIC);
|
||||||
|
map.put("PullRequestEvent", GHEvent.PULL_REQUEST);
|
||||||
|
map.put("PullRequestReviewEvent", GHEvent.PULL_REQUEST_REVIEW);
|
||||||
|
map.put("PullRequestReviewCommentEvent", GHEvent.PULL_REQUEST_REVIEW_COMMENT);
|
||||||
|
map.put("PushEvent", GHEvent.PUSH);
|
||||||
|
map.put("ReleaseEvent", GHEvent.RELEASE);
|
||||||
|
map.put("WatchEvent", GHEvent.WATCH);
|
||||||
|
return Collections.unmodifiableMap(map);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GHEvent transformTypeToGHEvent(String type) {
|
||||||
|
return mapTypeStringToEvent.getOrDefault(type, GHEvent.UNKNOWN);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets type.
|
* Gets type.
|
||||||
*
|
*
|
||||||
* @return the type
|
* @return the type
|
||||||
*/
|
*/
|
||||||
public GHEvent getType() {
|
public GHEvent getType() {
|
||||||
return GitHubEventType.transformToGHEvent(type);
|
return transformTypeToGHEvent(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
GHEventInfo wrapUp(GitHub root) {
|
GHEventInfo wrapUp(GitHub root) {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package org.kohsuke.github;
|
package org.kohsuke.github;
|
||||||
|
|
||||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||||
|
import org.kohsuke.github.internal.EnumUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,10 +40,7 @@ public abstract class GHHook extends GHObject {
|
|||||||
public EnumSet<GHEvent> getEvents() {
|
public EnumSet<GHEvent> getEvents() {
|
||||||
EnumSet<GHEvent> s = EnumSet.noneOf(GHEvent.class);
|
EnumSet<GHEvent> s = EnumSet.noneOf(GHEvent.class);
|
||||||
for (String e : events) {
|
for (String e : events) {
|
||||||
if (e.equals("*"))
|
s.add(e.equals("*") ? GHEvent.ALL : EnumUtils.getEnumOrDefault(GHEvent.class, e, GHEvent.UNKNOWN));
|
||||||
s.add(GHEvent.ALL);
|
|
||||||
else
|
|
||||||
s.add(Enum.valueOf(GHEvent.class, e.toUpperCase(Locale.ENGLISH)));
|
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public final class EnumUtils {
|
|||||||
if (value == null) {
|
if (value == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getEnumOrDefault(enumClass, value.toUpperCase(Locale.ROOT), defaultEnum);
|
return getEnumOrDefault(enumClass, value, defaultEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,8 +49,8 @@ public final class EnumUtils {
|
|||||||
*/
|
*/
|
||||||
public static <E extends Enum<E>> E getEnumOrDefault(Class<E> enumClass, String value, E defaultEnum) {
|
public static <E extends Enum<E>> E getEnumOrDefault(Class<E> enumClass, String value, E defaultEnum) {
|
||||||
try {
|
try {
|
||||||
return Enum.valueOf(enumClass, value);
|
return Enum.valueOf(enumClass, value.toUpperCase(Locale.ROOT));
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (NullPointerException | IllegalArgumentException e) {
|
||||||
LOGGER.warning("Unknown value " + value + " for enum class " + enumClass.getName() + ", defaulting to "
|
LOGGER.warning("Unknown value " + value + " for enum class " + enumClass.getName() + ", defaulting to "
|
||||||
+ defaultEnum.name());
|
+ defaultEnum.name());
|
||||||
return defaultEnum;
|
return defaultEnum;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class EnumTest extends AbstractGitHubWireMockTest {
|
|||||||
|
|
||||||
assertThat(GHDirection.values().length, equalTo(2));
|
assertThat(GHDirection.values().length, equalTo(2));
|
||||||
|
|
||||||
assertThat(GHEvent.values().length, equalTo(58));
|
assertThat(GHEvent.values().length, equalTo(60));
|
||||||
assertThat(GHEvent.ALL.symbol(), equalTo("*"));
|
assertThat(GHEvent.ALL.symbol(), equalTo("*"));
|
||||||
assertThat(GHEvent.PULL_REQUEST.symbol(), equalTo(GHEvent.PULL_REQUEST.toString().toLowerCase()));
|
assertThat(GHEvent.PULL_REQUEST.symbol(), equalTo(GHEvent.PULL_REQUEST.toString().toLowerCase()));
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package org.kohsuke.github;
|
package org.kohsuke.github;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.kohsuke.github.GHEvent.GitHubEventType;
|
|
||||||
|
|
||||||
import static org.hamcrest.MatcherAssert.assertThat;
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.is;
|
import static org.hamcrest.Matchers.is;
|
||||||
@@ -26,10 +25,9 @@ public class GHEventTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void regressionTest() {
|
public void regressionTest() {
|
||||||
assertThat(GitHubEventType.transformToGHEvent("NewlyAddedOrBogusEvent"), is(GHEvent.UNKNOWN));
|
assertThat(GHEventInfo.transformTypeToGHEvent("NewlyAddedOrBogusEvent"), is(GHEvent.UNKNOWN));
|
||||||
for (GitHubEventType gitHubEventType : GitHubEventType.values()) {
|
for (String eventInfoType : GHEventInfo.mapTypeStringToEvent.keySet()) {
|
||||||
assertThat(GitHubEventType.transformToGHEvent(gitHubEventType.name()),
|
assertThat(GHEventInfo.transformTypeToGHEvent(eventInfoType), is(oldTransformationFunction(eventInfoType)));
|
||||||
is(oldTransformationFunction(gitHubEventType.name())));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ public class EnumUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetEnum() {
|
public void testGetEnum() {
|
||||||
|
assertThat(EnumUtils.getEnumOrDefault(TestEnum.class, null, TestEnum.UNKNOWN), equalTo(TestEnum.UNKNOWN));
|
||||||
|
|
||||||
assertThat(EnumUtils.getNullableEnumOrDefault(TestEnum.class, null, TestEnum.UNKNOWN), nullValue());
|
assertThat(EnumUtils.getNullableEnumOrDefault(TestEnum.class, null, TestEnum.UNKNOWN), nullValue());
|
||||||
assertThat(EnumUtils.getNullableEnumOrDefault(TestEnum.class, "foobar", TestEnum.UNKNOWN),
|
assertThat(EnumUtils.getNullableEnumOrDefault(TestEnum.class, "foobar", TestEnum.UNKNOWN),
|
||||||
equalTo(TestEnum.UNKNOWN));
|
equalTo(TestEnum.UNKNOWN));
|
||||||
|
|||||||
Reference in New Issue
Block a user