Skip to content

Commit fbfba70

Browse files
authored
Merge pull request #1159 from gsmet/check-run-enum
Fix issues related to introduction of new values in GHEvent
2 parents 30a6cc5 + 54d8fe9 commit fbfba70

9 files changed

Lines changed: 72 additions & 69 deletions

File tree

src/main/java/org/kohsuke/github/GHApp.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.kohsuke.github;
22

3+
import org.kohsuke.github.internal.EnumUtils;
4+
35
import java.io.IOException;
46
import java.net.URL;
57
import java.util.List;
68
import java.util.Map;
9+
import java.util.stream.Collectors;
710

811
import static org.kohsuke.github.internal.Previews.MACHINE_MAN;
912

@@ -20,7 +23,7 @@ public class GHApp extends GHObject {
2023
private String description;
2124
private String externalUrl;
2225
private Map<String, String> permissions;
23-
private List<GHEvent> events;
26+
private List<String> events;
2427
private long installationsCount;
2528
private String htmlUrl;
2629

@@ -114,7 +117,9 @@ public void setExternalUrl(String externalUrl) {
114117
* @return the events
115118
*/
116119
public List<GHEvent> getEvents() {
117-
return events;
120+
return events.stream()
121+
.map(e -> EnumUtils.getEnumOrDefault(GHEvent.class, e, GHEvent.UNKNOWN))
122+
.collect(Collectors.toList());
118123
}
119124

120125
/**
@@ -126,7 +131,7 @@ public List<GHEvent> getEvents() {
126131
*/
127132
@Deprecated
128133
public void setEvents(List<GHEvent> events) {
129-
this.events = events;
134+
this.events = events.stream().map(GHEvent::symbol).collect(Collectors.toList());
130135
}
131136

132137
/**

src/main/java/org/kohsuke/github/GHAppInstallation.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package org.kohsuke.github;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import org.kohsuke.github.internal.EnumUtils;
45

56
import java.io.IOException;
67
import java.net.MalformedURLException;
78
import java.net.URL;
89
import java.util.List;
910
import java.util.Map;
11+
import java.util.stream.Collectors;
1012

1113
import static org.kohsuke.github.internal.Previews.GAMBIT;
1214
import static org.kohsuke.github.internal.Previews.MACHINE_MAN;
@@ -35,7 +37,7 @@ public class GHAppInstallation extends GHObject {
3537
@JsonProperty("target_type")
3638
private GHTargetType targetType;
3739
private Map<String, GHPermissionType> permissions;
38-
private List<GHEvent> events;
40+
private List<String> events;
3941
@JsonProperty("single_file_name")
4042
private String singleFileName;
4143
@JsonProperty("repository_selection")
@@ -250,7 +252,9 @@ public void setPermissions(Map<String, GHPermissionType> permissions) {
250252
* @return the events
251253
*/
252254
public List<GHEvent> getEvents() {
253-
return events;
255+
return events.stream()
256+
.map(e -> EnumUtils.getEnumOrDefault(GHEvent.class, e, GHEvent.UNKNOWN))
257+
.collect(Collectors.toList());
254258
}
255259

256260
/**
@@ -262,7 +266,7 @@ public List<GHEvent> getEvents() {
262266
*/
263267
@Deprecated
264268
public void setEvents(List<GHEvent> events) {
265-
this.events = events;
269+
this.events = events.stream().map(GHEvent::symbol).collect(Collectors.toList());
266270
}
267271

268272
/**

src/main/java/org/kohsuke/github/GHEvent.java

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package org.kohsuke.github;
22

3-
import org.kohsuke.github.internal.EnumUtils;
4-
53
import java.util.Locale;
64

7-
import javax.annotation.Nonnull;
8-
95
/**
106
* Hook event type.
117
*
@@ -24,6 +20,8 @@ public enum GHEvent {
2420
DEPLOY_KEY,
2521
DEPLOYMENT,
2622
DEPLOYMENT_STATUS,
23+
DISCUSSION,
24+
DISCUSSION_COMMENT,
2725
DOWNLOAD,
2826
FOLLOW,
2927
FORK,
@@ -89,46 +87,4 @@ String symbol() {
8987
return "*";
9088
return name().toLowerCase(Locale.ENGLISH);
9189
}
92-
93-
/**
94-
* Representation of GitHub Event Type
95-
*
96-
* @see <a href="https://docs.github.com/en/developers/webhooks-and-events/github-event-types">GitHub event
97-
* types</a>
98-
*/
99-
enum GitHubEventType {
100-
CommitCommentEvent(COMMIT_COMMENT),
101-
CreateEvent(CREATE),
102-
DeleteEvent(DELETE),
103-
ForkEvent(FORK),
104-
GollumEvent(GOLLUM),
105-
IssueCommentEvent(ISSUE_COMMENT),
106-
IssuesEvent(ISSUES),
107-
MemberEvent(MEMBER),
108-
PublicEvent(PUBLIC),
109-
PullRequestEvent(PULL_REQUEST),
110-
PullRequestReviewEvent(PULL_REQUEST_REVIEW),
111-
PullRequestReviewCommentEvent(PULL_REQUEST_REVIEW_COMMENT),
112-
PushEvent(PUSH),
113-
ReleaseEvent(RELEASE),
114-
WatchEvent(WATCH),
115-
UnknownEvent(UNKNOWN);
116-
117-
private final GHEvent event;
118-
GitHubEventType(GHEvent event) {
119-
this.event = event;
120-
}
121-
122-
/**
123-
* Required due to different naming conventions between different GitHub event names for Webhook events and
124-
* GitHub events
125-
*
126-
* @param event
127-
* the github event as a string to convert to Event enum
128-
* @return GHEvent
129-
*/
130-
static GHEvent transformToGHEvent(@Nonnull String event) {
131-
return EnumUtils.getEnumOrDefault(GitHubEventType.class, event, UnknownEvent).event;
132-
}
133-
}
13490
}

src/main/java/org/kohsuke/github/GHEventInfo.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
import com.fasterxml.jackson.databind.node.ObjectNode;
44
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
5-
import org.kohsuke.github.GHEvent.GitHubEventType;
65

76
import java.io.IOException;
8-
import java.util.Date;
7+
import java.util.*;
98

109
/**
1110
* Represents an event.
@@ -19,6 +18,16 @@ public class GHEventInfo extends GitHubInteractiveObject {
1918

2019
private long id;
2120
private String created_at;
21+
22+
/**
23+
* Representation of GitHub Event API Event Type.
24+
*
25+
* This is not the same as the values used for hook methods such as
26+
* {@link GHRepository#createHook(String, Map, Collection, boolean)}.
27+
*
28+
* @see <a href="https://docs.github.com/en/developers/webhooks-and-events/github-event-types">GitHub event
29+
* types</a>
30+
*/
2231
private String type;
2332

2433
// these are all shallow objects
@@ -41,13 +50,45 @@ public static class GHEventRepository {
4150
private String name; // owner/repo
4251
}
4352

53+
static final Map<String, GHEvent> mapTypeStringToEvent = createEventMap();
54+
55+
/**
56+
* Map for GitHub Event API Event Type to GHEvent.
57+
*
58+
* @see <a href="https://docs.github.com/en/developers/webhooks-and-events/github-event-types">GitHub event
59+
* types</a>
60+
*/
61+
private static Map<String, GHEvent> createEventMap() {
62+
HashMap<String, GHEvent> map = new HashMap<>();
63+
map.put("CommitCommentEvent", GHEvent.COMMIT_COMMENT);
64+
map.put("CreateEvent", GHEvent.CREATE);
65+
map.put("DeleteEvent", GHEvent.DELETE);
66+
map.put("ForkEvent", GHEvent.FORK);
67+
map.put("GollumEvent", GHEvent.GOLLUM);
68+
map.put("IssueCommentEvent", GHEvent.ISSUE_COMMENT);
69+
map.put("IssuesEvent", GHEvent.ISSUES);
70+
map.put("MemberEvent", GHEvent.MEMBER);
71+
map.put("PublicEvent", GHEvent.PUBLIC);
72+
map.put("PullRequestEvent", GHEvent.PULL_REQUEST);
73+
map.put("PullRequestReviewEvent", GHEvent.PULL_REQUEST_REVIEW);
74+
map.put("PullRequestReviewCommentEvent", GHEvent.PULL_REQUEST_REVIEW_COMMENT);
75+
map.put("PushEvent", GHEvent.PUSH);
76+
map.put("ReleaseEvent", GHEvent.RELEASE);
77+
map.put("WatchEvent", GHEvent.WATCH);
78+
return Collections.unmodifiableMap(map);
79+
}
80+
81+
static GHEvent transformTypeToGHEvent(String type) {
82+
return mapTypeStringToEvent.getOrDefault(type, GHEvent.UNKNOWN);
83+
}
84+
4485
/**
4586
* Gets type.
4687
*
4788
* @return the type
4889
*/
4990
public GHEvent getType() {
50-
return GitHubEventType.transformToGHEvent(type);
91+
return transformTypeToGHEvent(type);
5192
}
5293

5394
GHEventInfo wrapUp(GitHub root) {

src/main/java/org/kohsuke/github/GHHook.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package org.kohsuke.github;
22

33
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
4+
import org.kohsuke.github.internal.EnumUtils;
45

56
import java.io.IOException;
67
import java.net.URL;
78
import java.util.Collections;
89
import java.util.EnumSet;
910
import java.util.List;
10-
import java.util.Locale;
1111
import java.util.Map;
1212

1313
/**
@@ -40,10 +40,7 @@ public String getName() {
4040
public EnumSet<GHEvent> getEvents() {
4141
EnumSet<GHEvent> s = EnumSet.noneOf(GHEvent.class);
4242
for (String e : events) {
43-
if (e.equals("*"))
44-
s.add(GHEvent.ALL);
45-
else
46-
s.add(Enum.valueOf(GHEvent.class, e.toUpperCase(Locale.ENGLISH)));
43+
s.add(e.equals("*") ? GHEvent.ALL : EnumUtils.getEnumOrDefault(GHEvent.class, e, GHEvent.UNKNOWN));
4744
}
4845
return s;
4946
}

src/main/java/org/kohsuke/github/internal/EnumUtils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static <E extends Enum<E>> E getNullableEnumOrDefault(Class<E> enumClass,
3030
if (value == null) {
3131
return null;
3232
}
33-
return getEnumOrDefault(enumClass, value.toUpperCase(Locale.ROOT), defaultEnum);
33+
return getEnumOrDefault(enumClass, value, defaultEnum);
3434
}
3535

3636
/**
@@ -49,8 +49,8 @@ public static <E extends Enum<E>> E getNullableEnumOrDefault(Class<E> enumClass,
4949
*/
5050
public static <E extends Enum<E>> E getEnumOrDefault(Class<E> enumClass, String value, E defaultEnum) {
5151
try {
52-
return Enum.valueOf(enumClass, value);
53-
} catch (IllegalArgumentException e) {
52+
return Enum.valueOf(enumClass, value.toUpperCase(Locale.ROOT));
53+
} catch (NullPointerException | IllegalArgumentException e) {
5454
LOGGER.warning("Unknown value " + value + " for enum class " + enumClass.getName() + ", defaulting to "
5555
+ defaultEnum.name());
5656
return defaultEnum;

src/test/java/org/kohsuke/github/EnumTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void touchEnums() {
2727

2828
assertThat(GHDirection.values().length, equalTo(2));
2929

30-
assertThat(GHEvent.values().length, equalTo(58));
30+
assertThat(GHEvent.values().length, equalTo(60));
3131
assertThat(GHEvent.ALL.symbol(), equalTo("*"));
3232
assertThat(GHEvent.PULL_REQUEST.symbol(), equalTo(GHEvent.PULL_REQUEST.toString().toLowerCase()));
3333

src/test/java/org/kohsuke/github/GHEventTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.kohsuke.github;
22

33
import org.junit.Test;
4-
import org.kohsuke.github.GHEvent.GitHubEventType;
54

65
import static org.hamcrest.MatcherAssert.assertThat;
76
import static org.hamcrest.Matchers.is;
@@ -26,10 +25,9 @@ private static GHEvent oldTransformationFunction(String t) {
2625

2726
@Test
2827
public void regressionTest() {
29-
assertThat(GitHubEventType.transformToGHEvent("NewlyAddedOrBogusEvent"), is(GHEvent.UNKNOWN));
30-
for (GitHubEventType gitHubEventType : GitHubEventType.values()) {
31-
assertThat(GitHubEventType.transformToGHEvent(gitHubEventType.name()),
32-
is(oldTransformationFunction(gitHubEventType.name())));
28+
assertThat(GHEventInfo.transformTypeToGHEvent("NewlyAddedOrBogusEvent"), is(GHEvent.UNKNOWN));
29+
for (String eventInfoType : GHEventInfo.mapTypeStringToEvent.keySet()) {
30+
assertThat(GHEventInfo.transformTypeToGHEvent(eventInfoType), is(oldTransformationFunction(eventInfoType)));
3331
}
3432
}
3533
}

src/test/java/org/kohsuke/github/internal/EnumUtilsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public class EnumUtilsTest {
99

1010
@Test
1111
public void testGetEnum() {
12+
assertThat(EnumUtils.getEnumOrDefault(TestEnum.class, null, TestEnum.UNKNOWN), equalTo(TestEnum.UNKNOWN));
13+
1214
assertThat(EnumUtils.getNullableEnumOrDefault(TestEnum.class, null, TestEnum.UNKNOWN), nullValue());
1315
assertThat(EnumUtils.getNullableEnumOrDefault(TestEnum.class, "foobar", TestEnum.UNKNOWN),
1416
equalTo(TestEnum.UNKNOWN));

0 commit comments

Comments
 (0)