diff --git a/pom.xml b/pom.xml
index 9e3d54993c..97328ce89a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
github-api
- 1.79
+ 1.80
GitHub API for Java
http://github-api.kohsuke.org/
GitHub API for Java
@@ -16,7 +16,7 @@
scm:git:git@github.com/kohsuke/${project.artifactId}.git
scm:git:ssh://git@github.com/kohsuke/${project.artifactId}.git
http://${project.artifactId}.kohsuke.org/
- github-api-1.79
+ github-api-1.80
diff --git a/src/main/java/org/kohsuke/github/GHAuthorization.java b/src/main/java/org/kohsuke/github/GHAuthorization.java
index b8b7aff19a..2a9fa39092 100644
--- a/src/main/java/org/kohsuke/github/GHAuthorization.java
+++ b/src/main/java/org/kohsuke/github/GHAuthorization.java
@@ -36,9 +36,14 @@ public class GHAuthorization extends GHObject {
private GitHub root;
private List scopes;
private String token;
+ private String token_last_eight;
+ private String hashed_token;
private App app;
private String note;
private String note_url;
+ private String fingerprint;
+ //TODO add some user class for https://developer.github.com/v3/oauth_authorizations/#check-an-authorization ?
+ //private GHUser user;
public GitHub getRoot() {
return root;
@@ -52,6 +57,14 @@ public String getToken() {
return token;
}
+ public String getTokenLastEight() {
+ return token_last_eight;
+ }
+
+ public String getHashedToken() {
+ return hashed_token;
+ }
+
public URL getAppUrl() {
return GitHub.parseURL(app.url);
}
@@ -82,6 +95,10 @@ public URL getNoteUrl() {
return GitHub.parseURL(note_url);
}
+ public String getFingerprint() {
+ return fingerprint;
+ }
+
/*package*/ GHAuthorization wrap(GitHub root) {
this.root = root;
return this;
@@ -92,5 +109,6 @@ public URL getNoteUrl() {
private static class App {
private String url;
private String name;
+ // private String client_id; not yet used
}
}
diff --git a/src/main/java/org/kohsuke/github/GHCommitComment.java b/src/main/java/org/kohsuke/github/GHCommitComment.java
index 7020f9b98f..3543b5fdb3 100644
--- a/src/main/java/org/kohsuke/github/GHCommitComment.java
+++ b/src/main/java/org/kohsuke/github/GHCommitComment.java
@@ -5,6 +5,8 @@
import java.net.URL;
import java.util.Date;
+import static org.kohsuke.github.Previews.SQUIRREL_GIRL;
+
/**
* A comment attached to a commit (or a specific line in a specific file of a commit.)
*
@@ -15,23 +17,13 @@
*/
@SuppressFBWarnings(value = {"UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD", "UWF_UNWRITTEN_FIELD",
"NP_UNWRITTEN_FIELD"}, justification = "JSON API")
-public class GHCommitComment extends GHObject {
+public class GHCommitComment extends GHObject implements Reactable {
private GHRepository owner;
String body, html_url, commit_id;
Integer line;
String path;
- User user;
-
- static class User {
- // TODO: what if someone who doesn't have an account on GitHub makes a commit?
- @SuppressFBWarnings(value = "UUF_UNUSED_FIELD", justification = "We don't provide it in API now")
- String url,avatar_url,gravatar_id;
- @SuppressFBWarnings(value = "UUF_UNUSED_FIELD", justification = "We don't provide it in API now")
- int id;
-
- String login;
- }
+ GHUser user; // not fully populated. beware.
public GHRepository getOwner() {
return owner;
@@ -76,7 +68,7 @@ public int getLine() {
* Gets the user who put this comment.
*/
public GHUser getUser() throws IOException {
- return owner.root.getUser(user.login);
+ return owner == null || owner.root.isOffline() ? user : owner.root.getUser(user.login);
}
/**
@@ -96,6 +88,29 @@ public void update(String body) throws IOException {
this.body = body;
}
+ @Preview @Deprecated
+ public GHReaction createReaction(ReactionContent content) throws IOException {
+ return new Requester(owner.root)
+ .withPreview(SQUIRREL_GIRL)
+ .with("content", content.getContent())
+ .to(getApiTail()+"/reactions", GHReaction.class).wrap(owner.root);
+ }
+
+ @Preview @Deprecated
+ public PagedIterable listReactions() {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(owner.root.retrieve().withPreview(SQUIRREL_GIRL).asIterator(getApiTail()+"/reactions", GHReaction[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHReaction[] page) {
+ for (GHReaction c : page)
+ c.wrap(owner.root);
+ }
+ };
+ }
+ };
+ }
+
/**
* Deletes this comment.
*/
@@ -110,6 +125,9 @@ private String getApiTail() {
GHCommitComment wrap(GHRepository owner) {
this.owner = owner;
+ if (owner.root.isOffline()) {
+ user.wrapUp(owner.root);
+ }
return this;
}
}
diff --git a/src/main/java/org/kohsuke/github/GHEventPayload.java b/src/main/java/org/kohsuke/github/GHEventPayload.java
index 08b112880d..29f69bb3eb 100644
--- a/src/main/java/org/kohsuke/github/GHEventPayload.java
+++ b/src/main/java/org/kohsuke/github/GHEventPayload.java
@@ -1,5 +1,7 @@
package org.kohsuke.github;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonSetter;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.Reader;
import java.util.List;
@@ -14,11 +16,28 @@
public abstract class GHEventPayload {
protected GitHub root;
+ private GHUser sender;
+
/*package*/ GHEventPayload() {
}
+ /**
+ * Gets the sender or {@code null} if accessed via the events API.
+ * @return the sender or {@code null} if accessed via the events API.
+ */
+ public GHUser getSender() {
+ return sender;
+ }
+
+ public void setSender(GHUser sender) {
+ this.sender = sender;
+ }
+
/*package*/ void wrapUp(GitHub root) {
this.root = root;
+ if (sender != null) {
+ sender.wrapUp(root);
+ }
}
/**
@@ -120,17 +139,340 @@ void wrapUp(GitHub root) {
}
}
+ /**
+ * A comment was added to a commit
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD" },
+ justification = "Constructed by JSON deserialization")
+ public static class CommitComment extends GHEventPayload {
+ private String action;
+ private GHCommitComment comment;
+ private GHRepository repository;
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getAction() {
+ return action;
+ }
+
+ public GHCommitComment getComment() {
+ return comment;
+ }
+
+ public void setComment(GHCommitComment comment) {
+ this.comment = comment;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository != null) {
+ repository.wrap(root);
+ comment.wrap(repository);
+ }
+ }
+ }
+
+ /**
+ * A repository, branch, or tag was created
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD" },
+ justification = "Constructed by JSON deserialization")
+ public static class Create extends GHEventPayload {
+ private String ref;
+ @JsonProperty("ref_type")
+ private String refType;
+ @JsonProperty("master_branch")
+ private String masterBranch;
+ private String description;
+ private GHRepository repository;
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getRef() {
+ return ref;
+ }
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getRefType() {
+ return refType;
+ }
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getMasterBranch() {
+ return masterBranch;
+ }
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getDescription() {
+ return description;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository != null) {
+ repository.wrap(root);
+ }
+ }
+ }
+
+ /**
+ * A branch, or tag was deleted
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD" },
+ justification = "Constructed by JSON deserialization")
+ public static class Delete extends GHEventPayload {
+ private String ref;
+ @JsonProperty("ref_type")
+ private String refType;
+ private GHRepository repository;
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getRef() {
+ return ref;
+ }
+
+ @SuppressFBWarnings(value = "UWF_UNWRITTEN_FIELD", justification = "Comes from JSON deserialization")
+ public String getRefType() {
+ return refType;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository != null) {
+ repository.wrap(root);
+ }
+ }
+ }
+
+ /**
+ * A deployment
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD" },
+ justification = "Constructed by JSON deserialization")
+ public static class Deployment extends GHEventPayload {
+ private GHDeployment deployment;
+ private GHRepository repository;
+
+ public GHDeployment getDeployment() {
+ return deployment;
+ }
+
+ public void setDeployment(GHDeployment deployment) {
+ this.deployment = deployment;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository != null) {
+ repository.wrap(root);
+ deployment.wrap(repository);
+ }
+ }
+ }
+
+ /**
+ * A deployment
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD" },
+ justification = "Constructed by JSON deserialization")
+ public static class DeploymentStatus extends GHEventPayload {
+ @JsonProperty("deployment_status")
+ private GHDeploymentStatus deploymentStatus;
+ private GHDeployment deployment;
+ private GHRepository repository;
+
+ public GHDeploymentStatus getDeploymentStatus() {
+ return deploymentStatus;
+ }
+
+ public void setDeploymentStatus(GHDeploymentStatus deploymentStatus) {
+ this.deploymentStatus = deploymentStatus;
+ }
+
+ public GHDeployment getDeployment() {
+ return deployment;
+ }
+
+ public void setDeployment(GHDeployment deployment) {
+ this.deployment = deployment;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository != null) {
+ repository.wrap(root);
+ deployment.wrap(repository);
+ deploymentStatus.wrap(repository);
+ }
+ }
+ }
+
+ /**
+ * A user forked a repository
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD" },
+ justification = "Constructed by JSON deserialization")
+ public static class Fork extends GHEventPayload {
+ private GHRepository forkee;
+ private GHRepository repository;
+
+
+ public GHRepository getForkee() {
+ return forkee;
+ }
+
+ public void setForkee(GHRepository forkee) {
+ this.forkee = forkee;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ forkee.wrap(root);
+ if (repository != null) {
+ repository.wrap(root);
+ }
+ }
+ }
+
+ /**
+ * A ping.
+ */
+ public static class Ping extends GHEventPayload {
+ private GHRepository repository;
+ private GHOrganization organization;
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public GHOrganization getOrganization() {
+ return organization;
+ }
+
+ public void setOrganization(GHOrganization organization) {
+ this.organization = organization;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository!=null)
+ repository.wrap(root);
+ if (organization != null) {
+ organization.wrapUp(root);
+ }
+ }
+
+ }
+
+ /**
+ * A repository was made public.
+ *
+ * @see authoritative source
+ */
+ public static class Public extends GHEventPayload {
+ private GHRepository repository;
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ if (repository!=null)
+ repository.wrap(root);
+ }
+
+ }
+
/**
* A commit was pushed.
*
* @see authoritative source
*/
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD", "UUF_UNUSED_FIELD"},
+ justification = "Constructed by JSON deserialization")
public static class Push extends GHEventPayload {
private String head, before;
+ private boolean created, deleted, forced;
private String ref;
private int size;
private List commits;
private GHRepository repository;
+ private Pusher pusher;
/**
* The SHA of the HEAD commit on the repository
@@ -147,6 +489,11 @@ public String getBefore() {
return before;
}
+ @JsonSetter // alias
+ private void setAfter(String after) {
+ head = after;
+ }
+
/**
* The full Git ref that was pushed. Example: “refs/heads/master”
*/
@@ -162,6 +509,18 @@ public int getSize() {
return size;
}
+ public boolean isCreated() {
+ return created;
+ }
+
+ public boolean isDeleted() {
+ return deleted;
+ }
+
+ public boolean isForced() {
+ return forced;
+ }
+
/**
* The list of pushed commits.
*/
@@ -173,6 +532,14 @@ public GHRepository getRepository() {
return repository;
}
+ public Pusher getPusher() {
+ return pusher;
+ }
+
+ public void setPusher(Pusher pusher) {
+ this.pusher = pusher;
+ }
+
@Override
void wrapUp(GitHub root) {
super.wrapUp(root);
@@ -180,18 +547,44 @@ void wrapUp(GitHub root) {
repository.wrap(root);
}
+ public static class Pusher {
+ private String name, email;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+ }
+
/**
* Commit in a push
*/
public static class PushCommit {
private GitUser author;
+ private GitUser committer;
private String url, sha, message;
private boolean distinct;
+ private List added, removed, modified;
public GitUser getAuthor() {
return author;
}
+ public GitUser getCommitter() {
+ return committer;
+ }
+
/**
* Points to the commit API resource.
*/
@@ -203,6 +596,11 @@ public String getSha() {
return sha;
}
+ @JsonSetter
+ private void setId(String id) {
+ sha = id;
+ }
+
public String getMessage() {
return message;
}
@@ -213,6 +611,61 @@ public String getMessage() {
public boolean isDistinct() {
return distinct;
}
+
+ public List getAdded() {
+ return added;
+ }
+
+ public List getRemoved() {
+ return removed;
+ }
+
+ public List getModified() {
+ return modified;
+ }
+ }
+ }
+
+ /**
+ * A repository was created, deleted, made public, or made private.
+ *
+ * @see authoritative source
+ */
+ @SuppressFBWarnings(value = {"UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR", "NP_UNWRITTEN_FIELD", "UWF_UNWRITTEN_FIELD"},
+ justification = "Constructed by JSON deserialization")
+ public static class Repository extends GHEventPayload {
+ private String action;
+ private GHRepository repository;
+ private GHOrganization organization;
+
+ public String getAction() {
+ return action;
+ }
+
+ public void setRepository(GHRepository repository) {
+ this.repository = repository;
+ }
+
+ public GHRepository getRepository() {
+ return repository;
+ }
+
+ public GHOrganization getOrganization() {
+ return organization;
+ }
+
+ public void setOrganization(GHOrganization organization) {
+ this.organization = organization;
+ }
+
+ @Override
+ void wrapUp(GitHub root) {
+ super.wrapUp(root);
+ repository.wrap(root);
+ if (organization != null) {
+ organization.wrapUp(root);
+ }
}
+
}
}
diff --git a/src/main/java/org/kohsuke/github/GHIssue.java b/src/main/java/org/kohsuke/github/GHIssue.java
index a5afad6d2e..f02439daa7 100644
--- a/src/main/java/org/kohsuke/github/GHIssue.java
+++ b/src/main/java/org/kohsuke/github/GHIssue.java
@@ -35,6 +35,8 @@
import java.util.List;
import java.util.Locale;
+import static org.kohsuke.github.Previews.SQUIRREL_GIRL;
+
/**
* Represents an issue on GitHub.
*
@@ -44,7 +46,7 @@
* @see GitHub#searchIssues()
* @see GHIssueSearchBuilder
*/
-public class GHIssue extends GHObject {
+public class GHIssue extends GHObject implements Reactable{
GitHub root;
GHRepository owner;
@@ -217,6 +219,29 @@ protected void wrapUp(GHIssueComment[] page) {
};
}
+ @Preview @Deprecated
+ public GHReaction createReaction(ReactionContent content) throws IOException {
+ return new Requester(owner.root)
+ .withPreview(SQUIRREL_GIRL)
+ .with("content", content.getContent())
+ .to(getApiRoute()+"/reactions", GHReaction.class).wrap(root);
+ }
+
+ @Preview @Deprecated
+ public PagedIterable listReactions() {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(owner.root.retrieve().withPreview(SQUIRREL_GIRL).asIterator(getApiRoute()+"/reactions", GHReaction[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHReaction[] page) {
+ for (GHReaction c : page)
+ c.wrap(owner.root);
+ }
+ };
+ }
+ };
+ }
+
protected String getApiRoute() {
return getIssuesApiRoute();
}
diff --git a/src/main/java/org/kohsuke/github/GHIssueComment.java b/src/main/java/org/kohsuke/github/GHIssueComment.java
index 3179fa93a6..a98f6f6398 100644
--- a/src/main/java/org/kohsuke/github/GHIssueComment.java
+++ b/src/main/java/org/kohsuke/github/GHIssueComment.java
@@ -26,16 +26,18 @@
import java.io.IOException;
import java.net.URL;
+import static org.kohsuke.github.Previews.SQUIRREL_GIRL;
+
/**
* Comment to the issue
*
* @author Kohsuke Kawaguchi
*/
-public class GHIssueComment extends GHObject {
+public class GHIssueComment extends GHObject implements Reactable {
GHIssue owner;
private String body, gravatar_id;
- private GHUser user;
+ private GHUser user; // not fully populated. beware.
/*package*/ GHIssueComment wrapUp(GHIssue owner) {
this.owner = owner;
@@ -68,7 +70,7 @@ public String getUserName() {
* Gets the user who posted this comment.
*/
public GHUser getUser() throws IOException {
- return owner.root.getUser(user.getLogin());
+ return owner == null || owner.root.isOffline() ? user : owner.root.getUser(user.getLogin());
}
/**
@@ -93,7 +95,30 @@ public void update(String body) throws IOException {
public void delete() throws IOException {
new Requester(owner.root).method("DELETE").to(getApiRoute());
}
-
+
+ @Preview @Deprecated
+ public GHReaction createReaction(ReactionContent content) throws IOException {
+ return new Requester(owner.root)
+ .withPreview(SQUIRREL_GIRL)
+ .with("content", content.getContent())
+ .to(getApiRoute()+"/reactions", GHReaction.class).wrap(owner.root);
+ }
+
+ @Preview @Deprecated
+ public PagedIterable listReactions() {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(owner.root.retrieve().withPreview(SQUIRREL_GIRL).asIterator(getApiRoute()+"/reactions", GHReaction[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHReaction[] page) {
+ for (GHReaction c : page)
+ c.wrap(owner.root);
+ }
+ };
+ }
+ };
+ }
+
private String getApiRoute() {
return "/repos/"+owner.getRepository().getOwnerName()+"/"+owner.getRepository().getName()+"/issues/comments/" + id;
}
diff --git a/src/main/java/org/kohsuke/github/GHPerson.java b/src/main/java/org/kohsuke/github/GHPerson.java
index f8aae9a487..67e157173f 100644
--- a/src/main/java/org/kohsuke/github/GHPerson.java
+++ b/src/main/java/org/kohsuke/github/GHPerson.java
@@ -38,8 +38,12 @@ public abstract class GHPerson extends GHObject {
* Depending on the original API call where this object is created, it may not contain everything.
*/
protected synchronized void populate() throws IOException {
- if (created_at!=null) return; // already populated
-
+ if (created_at!=null) {
+ return; // already populated
+ }
+ if (root.isOffline()) {
+ return; // cannot populate, will have to live with what we have
+ }
root.retrieve().to(url, this);
}
diff --git a/src/main/java/org/kohsuke/github/GHPullRequest.java b/src/main/java/org/kohsuke/github/GHPullRequest.java
index dd3d93b758..a6becf495c 100644
--- a/src/main/java/org/kohsuke/github/GHPullRequest.java
+++ b/src/main/java/org/kohsuke/github/GHPullRequest.java
@@ -201,7 +201,9 @@ public String getMergeCommitSha() throws IOException {
*/
private void populate() throws IOException {
if (merged_by!=null) return; // already populated
-
+ if (root.isOffline()) {
+ return; // cannot populate, will have to live with what we have
+ }
root.retrieve().to(url, this).wrapUp(owner);
}
diff --git a/src/main/java/org/kohsuke/github/GHPullRequestReviewComment.java b/src/main/java/org/kohsuke/github/GHPullRequestReviewComment.java
index 8cb497e16a..05784b5078 100644
--- a/src/main/java/org/kohsuke/github/GHPullRequestReviewComment.java
+++ b/src/main/java/org/kohsuke/github/GHPullRequestReviewComment.java
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.net.URL;
+import static org.kohsuke.github.Previews.*;
+
/**
* Review comment to the pull request
*
@@ -33,7 +35,7 @@
* @see GHPullRequest#listReviewComments()
* @see GHPullRequest#createReviewComment(String, String, String, int)
*/
-public class GHPullRequestReviewComment extends GHObject {
+public class GHPullRequestReviewComment extends GHObject implements Reactable {
GHPullRequest owner;
private String body;
@@ -103,4 +105,27 @@ public void update(String body) throws IOException {
public void delete() throws IOException {
new Requester(owner.root).method("DELETE").to(getApiRoute());
}
+
+ @Preview @Deprecated
+ public GHReaction createReaction(ReactionContent content) throws IOException {
+ return new Requester(owner.root)
+ .withPreview(SQUIRREL_GIRL)
+ .with("content", content.getContent())
+ .to(getApiRoute()+"/reactions", GHReaction.class).wrap(owner.root);
+ }
+
+ @Preview @Deprecated
+ public PagedIterable listReactions() {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(owner.root.retrieve().withPreview(SQUIRREL_GIRL).asIterator(getApiRoute()+"/reactions", GHReaction[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHReaction[] page) {
+ for (GHReaction c : page)
+ c.wrap(owner.root);
+ }
+ };
+ }
+ };
+ }
}
diff --git a/src/main/java/org/kohsuke/github/GHReaction.java b/src/main/java/org/kohsuke/github/GHReaction.java
new file mode 100644
index 0000000000..55b26365e0
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/GHReaction.java
@@ -0,0 +1,55 @@
+package org.kohsuke.github;
+
+import java.io.IOException;
+import java.net.URL;
+
+import static org.kohsuke.github.Previews.SQUIRREL_GIRL;
+
+/**
+ * Reaction to issue, comment, PR, and so on.
+ *
+ * @author Kohsuke Kawaguchi
+ * @see Reactable
+ */
+@Preview @Deprecated
+public class GHReaction extends GHObject {
+ private GitHub root;
+
+ private GHUser user;
+ private ReactionContent content;
+
+ /*package*/ GHReaction wrap(GitHub root) {
+ this.root = root;
+ user.wrapUp(root);
+ return this;
+ }
+
+ /**
+ * The kind of reaction left.
+ */
+ public ReactionContent getContent() {
+ return content;
+ }
+
+ /**
+ * User who left the reaction.
+ */
+ public GHUser getUser() {
+ return user;
+ }
+
+ /**
+ * Reaction has no HTML URL. Don't call this method.
+ */
+ @Deprecated
+ public URL getHtmlUrl() {
+ return null;
+ }
+
+ /**
+ * Removes this reaction.
+ */
+ public void delete() throws IOException {
+ new Requester(root).method("DELETE").withPreview(SQUIRREL_GIRL).to("/reactions/"+id);
+ }
+}
diff --git a/src/main/java/org/kohsuke/github/GHRepository.java b/src/main/java/org/kohsuke/github/GHRepository.java
index 2a16feb2f2..fdd39b8d45 100644
--- a/src/main/java/org/kohsuke/github/GHRepository.java
+++ b/src/main/java/org/kohsuke/github/GHRepository.java
@@ -75,10 +75,10 @@ public class GHRepository extends GHObject {
private String git_url, ssh_url, clone_url, svn_url, mirror_url;
private GHUser owner; // not fully populated. beware.
- private boolean has_issues, has_wiki, fork, has_downloads;
+ private boolean has_issues, has_wiki, fork, has_downloads, has_pages;
@JsonProperty("private")
private boolean _private;
- private int watchers,forks,open_issues,size,network_count,subscribers_count;
+ private int forks_count, stargazers_count, watchers_count, size, open_issues_count, subscribers_count;
private String pushed_at;
private Map milestones = new HashMap();
@@ -232,7 +232,7 @@ public String getLanguage() {
}
public GHUser getOwner() throws IOException {
- return root.getUser(owner.login); // because 'owner' isn't fully populated
+ return root.isOffline() ? owner : root.getUser(getOwnerName()); // because 'owner' isn't fully populated
}
public GHIssue getIssue(int id) throws IOException {
@@ -339,7 +339,11 @@ public Map listLanguages() throws IOException {
}
public String getOwnerName() {
- return owner.login;
+ // consistency of the GitHub API is super... some serialized forms of GHRepository populate
+ // a full GHUser while others populate only the owner and email. This later form is super helpful
+ // in putting the login in owner.name not owner.login... thankfully we can easily identify this
+ // second set because owner.login will be null
+ return owner.login != null ? owner.login : owner.name;
}
public boolean hasIssues() {
@@ -359,7 +363,11 @@ public boolean isFork() {
* This not only counts direct forks, but also forks of forks, and so on.
*/
public int getForks() {
- return forks;
+ return forks_count;
+ }
+
+ public int getStargazersCount() {
+ return stargazers_count;
}
public boolean isPrivate() {
@@ -370,16 +378,25 @@ public boolean hasDownloads() {
return has_downloads;
}
+ public boolean hasPages() {
+ return has_pages;
+ }
+
public int getWatchers() {
- return watchers;
+ return watchers_count;
}
public int getOpenIssueCount() {
- return open_issues;
+ return open_issues_count;
}
+ /**
+ * @deprecated
+ * This no longer exists in the official API documentation.
+ * Use {@link #getForks()}
+ */
public int getNetworkCount() {
- return network_count;
+ return forks_count;
}
public int getSubscribersCount() {
@@ -467,7 +484,7 @@ public Set getCollaboratorNames() throws IOException {
* If this repository belongs to an organization, return a set of teams.
*/
public Set getTeams() throws IOException {
- return Collections.unmodifiableSet(new HashSet(Arrays.asList(GHTeam.wrapUp(root.retrieve().to(getApiTailUrl("teams"), GHTeam[].class), root.getOrganization(owner.login)))));
+ return Collections.unmodifiableSet(new HashSet(Arrays.asList(GHTeam.wrapUp(root.retrieve().to(getApiTailUrl("teams"), GHTeam[].class), root.getOrganization(getOwnerName())))));
}
public void addCollaborators(GHUser... users) throws IOException {
@@ -551,7 +568,7 @@ public void delete() throws IOException {
try {
new Requester(root).method("DELETE").to(getApiTailUrl(""));
} catch (FileNotFoundException x) {
- throw (FileNotFoundException) new FileNotFoundException("Failed to delete " + owner.login + "/" + name + "; might not exist, or you might need the delete_repo scope in your token: http://stackoverflow.com/a/19327004/12916").initCause(x);
+ throw (FileNotFoundException) new FileNotFoundException("Failed to delete " + getOwnerName() + "/" + name + "; might not exist, or you might need the delete_repo scope in your token: http://stackoverflow.com/a/19327004/12916").initCause(x);
}
}
@@ -742,7 +759,7 @@ public GHCompare getCompare(GHBranch id1, GHBranch id2) throws IOException {
* @throws IOException on failure communicating with GitHub
*/
public GHRef[] getRefs() throws IOException {
- return GHRef.wrap(root.retrieve().to(String.format("/repos/%s/%s/git/refs", owner.login, name), GHRef[].class), root);
+ return GHRef.wrap(root.retrieve().to(String.format("/repos/%s/%s/git/refs", getOwnerName(), name), GHRef[].class), root);
}
/**
@@ -752,7 +769,7 @@ public GHRef[] getRefs() throws IOException {
* @throws IOException on failure communicating with GitHub, potentially due to an invalid ref type being requested
*/
public GHRef[] getRefs(String refType) throws IOException {
- return GHRef.wrap(root.retrieve().to(String.format("/repos/%s/%s/git/refs/%s", owner.login, name, refType), GHRef[].class),root);
+ return GHRef.wrap(root.retrieve().to(String.format("/repos/%s/%s/git/refs/%s", getOwnerName(), name, refType), GHRef[].class),root);
}
/**
* Retrive a ref of the given type for the current GitHub repository.
@@ -769,7 +786,7 @@ public GHRef getRef(String refName) throws IOException {
// FIXME: how about other URL unsafe characters, like space, @, : etc? do we need to be using URLEncoder.encode()?
// OTOH, '/' need no escaping
refName = refName.replaceAll("#", "%23");
- return root.retrieve().to(String.format("/repos/%s/%s/git/refs/%s", owner.login, name, refName), GHRef.class).wrap(root);
+ return root.retrieve().to(String.format("/repos/%s/%s/git/refs/%s", getOwnerName(), name, refName), GHRef.class).wrap(root);
}
/**
* Retrive a tree of the given type for the current GitHub repository.
@@ -781,7 +798,7 @@ public GHRef getRef(String refName) throws IOException {
* invalid tree type being requested
*/
public GHTree getTree(String sha) throws IOException {
- String url = String.format("/repos/%s/%s/git/trees/%s", owner.login, name, sha);
+ String url = String.format("/repos/%s/%s/git/trees/%s", getOwnerName(), name, sha);
return root.retrieve().to(url, GHTree.class).wrap(root);
}
@@ -796,7 +813,7 @@ public GHTree getTree(String sha) throws IOException {
* invalid tree type being requested
*/
public GHTree getTreeRecursive(String sha, int recursive) throws IOException {
- String url = String.format("/repos/%s/%s/git/trees/%s?recursive=%d", owner.login, name, sha, recursive);
+ String url = String.format("/repos/%s/%s/git/trees/%s?recursive=%d", getOwnerName(), name, sha, recursive);
return root.retrieve().to(url, GHTree.class).wrap(root);
}
@@ -806,7 +823,7 @@ public GHTree getTreeRecursive(String sha, int recursive) throws IOException {
public GHCommit getCommit(String sha1) throws IOException {
GHCommit c = commits.get(sha1);
if (c==null) {
- c = root.retrieve().to(String.format("/repos/%s/%s/commits/%s", owner.login, name, sha1), GHCommit.class).wrapUp(this);
+ c = root.retrieve().to(String.format("/repos/%s/%s/commits/%s", getOwnerName(), name, sha1), GHCommit.class).wrapUp(this);
commits.put(sha1,c);
}
return c;
@@ -818,7 +835,7 @@ public GHCommit getCommit(String sha1) throws IOException {
public PagedIterable listCommits() {
return new PagedIterable() {
public PagedIterator _iterator(int pageSize) {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/commits", owner.login, name), GHCommit[].class, pageSize)) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/commits", getOwnerName(), name), GHCommit[].class, pageSize)) {
protected void wrapUp(GHCommit[] page) {
for (GHCommit c : page)
c.wrapUp(GHRepository.this);
@@ -841,7 +858,7 @@ public GHCommitQueryBuilder queryCommits() {
public PagedIterable listCommitComments() {
return new PagedIterable() {
public PagedIterator _iterator(int pageSize) {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/comments", owner.login, name), GHCommitComment[].class, pageSize)) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/comments", getOwnerName(), name), GHCommitComment[].class, pageSize)) {
@Override
protected void wrapUp(GHCommitComment[] page) {
for (GHCommitComment c : page)
@@ -898,7 +915,7 @@ private GHContentWithLicense getLicenseContent_() throws IOException {
public PagedIterable listCommitStatuses(final String sha1) throws IOException {
return new PagedIterable() {
public PagedIterator _iterator(int pageSize) {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/statuses/%s", owner.login, name, sha1), GHCommitStatus[].class, pageSize)) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/statuses/%s", getOwnerName(), name, sha1), GHCommitStatus[].class, pageSize)) {
@Override
protected void wrapUp(GHCommitStatus[] page) {
for (GHCommitStatus c : page)
@@ -933,7 +950,7 @@ public GHCommitStatus createCommitStatus(String sha1, GHCommitState state, Strin
.with("target_url", targetUrl)
.with("description", description)
.with("context", context)
- .to(String.format("/repos/%s/%s/statuses/%s",owner.login,this.name,sha1),GHCommitStatus.class).wrapUp(root);
+ .to(String.format("/repos/%s/%s/statuses/%s",getOwnerName(),this.name,sha1),GHCommitStatus.class).wrapUp(root);
}
/**
@@ -949,7 +966,7 @@ public GHCommitStatus createCommitStatus(String sha1, GHCommitState state, Strin
public PagedIterable listEvents() throws IOException {
return new PagedIterable() {
public PagedIterator _iterator(int pageSize) {
- return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/events", owner.login, name), GHEventInfo[].class, pageSize)) {
+ return new PagedIterator(root.retrieve().asIterator(String.format("/repos/%s/%s/events", getOwnerName(), name), GHEventInfo[].class, pageSize)) {
@Override
protected void wrapUp(GHEventInfo[] page) {
for (GHEventInfo c : page)
@@ -1076,8 +1093,8 @@ public GHHook createWebHook(URL url) throws IOException {
// }
private void verifyMine() throws IOException {
- if (!root.login.equals(owner.login))
- throw new IOException("Operation not applicable to a repository owned by someone else: "+owner.login);
+ if (!root.login.equals(getOwnerName()))
+ throw new IOException("Operation not applicable to a repository owned by someone else: " + getOwnerName());
}
/**
@@ -1153,6 +1170,9 @@ public boolean remove(Object url) {
/*package*/ GHRepository wrap(GitHub root) {
this.root = root;
+ if (root.isOffline()) {
+ owner.wrapUp(root);
+ }
return this;
}
@@ -1422,14 +1442,14 @@ public GHNotificationStream listNotifications() {
@Override
public int hashCode() {
- return ("Repository:"+owner.login+":"+name).hashCode();
+ return ("Repository:"+getOwnerName()+":"+name).hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof GHRepository) {
GHRepository that = (GHRepository) obj;
- return this.owner.login.equals(that.owner.login)
+ return this.getOwnerName().equals(that.getOwnerName())
&& this.name.equals(that.name);
}
return false;
@@ -1437,6 +1457,6 @@ public boolean equals(Object obj) {
String getApiTailUrl(String tail) {
if (tail.length()>0 && !tail.startsWith("/")) tail='/'+tail;
- return "/repos/" + owner.login + "/" + name +tail;
+ return "/repos/" + getOwnerName() + "/" + name +tail;
}
}
diff --git a/src/main/java/org/kohsuke/github/GitHub.java b/src/main/java/org/kohsuke/github/GitHub.java
index e5bf16b1de..2a54626f2d 100644
--- a/src/main/java/org/kohsuke/github/GitHub.java
+++ b/src/main/java/org/kohsuke/github/GitHub.java
@@ -58,6 +58,7 @@
import com.fasterxml.jackson.databind.introspect.VisibilityChecker.Std;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
+import javax.annotation.Nonnull;
import java.util.logging.Logger;
/**
@@ -215,6 +216,24 @@ public static GitHub connectToEnterpriseAnonymously(String apiUrl) throws IOExce
return new GitHubBuilder().withEndpoint(apiUrl).build();
}
+ /**
+ * An offline-only {@link GitHub} useful for parsing event notification from an unknown source.
+ *
+ * All operations that require a connection will fail.
+ *
+ * @return An offline-only {@link GitHub}.
+ */
+ public static GitHub offline() {
+ try {
+ return new GitHubBuilder()
+ .withEndpoint("https://api.github.invalid")
+ .withConnector(HttpConnector.OFFLINE)
+ .build();
+ } catch (IOException e) {
+ throw new IllegalStateException("The offline implementation constructor should not connect", e);
+ }
+ }
+
/**
* Is this an anonymous connection
* @return {@code true} if operations that require authentication will fail.
@@ -223,6 +242,14 @@ public boolean isAnonymous() {
return login==null && encodedAuthorization==null;
}
+ /**
+ * Is this an always offline "connection".
+ * @return {@code true} if this is an always offline "connection".
+ */
+ public boolean isOffline() {
+ return connector == HttpConnector.OFFLINE;
+ }
+
public HttpConnector getConnector() {
return connector;
}
@@ -365,6 +392,23 @@ protected void wrapUp(GHLicense[] page) {
};
}
+ /**
+ * Returns a list of all users.
+ */
+ public PagedIterable listUsers() throws IOException {
+ return new PagedIterable() {
+ public PagedIterator _iterator(int pageSize) {
+ return new PagedIterator(retrieve().asIterator("/users", GHUser[].class, pageSize)) {
+ @Override
+ protected void wrapUp(GHUser[] page) {
+ for (GHUser u : page)
+ u.wrapUp(GitHub.this);
+ }
+ };
+ }
+ };
+ }
+
/**
* Returns the full details for a license
*
@@ -497,6 +541,42 @@ public GHAuthorization createToken(Collection scope, String note, String
return requester.method("POST").to("/authorizations", GHAuthorization.class).wrap(this);
}
+ /**
+ * @see docs
+ */
+ public GHAuthorization createOrGetAuth(String clientId, String clientSecret, List scopes, String note,
+ String note_url)
+ throws IOException {
+ Requester requester = new Requester(this)
+ .with("client_secret", clientSecret)
+ .with("scopes", scopes)
+ .with("note", note)
+ .with("note_url", note_url);
+
+ return requester.method("PUT").to("/authorizations/clients/" + clientId, GHAuthorization.class);
+ }
+
+ /**
+ * @see Delete an authorization
+ */
+ public void deleteAuth(long id) throws IOException {
+ retrieve().method("DELETE").to("/authorizations/" + id);
+ }
+
+ /**
+ * @see Check an authorization
+ */
+ public GHAuthorization checkAuth(@Nonnull String clientId, @Nonnull String accessToken) throws IOException {
+ return retrieve().to("/applications/" + clientId + "/tokens/" + accessToken, GHAuthorization.class);
+ }
+
+ /**
+ * @see Reset an authorization
+ */
+ public GHAuthorization resetAuth(@Nonnull String clientId, @Nonnull String accessToken) throws IOException {
+ return retrieve().method("POST").to("/applications/" + clientId + "/tokens/" + accessToken, GHAuthorization.class);
+ }
+
/**
* Ensures that the credential is valid.
*/
diff --git a/src/main/java/org/kohsuke/github/HttpConnector.java b/src/main/java/org/kohsuke/github/HttpConnector.java
index 5496268561..72f7ce5b05 100644
--- a/src/main/java/org/kohsuke/github/HttpConnector.java
+++ b/src/main/java/org/kohsuke/github/HttpConnector.java
@@ -29,4 +29,13 @@ public HttpURLConnection connect(URL url) throws IOException {
return (HttpURLConnection) url.openConnection();
}
});
+
+ /**
+ * Stub implementation that is always off-line.
+ */
+ HttpConnector OFFLINE = new HttpConnector() {
+ public HttpURLConnection connect(URL url) throws IOException {
+ throw new IOException("Offline");
+ }
+ };
}
diff --git a/src/main/java/org/kohsuke/github/Previews.java b/src/main/java/org/kohsuke/github/Previews.java
index a5d061cbd4..f95a28b42b 100644
--- a/src/main/java/org/kohsuke/github/Previews.java
+++ b/src/main/java/org/kohsuke/github/Previews.java
@@ -6,4 +6,5 @@
/*package*/ class Previews {
static final String LOKI = "application/vnd.github.loki-preview+json";
static final String DRAX = "application/vnd.github.drax-preview+json";
+ static final String SQUIRREL_GIRL = "application/vnd.github.squirrel-girl-preview";
}
diff --git a/src/main/java/org/kohsuke/github/Reactable.java b/src/main/java/org/kohsuke/github/Reactable.java
new file mode 100644
index 0000000000..d8821362cf
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/Reactable.java
@@ -0,0 +1,23 @@
+package org.kohsuke.github;
+
+import java.io.IOException;
+
+/**
+ * Those {@link GHObject}s that can have {@linkplain GHReaction reactions}.
+ *
+ * @author Kohsuke Kawaguchi
+ */
+@Preview @Deprecated
+public interface Reactable {
+ /**
+ * List all the reactions left to this object.
+ */
+ @Preview @Deprecated
+ PagedIterable listReactions();
+
+ /**
+ * Leaves a reaction to this object.
+ */
+ @Preview @Deprecated
+ GHReaction createReaction(ReactionContent content) throws IOException;
+}
diff --git a/src/main/java/org/kohsuke/github/ReactionContent.java b/src/main/java/org/kohsuke/github/ReactionContent.java
new file mode 100644
index 0000000000..57a204b56d
--- /dev/null
+++ b/src/main/java/org/kohsuke/github/ReactionContent.java
@@ -0,0 +1,40 @@
+package org.kohsuke.github;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Content of reactions.
+ *
+ * @author Kohsuke Kawaguchi
+ * @see API documentation
+ * @see GHReaction
+ */
+public enum ReactionContent {
+ PLUS_ONE("+1"),
+ MINUS_ONE("-1"),
+ LAUGH("laugh"),
+ CONFUSED("confused"),
+ HEART("heart"),
+ HOORAY("hooray");
+
+ private final String content;
+
+ ReactionContent(String content) {
+ this.content = content;
+ }
+
+ @JsonValue
+ public String getContent() {
+ return content;
+ }
+
+ @JsonCreator
+ public static ReactionContent forContent(String content) {
+ for (ReactionContent c : ReactionContent.values()) {
+ if (c.getContent().equals(content))
+ return c;
+ }
+ return null;
+ }
+}
diff --git a/src/test/java/org/kohsuke/github/AppTest.java b/src/test/java/org/kohsuke/github/AppTest.java
index 5a27582573..7246781127 100755
--- a/src/test/java/org/kohsuke/github/AppTest.java
+++ b/src/test/java/org/kohsuke/github/AppTest.java
@@ -5,6 +5,7 @@
import com.google.common.collect.Lists;
import org.apache.commons.io.IOUtils;
+import org.hamcrest.CoreMatchers;
import org.junit.Assume;
import org.junit.Test;
import org.kohsuke.github.GHCommit.File;
@@ -17,6 +18,8 @@
import java.util.concurrent.ExecutionException;
import java.util.regex.Pattern;
+import static org.hamcrest.CoreMatchers.*;
+
/**
* Unit test for simple App.
*/
@@ -870,6 +873,21 @@ public void checkToString() throws Exception {
System.out.println(r.getIssue(1));
}
+ @Test
+ public void reactions() throws Exception {
+ GHIssue i = gitHub.getRepository("kohsuke/github-api").getIssue(311);
+
+ // retrieval
+ GHReaction r = i.listReactions().iterator().next();
+ assertThat(r.getUser().getLogin(), is("kohsuke"));
+ assertThat(r.getContent(),is(ReactionContent.HEART));
+
+ // CRUD
+ GHReaction a = i.createReaction(ReactionContent.HOORAY);
+ assertThat(a.getUser().getLogin(),is(gitHub.getMyself().getLogin()));
+ a.delete();
+ }
+
private void kohsuke() {
String login = getUser().getLogin();
Assume.assumeTrue(login.equals("kohsuke") || login.equals("kohsuke2"));
diff --git a/src/test/java/org/kohsuke/github/GHEventPayloadTest.java b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java
new file mode 100644
index 0000000000..07758d1a03
--- /dev/null
+++ b/src/test/java/org/kohsuke/github/GHEventPayloadTest.java
@@ -0,0 +1,251 @@
+package org.kohsuke.github;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
+public class GHEventPayloadTest {
+
+ @Rule
+ public final PayloadRule payload = new PayloadRule(".json");
+
+ @Test
+ public void commit_comment() throws Exception {
+ GHEventPayload.CommitComment event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.CommitComment.class);
+ assertThat(event.getAction(), is("created"));
+ assertThat(event.getComment().getSHA1(), is("9049f1265b7d61be4a8904a9a27120d2064dab3b"));
+ assertThat(event.getComment().getUser().getLogin(), is("baxterthehacker"));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+ @Test
+ public void create() throws Exception {
+ GHEventPayload.Create event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Create.class);
+ assertThat(event.getRef(), is("0.0.1"));
+ assertThat(event.getRefType(), is("tag"));
+ assertThat(event.getMasterBranch(), is("master"));
+ assertThat(event.getDescription(), is(""));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+ @Test
+ public void delete() throws Exception {
+ GHEventPayload.Delete event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Delete.class);
+ assertThat(event.getRef(), is("simple-tag"));
+ assertThat(event.getRefType(), is("tag"));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+ @Test
+ public void deployment() throws Exception {
+ GHEventPayload.Deployment event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Deployment.class);
+ assertThat(event.getDeployment().getSha(), is("9049f1265b7d61be4a8904a9a27120d2064dab3b"));
+ assertThat(event.getDeployment().getEnvironment(), is("production"));
+ assertThat(event.getDeployment().getCreator().getLogin(), is("baxterthehacker"));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+ @Test
+ public void deployment_status() throws Exception {
+ GHEventPayload.DeploymentStatus event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.DeploymentStatus.class);
+ assertThat(event.getDeploymentStatus().getState(), is(GHDeploymentState.SUCCESS));
+ assertThat(event.getDeploymentStatus().getTargetUrl(), nullValue());
+ assertThat(event.getDeployment().getSha(), is("9049f1265b7d61be4a8904a9a27120d2064dab3b"));
+ assertThat(event.getDeployment().getEnvironment(), is("production"));
+ assertThat(event.getDeployment().getCreator().getLogin(), is("baxterthehacker"));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+ @Test
+ public void fork() throws Exception {
+ GHEventPayload.Fork event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Fork.class);
+ assertThat(event.getForkee().getName(), is("public-repo"));
+ assertThat(event.getForkee().getOwner().getLogin(), is("baxterandthehackers"));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterandthehackers"));
+ }
+
+// TODO uncomment when we have GHPage implemented
+// @Test
+// public void gollum() throws Exception {
+// GHEventPayload.Gollum event =
+// GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Gollum.class);
+// assertThat(event.getPages().size(), is(1));
+// GHPage page = event.getPages().get(0);
+// assertThat(page.getName(), is("Home"));
+// assertThat(page.getTitle(), is("Home"));
+// assertThat(page.getSummary(), nullValue());
+// assertThat(page.getAction(), is("created"));
+// assertThat(page.getSha(), is("91ea1bd42aa2ba166b86e8aefe049e9837214e67"));
+// assertThat(page.getHtmlUrl(), is("https://github.com/baxterthehacker/public-repo/wiki/Home"));
+// assertThat(event.getRepository().getName(), is("public-repo"));
+// assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+// assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+// }
+
+ @Test
+ public void issue_comment() throws Exception {
+ GHEventPayload.IssueComment event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.IssueComment.class);
+ assertThat(event.getAction(), is("created"));
+ assertThat(event.getIssue().getNumber(), is(2));
+ assertThat(event.getIssue().getTitle(), is("Spelling error in the README file"));
+ assertThat(event.getIssue().getState(), is(GHIssueState.OPEN));
+ assertThat(event.getIssue().getLabels().size(), is(1));
+ assertThat(event.getIssue().getLabels().iterator().next().getName(), is("bug"));
+ assertThat(event.getComment().getUser().getLogin(), is("baxterthehacker"));
+ assertThat(event.getComment().getBody(), is("You are totally right! I'll get this fixed right away."));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+// TODO implement support classes and write test
+// @Test
+// public void issues() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void label() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void member() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void membership() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void milestone() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void page_build() throws Exception {}
+
+ @Test
+ @Payload("public")
+ public void public_() throws Exception {
+ GHEventPayload.Public event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Public.class);
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+ @Test
+ public void pull_request() throws Exception {
+ GHEventPayload.PullRequest event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.PullRequest.class);
+ assertThat(event.getAction(), is("opened"));
+ assertThat(event.getNumber(), is(1));
+ assertThat(event.getPullRequest().getNumber(), is(1));
+ assertThat(event.getPullRequest().getTitle(), is("Update the README with new information"));
+ assertThat(event.getPullRequest().getBody(), is("This is a pretty simple change that we need to pull into "
+ + "master."));
+ assertThat(event.getPullRequest().getUser().getLogin(), is("baxterthehacker"));
+ assertThat(event.getPullRequest().getHead().getUser().getLogin(), is("baxterthehacker"));
+ assertThat(event.getPullRequest().getHead().getRef(), is("changes"));
+ assertThat(event.getPullRequest().getHead().getLabel(), is("baxterthehacker:changes"));
+ assertThat(event.getPullRequest().getHead().getSha(), is("0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"));
+ assertThat(event.getPullRequest().getBase().getUser().getLogin(), is("baxterthehacker"));
+ assertThat(event.getPullRequest().getBase().getRef(), is("master"));
+ assertThat(event.getPullRequest().getBase().getLabel(), is("baxterthehacker:master"));
+ assertThat(event.getPullRequest().getBase().getSha(), is("9049f1265b7d61be4a8904a9a27120d2064dab3b"));
+ assertThat(event.getPullRequest().isMerged(), is(false));
+ assertThat(event.getPullRequest().getMergeable(), nullValue());
+ assertThat(event.getPullRequest().getMergeableState(), is("unknown"));
+ assertThat(event.getPullRequest().getMergedBy(), nullValue());
+ assertThat(event.getPullRequest().getCommentsCount(), is(0));
+ assertThat(event.getPullRequest().getReviewComments(), is(0));
+ assertThat(event.getPullRequest().getAdditions(), is(1));
+ assertThat(event.getPullRequest().getDeletions(), is(1));
+ assertThat(event.getPullRequest().getChangedFiles(), is(1));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterthehacker"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+// TODO implement support classes and write test
+// @Test
+// public void pull_request_review() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void pull_request_review_comment() throws Exception {}
+
+ @Test
+ public void push() throws Exception {
+ GHEventPayload.Push event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Push.class);
+ assertThat(event.getRef(), is("refs/heads/changes"));
+ assertThat(event.getBefore(), is("9049f1265b7d61be4a8904a9a27120d2064dab3b"));
+ assertThat(event.getHead(), is("0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"));
+ assertThat(event.isCreated(), is(false));
+ assertThat(event.isDeleted(), is(false));
+ assertThat(event.isForced(), is(false));
+ assertThat(event.getCommits().size(), is(1));
+ assertThat(event.getCommits().get(0).getSha(), is("0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"));
+ assertThat(event.getCommits().get(0).getAuthor().getEmail(), is("baxterthehacker@users.noreply.github.com"));
+ assertThat(event.getCommits().get(0).getCommitter().getEmail(), is("baxterthehacker@users.noreply.github.com"));
+ assertThat(event.getCommits().get(0).getAdded().size(), is(0));
+ assertThat(event.getCommits().get(0).getRemoved().size(), is(0));
+ assertThat(event.getCommits().get(0).getModified().size(), is(1));
+ assertThat(event.getCommits().get(0).getModified().get(0), is("README.md"));
+ assertThat(event.getRepository().getName(), is("public-repo"));
+ assertThat(event.getRepository().getOwnerName(), is("baxterthehacker"));
+ assertThat(event.getRepository().getUrl().toExternalForm(), is("https://github.com/baxterthehacker/public-repo"));
+ assertThat(event.getPusher().getName(), is("baxterthehacker"));
+ assertThat(event.getPusher().getEmail(), is("baxterthehacker@users.noreply.github.com"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+// TODO implement support classes and write test
+// @Test
+// public void release() throws Exception {}
+
+ @Test
+ public void repository() throws Exception {
+ GHEventPayload.Repository event =
+ GitHub.offline().parseEventPayload(payload.asReader(), GHEventPayload.Repository.class);
+ assertThat(event.getAction(), is("created"));
+ assertThat(event.getRepository().getName(), is("new-repository"));
+ assertThat(event.getRepository().getOwner().getLogin(), is("baxterandthehackers"));
+ assertThat(event.getOrganization().getLogin(), is("baxterandthehackers"));
+ assertThat(event.getSender().getLogin(), is("baxterthehacker"));
+ }
+
+// TODO implement support classes and write test
+// @Test
+// public void status() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void team_add() throws Exception {}
+
+// TODO implement support classes and write test
+// @Test
+// public void watch() throws Exception {}
+
+}
diff --git a/src/test/java/org/kohsuke/github/GitHubTest.java b/src/test/java/org/kohsuke/github/GitHubTest.java
index b8ae4ff0df..010adc8b24 100644
--- a/src/test/java/org/kohsuke/github/GitHubTest.java
+++ b/src/test/java/org/kohsuke/github/GitHubTest.java
@@ -7,12 +7,15 @@
import java.util.HashMap;
import java.util.Map;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Iterators;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -20,6 +23,19 @@
* Unit test for {@link GitHub}.
*/
public class GitHubTest {
+ @Test
+ public void testOffline() throws Exception {
+ GitHub hub = GitHub.offline();
+ assertEquals("https://api.github.invalid/test", hub.getApiURL("/test").toString());
+ assertTrue(hub.isAnonymous());
+ try {
+ hub.getRateLimit();
+ fail("Offline instance should always fail");
+ } catch (IOException e) {
+ assertEquals("Offline", e.getMessage());
+ }
+ }
+
@Test
public void testGitHubServerWithHttp() throws Exception {
GitHub hub = GitHub.connectToEnterprise("http://enterprise.kohsuke.org/api/v3", "bogus","bogus");
@@ -131,4 +147,13 @@ public void testGitHubIsApiUrlValid() throws IOException {
assertTrue(ioe.getMessage().contains("private mode enabled"));
}
}
+
+ @Test
+ public void listUsers() throws IOException {
+ GitHub hub = GitHub.connect();
+ for (GHUser u : Iterables.limit(hub.listUsers(),10)) {
+ assert u.getName()!=null;
+ System.out.println(u.getName());
+ }
+ }
}
diff --git a/src/test/java/org/kohsuke/github/Payload.java b/src/test/java/org/kohsuke/github/Payload.java
new file mode 100644
index 0000000000..7365468d24
--- /dev/null
+++ b/src/test/java/org/kohsuke/github/Payload.java
@@ -0,0 +1,12 @@
+package org.kohsuke.github;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Payload {
+ String value();
+}
diff --git a/src/test/java/org/kohsuke/github/PayloadRule.java b/src/test/java/org/kohsuke/github/PayloadRule.java
new file mode 100644
index 0000000000..7f9364fdb2
--- /dev/null
+++ b/src/test/java/org/kohsuke/github/PayloadRule.java
@@ -0,0 +1,87 @@
+package org.kohsuke.github;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import org.apache.commons.io.IOUtils;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+/**
+ * @author Stephen Connolly
+ */
+public class PayloadRule implements TestRule {
+
+ private final String type;
+
+ private Class> testClass;
+
+ private String resourceName;
+
+ public PayloadRule(String type) {
+ this.type = type;
+ }
+
+ public Statement apply(final Statement base, final Description description) {
+ return new Statement() {
+ @Override
+ public void evaluate() throws Throwable {
+ Payload payload = description.getAnnotation(Payload.class);
+ resourceName = payload == null ? description.getMethodName() : payload.value();
+ testClass = description.getTestClass();
+ try {
+ base.evaluate();
+ } finally {
+ resourceName = null;
+ }
+ }
+ };
+ }
+
+ public InputStream asInputStream() throws FileNotFoundException {
+ String name = resourceName.startsWith("/")
+ ? resourceName + type
+ : testClass.getSimpleName() + "/" + resourceName + type;
+ InputStream stream = testClass.getResourceAsStream(name);
+ if (stream == null) {
+ throw new FileNotFoundException(String.format("Resource %s from class %s", name, testClass));
+ }
+ return stream;
+ }
+
+ public byte[] asBytes() throws IOException {
+ InputStream input = asInputStream();
+ try {
+ return IOUtils.toByteArray(input);
+ } finally {
+ IOUtils.closeQuietly(input);
+ }
+ }
+
+ public String asString(Charset encoding) throws IOException {
+ return new String(asBytes(), encoding.name());
+ }
+
+ public String asString(String encoding) throws IOException {
+ return new String(asBytes(), encoding);
+ }
+
+ public String asString() throws IOException {
+ return new String(asBytes(), Charset.defaultCharset().name());
+ }
+
+ public Reader asReader() throws FileNotFoundException {
+ return new InputStreamReader(asInputStream(), Charset.defaultCharset());
+ }
+
+ public Reader asReader(String encoding) throws IOException {
+ return new InputStreamReader(asInputStream(), encoding);
+ }
+ public Reader asReader(Charset encoding) throws FileNotFoundException {
+ return new InputStreamReader(asInputStream(), encoding);
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/commit_comment.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/commit_comment.json
new file mode 100644
index 0000000000..bcf70894cd
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/commit_comment.json
@@ -0,0 +1,140 @@
+{
+ "action": "created",
+ "comment": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/comments/11056394",
+ "html_url": "https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b#commitcomment-11056394",
+ "id": 11056394,
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "position": null,
+ "line": null,
+ "path": null,
+ "commit_id": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "created_at": "2015-05-05T23:40:29Z",
+ "updated_at": "2015-05-05T23:40:29Z",
+ "body": "This is a really good change! :+1:"
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/create.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/create.json
new file mode 100644
index 0000000000..51d690c378
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/create.json
@@ -0,0 +1,113 @@
+{
+ "ref": "0.0.1",
+ "ref_type": "tag",
+ "master_branch": "master",
+ "description": "",
+ "pusher_type": "user",
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:38Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/delete.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/delete.json
new file mode 100644
index 0000000000..0759bcd04a
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/delete.json
@@ -0,0 +1,111 @@
+{
+ "ref": "simple-tag",
+ "ref_type": "tag",
+ "pusher_type": "user",
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:40Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/deployment.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/deployment.json
new file mode 100644
index 0000000000..9f2ca9668f
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/deployment.json
@@ -0,0 +1,142 @@
+{
+ "deployment": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692",
+ "id": 710692,
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "ref": "master",
+ "task": "deploy",
+ "payload": {
+ },
+ "environment": "production",
+ "description": null,
+ "creator": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "created_at": "2015-05-05T23:40:38Z",
+ "updated_at": "2015-05-05T23:40:38Z",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses",
+ "repository_url": "https://api.github.com/repos/baxterthehacker/public-repo"
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:38Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/deployment_status.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/deployment_status.json
new file mode 100644
index 0000000000..e1dcd0706f
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/deployment_status.json
@@ -0,0 +1,172 @@
+{
+ "deployment_status": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses/1115122",
+ "id": 1115122,
+ "state": "success",
+ "creator": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "description": null,
+ "target_url": null,
+ "created_at": "2015-05-05T23:40:39Z",
+ "updated_at": "2015-05-05T23:40:39Z",
+ "deployment_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692",
+ "repository_url": "https://api.github.com/repos/baxterthehacker/public-repo"
+ },
+ "deployment": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692",
+ "id": 710692,
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "ref": "master",
+ "task": "deploy",
+ "payload": {
+ },
+ "environment": "production",
+ "description": null,
+ "creator": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "created_at": "2015-05-05T23:40:38Z",
+ "updated_at": "2015-05-05T23:40:38Z",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments/710692/statuses",
+ "repository_url": "https://api.github.com/repos/baxterthehacker/public-repo"
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:38Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/fork.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/fork.json
new file mode 100644
index 0000000000..e01d3c50fc
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/fork.json
@@ -0,0 +1,196 @@
+{
+ "forkee": {
+ "id": 35129393,
+ "name": "public-repo",
+ "full_name": "baxterandthehackers/public-repo",
+ "owner": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterandthehackers/public-repo",
+ "description": "",
+ "fork": true,
+ "url": "https://api.github.com/repos/baxterandthehackers/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:30Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterandthehackers/public-repo.git",
+ "ssh_url": "git@github.com:baxterandthehackers/public-repo.git",
+ "clone_url": "https://github.com/baxterandthehackers/public-repo.git",
+ "svn_url": "https://github.com/baxterandthehackers/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": false,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master",
+ "public": true
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 1,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 1,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/gollum.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/gollum.json
new file mode 100644
index 0000000000..79527b91ca
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/gollum.json
@@ -0,0 +1,118 @@
+{
+ "pages": [
+ {
+ "page_name": "Home",
+ "title": "Home",
+ "summary": null,
+ "action": "created",
+ "sha": "91ea1bd42aa2ba166b86e8aefe049e9837214e67",
+ "html_url": "https://github.com/baxterthehacker/public-repo/wiki/Home"
+ }
+ ],
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:17Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "jasonrudolph",
+ "id": 2988,
+ "avatar_url": "https://avatars.githubusercontent.com/u/2988?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/jasonrudolph",
+ "html_url": "https://github.com/jasonrudolph",
+ "followers_url": "https://api.github.com/users/jasonrudolph/followers",
+ "following_url": "https://api.github.com/users/jasonrudolph/following{/other_user}",
+ "gists_url": "https://api.github.com/users/jasonrudolph/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/jasonrudolph/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/jasonrudolph/subscriptions",
+ "organizations_url": "https://api.github.com/users/jasonrudolph/orgs",
+ "repos_url": "https://api.github.com/users/jasonrudolph/repos",
+ "events_url": "https://api.github.com/users/jasonrudolph/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/jasonrudolph/received_events",
+ "type": "User",
+ "site_admin": true
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/issue_comment.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/issue_comment.json
new file mode 100644
index 0000000000..6f6e7d8975
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/issue_comment.json
@@ -0,0 +1,182 @@
+{
+ "action": "created",
+ "issue": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/labels{/name}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/comments",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/events",
+ "html_url": "https://github.com/baxterthehacker/public-repo/issues/2",
+ "id": 73464126,
+ "number": 2,
+ "title": "Spelling error in the README file",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+ {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug",
+ "name": "bug",
+ "color": "fc2929"
+ }
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 1,
+ "created_at": "2015-05-05T23:40:28Z",
+ "updated_at": "2015-05-05T23:40:28Z",
+ "closed_at": null,
+ "body": "It looks like you accidently spelled 'commit' with two 't's."
+ },
+ "comment": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments/99262140",
+ "html_url": "https://github.com/baxterthehacker/public-repo/issues/2#issuecomment-99262140",
+ "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2",
+ "id": 99262140,
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "created_at": "2015-05-05T23:40:28Z",
+ "updated_at": "2015-05-05T23:40:28Z",
+ "body": "You are totally right! I'll get this fixed right away."
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/issues.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/issues.json
new file mode 100644
index 0000000000..5e0c52b0c1
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/issues.json
@@ -0,0 +1,156 @@
+{
+ "action": "opened",
+ "issue": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/labels{/name}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/comments",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/2/events",
+ "html_url": "https://github.com/baxterthehacker/public-repo/issues/2",
+ "id": 73464126,
+ "number": 2,
+ "title": "Spelling error in the README file",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+ {
+ "id": 208045946,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/labels/bug",
+ "name": "bug",
+ "color": "fc2929",
+ "default": true
+ }
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 0,
+ "created_at": "2015-05-05T23:40:28Z",
+ "updated_at": "2015-05-05T23:40:28Z",
+ "closed_at": null,
+ "body": "It looks like you accidently spelled 'commit' with two 't's."
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/label.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/label.json
new file mode 100644
index 0000000000..f85f636f89
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/label.json
@@ -0,0 +1,129 @@
+{
+ "action": "created",
+ "label": {
+ "url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels/blocked",
+ "name": "blocked",
+ "color": "ff0000"
+ },
+ "repository": {
+ "id": 67075329,
+ "name": "public-repo",
+ "full_name": "baxterandthehackers/public-repo",
+ "owner": {
+ "login": "baxterandthehackers",
+ "id": 4312013,
+ "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "private": true,
+ "html_url": "https://github.com/baxterandthehackers/public-repo",
+ "description": null,
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterandthehackers/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,
+ participating}",
+ "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/deployments",
+ "created_at": "2016-08-31T21:38:51Z",
+ "updated_at": "2016-08-31T21:38:51Z",
+ "pushed_at": "2016-08-31T21:38:51Z",
+ "git_url": "git://github.com/baxterandthehackers/public-repo.git",
+ "ssh_url": "git@github.com:baxterandthehackers/public-repo.git",
+ "clone_url": "https://github.com/baxterandthehackers/public-repo.git",
+ "svn_url": "https://github.com/baxterandthehackers/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "organization": {
+ "login": "baxterandthehackers",
+ "id": 4312013,
+ "url": "https://api.github.com/orgs/baxterandthehackers",
+ "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/orgs/baxterandthehackers/events",
+ "hooks_url": "https://api.github.com/orgs/baxterandthehackers/hooks",
+ "issues_url": "https://api.github.com/orgs/baxterandthehackers/issues",
+ "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3",
+ "description": ""
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": true
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/member.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/member.json
new file mode 100644
index 0000000000..20305670e3
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/member.json
@@ -0,0 +1,128 @@
+{
+ "action": "added",
+ "member": {
+ "login": "octocat",
+ "id": 583231,
+ "avatar_url": "https://avatars.githubusercontent.com/u/583231?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/octocat",
+ "html_url": "https://github.com/octocat",
+ "followers_url": "https://api.github.com/users/octocat/followers",
+ "following_url": "https://api.github.com/users/octocat/following{/other_user}",
+ "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
+ "organizations_url": "https://api.github.com/users/octocat/orgs",
+ "repos_url": "https://api.github.com/users/octocat/repos",
+ "events_url": "https://api.github.com/users/octocat/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/octocat/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:40Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/membership.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/membership.json
new file mode 100644
index 0000000000..612d967f6d
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/membership.json
@@ -0,0 +1,61 @@
+{
+ "action": "added",
+ "scope": "team",
+ "member": {
+ "login": "kdaigle",
+ "id": 2501,
+ "avatar_url": "https://avatars.githubusercontent.com/u/2501?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/kdaigle",
+ "html_url": "https://github.com/kdaigle",
+ "followers_url": "https://api.github.com/users/kdaigle/followers",
+ "following_url": "https://api.github.com/users/kdaigle/following{/other_user}",
+ "gists_url": "https://api.github.com/users/kdaigle/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/kdaigle/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/kdaigle/subscriptions",
+ "organizations_url": "https://api.github.com/users/kdaigle/orgs",
+ "repos_url": "https://api.github.com/users/kdaigle/repos",
+ "events_url": "https://api.github.com/users/kdaigle/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/kdaigle/received_events",
+ "type": "User",
+ "site_admin": true
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "team": {
+ "name": "Contractors",
+ "id": 123456,
+ "slug": "contractors",
+ "permission": "admin",
+ "url": "https://api.github.com/teams/123456",
+ "members_url": "https://api.github.com/teams/123456/members{/member}",
+ "repositories_url": "https://api.github.com/teams/123456/repos"
+ },
+ "organization": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "url": "https://api.github.com/orgs/baxterandthehackers",
+ "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/orgs/baxterandthehackers/events",
+ "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2"
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json
new file mode 100644
index 0000000000..7f262abd5c
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/milestone.json
@@ -0,0 +1,160 @@
+{
+ "action": "created",
+ "milestone": {
+ "url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3",
+ "html_url": "https://github.com/baxterandthehackers/public-repo/milestones/Test%20milestone%20creation%20webhook
+ %20from%20command%20line2",
+ "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones/3/labels",
+ "id": 2055681,
+ "number": 3,
+ "title": "I am a milestone",
+ "description": null,
+ "creator": {
+ "login": "baxterthehacker",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": true
+ },
+ "open_issues": 0,
+ "closed_issues": 0,
+ "state": "open",
+ "created_at": "2016-10-07T19:26:08Z",
+ "updated_at": "2016-10-07T19:26:08Z",
+ "due_on": null,
+ "closed_at": null
+ },
+ "repository": {
+ "id": 70275481,
+ "name": "public-repo",
+ "full_name": "baxterandthehackers/public-repo",
+ "owner": {
+ "login": "baxterandthehackers",
+ "id": 4312013,
+ "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "private": true,
+ "html_url": "https://github.com/baxterandthehackers/public-repo",
+ "description": null,
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterandthehackers/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,
+ participating}",
+ "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/deployments",
+ "created_at": "2016-10-07T19:10:12Z",
+ "updated_at": "2016-10-07T19:10:12Z",
+ "pushed_at": "2016-10-07T19:10:13Z",
+ "git_url": "git://github.com/baxterandthehackers/public-repo.git",
+ "ssh_url": "git@github.com:baxterandthehackers/public-repo.git",
+ "clone_url": "https://github.com/baxterandthehackers/public-repo.git",
+ "svn_url": "https://github.com/baxterandthehackers/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "organization": {
+ "login": "baxterandthehackers",
+ "id": 4312013,
+ "url": "https://api.github.com/orgs/baxterandthehackers",
+ "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/orgs/baxterandthehackers/events",
+ "hooks_url": "https://api.github.com/orgs/baxterandthehackers/hooks",
+ "issues_url": "https://api.github.com/orgs/baxterandthehackers/issues",
+ "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/4312013?v=3",
+ "description": ""
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": true
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/page_build.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/page_build.json
new file mode 100644
index 0000000000..80962c016e
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/page_build.json
@@ -0,0 +1,139 @@
+{
+ "id": 15995382,
+ "build": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/pages/builds/15995382",
+ "status": "built",
+ "error": {
+ "message": null
+ },
+ "pusher": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "commit": "053b99542c83021d6b202d1a1f5ecd5ef7084e55",
+ "duration": 3790,
+ "created_at": "2015-05-05T23:40:13Z",
+ "updated_at": "2015-05-05T23:40:17Z"
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:17Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/public.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/public.json
new file mode 100644
index 0000000000..f596a54282
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/public.json
@@ -0,0 +1,108 @@
+{
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:41Z",
+ "pushed_at": "2015-05-05T23:40:40Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request.json
new file mode 100644
index 0000000000..316cc4e8f7
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request.json
@@ -0,0 +1,412 @@
+{
+ "action": "opened",
+ "number": 1,
+ "pull_request": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1",
+ "id": 34778301,
+ "html_url": "https://github.com/baxterthehacker/public-repo/pull/1",
+ "diff_url": "https://github.com/baxterthehacker/public-repo/pull/1.diff",
+ "patch_url": "https://github.com/baxterthehacker/public-repo/pull/1.patch",
+ "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1",
+ "number": 1,
+ "state": "open",
+ "locked": false,
+ "title": "Update the README with new information",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "body": "This is a pretty simple change that we need to pull into master.",
+ "created_at": "2015-05-05T23:40:27Z",
+ "updated_at": "2015-05-05T23:40:27Z",
+ "closed_at": null,
+ "merged_at": null,
+ "merge_commit_sha": null,
+ "assignee": null,
+ "milestone": null,
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits",
+ "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments",
+ "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "head": {
+ "label": "baxterthehacker:changes",
+ "ref": "changes",
+ "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:26Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 1,
+ "forks": 0,
+ "open_issues": 1,
+ "watchers": 0,
+ "default_branch": "master"
+ }
+ },
+ "base": {
+ "label": "baxterthehacker:master",
+ "ref": "master",
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:26Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 1,
+ "forks": 0,
+ "open_issues": 1,
+ "watchers": 0,
+ "default_branch": "master"
+ }
+ },
+ "_links": {
+ "self": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1"
+ },
+ "html": {
+ "href": "https://github.com/baxterthehacker/public-repo/pull/1"
+ },
+ "issue": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1"
+ },
+ "comments": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments"
+ },
+ "review_comments": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments"
+ },
+ "review_comment": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}"
+ },
+ "commits": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits"
+ },
+ "statuses": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"
+ }
+ },
+ "merged": false,
+ "mergeable": null,
+ "mergeable_state": "unknown",
+ "merged_by": null,
+ "comments": 0,
+ "review_comments": 0,
+ "commits": 1,
+ "additions": 1,
+ "deletions": 1,
+ "changed_files": 1
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:26Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 1,
+ "forks": 0,
+ "open_issues": 1,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request_review.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request_review.json
new file mode 100644
index 0000000000..82c8396086
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request_review.json
@@ -0,0 +1,440 @@
+{
+ "action": "submitted",
+ "review": {
+ "id": 2626884,
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "body": "Looks great!",
+ "submitted_at": "2016-10-03T23:39:09Z",
+ "state": "approved",
+ "html_url": "https://github.com/baxterthehacker/public-repo/pull/8#pullrequestreview-2626884",
+ "pull_request_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8",
+ "_links": {
+ "html": {
+ "href": "https://github.com/baxterthehacker/public-repo/pull/8#pullrequestreview-2626884"
+ },
+ "pull_request": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8"
+ }
+ }
+ },
+ "pull_request": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8",
+ "id": 87811438,
+ "html_url": "https://github.com/baxterthehacker/public-repo/pull/8",
+ "diff_url": "https://github.com/baxterthehacker/public-repo/pull/8.diff",
+ "patch_url": "https://github.com/baxterthehacker/public-repo/pull/8.patch",
+ "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8",
+ "number": 8,
+ "state": "open",
+ "locked": false,
+ "title": "Add a README description",
+ "user": {
+ "login": "skalnik",
+ "id": 2546,
+ "avatar_url": "https://avatars.githubusercontent.com/u/2546?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/skalnik",
+ "html_url": "https://github.com/skalnik",
+ "followers_url": "https://api.github.com/users/skalnik/followers",
+ "following_url": "https://api.github.com/users/skalnik/following{/other_user}",
+ "gists_url": "https://api.github.com/users/skalnik/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/skalnik/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/skalnik/subscriptions",
+ "organizations_url": "https://api.github.com/users/skalnik/orgs",
+ "repos_url": "https://api.github.com/users/skalnik/repos",
+ "events_url": "https://api.github.com/users/skalnik/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/skalnik/received_events",
+ "type": "User",
+ "site_admin": true
+ },
+ "body": "Just a few more details",
+ "created_at": "2016-10-03T23:37:43Z",
+ "updated_at": "2016-10-03T23:39:09Z",
+ "closed_at": null,
+ "merged_at": null,
+ "merge_commit_sha": "faea154a7decef6819754aab0f8c0e232e6c8b4f",
+ "assignee": null,
+ "assignees": [],
+ "milestone": null,
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/commits",
+ "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/comments",
+ "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8/comments",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63",
+ "head": {
+ "label": "skalnik:patch-2",
+ "ref": "patch-2",
+ "sha": "b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63",
+ "user": {
+ "login": "skalnik",
+ "id": 2546,
+ "avatar_url": "https://avatars.githubusercontent.com/u/2546?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/skalnik",
+ "html_url": "https://github.com/skalnik",
+ "followers_url": "https://api.github.com/users/skalnik/followers",
+ "following_url": "https://api.github.com/users/skalnik/following{/other_user}",
+ "gists_url": "https://api.github.com/users/skalnik/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/skalnik/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/skalnik/subscriptions",
+ "organizations_url": "https://api.github.com/users/skalnik/orgs",
+ "repos_url": "https://api.github.com/users/skalnik/repos",
+ "events_url": "https://api.github.com/users/skalnik/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/skalnik/received_events",
+ "type": "User",
+ "site_admin": true
+ },
+ "repo": {
+ "id": 69919152,
+ "name": "public-repo",
+ "full_name": "skalnik/public-repo",
+ "owner": {
+ "login": "skalnik",
+ "id": 2546,
+ "avatar_url": "https://avatars.githubusercontent.com/u/2546?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/skalnik",
+ "html_url": "https://github.com/skalnik",
+ "followers_url": "https://api.github.com/users/skalnik/followers",
+ "following_url": "https://api.github.com/users/skalnik/following{/other_user}",
+ "gists_url": "https://api.github.com/users/skalnik/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/skalnik/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/skalnik/subscriptions",
+ "organizations_url": "https://api.github.com/users/skalnik/orgs",
+ "repos_url": "https://api.github.com/users/skalnik/repos",
+ "events_url": "https://api.github.com/users/skalnik/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/skalnik/received_events",
+ "type": "User",
+ "site_admin": true
+ },
+ "private": false,
+ "html_url": "https://github.com/skalnik/public-repo",
+ "description": null,
+ "fork": true,
+ "url": "https://api.github.com/repos/skalnik/public-repo",
+ "forks_url": "https://api.github.com/repos/skalnik/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/skalnik/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/skalnik/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/skalnik/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/skalnik/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/skalnik/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/skalnik/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/skalnik/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/skalnik/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/skalnik/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/skalnik/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/skalnik/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/skalnik/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/skalnik/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/skalnik/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/skalnik/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/skalnik/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/skalnik/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/skalnik/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/skalnik/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/skalnik/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/skalnik/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/skalnik/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/skalnik/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/skalnik/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/skalnik/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/skalnik/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/skalnik/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/skalnik/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/skalnik/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/skalnik/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/skalnik/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/skalnik/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/skalnik/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/skalnik/public-repo/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/skalnik/public-repo/deployments",
+ "created_at": "2016-10-03T23:23:31Z",
+ "updated_at": "2016-08-15T17:19:01Z",
+ "pushed_at": "2016-10-03T23:36:52Z",
+ "git_url": "git://github.com/skalnik/public-repo.git",
+ "ssh_url": "git@github.com:skalnik/public-repo.git",
+ "clone_url": "https://github.com/skalnik/public-repo.git",
+ "svn_url": "https://github.com/skalnik/public-repo",
+ "homepage": null,
+ "size": 233,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": false,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master"
+ }
+ },
+ "base": {
+ "label": "baxterthehacker:master",
+ "ref": "master",
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2016-08-15T17:19:01Z",
+ "pushed_at": "2016-10-03T23:37:43Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 233,
+ "stargazers_count": 2,
+ "watchers_count": 2,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 2,
+ "mirror_url": null,
+ "open_issues_count": 5,
+ "forks": 2,
+ "open_issues": 5,
+ "watchers": 2,
+ "default_branch": "master"
+ }
+ },
+ "_links": {
+ "self": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8"
+ },
+ "html": {
+ "href": "https://github.com/baxterthehacker/public-repo/pull/8"
+ },
+ "issue": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8"
+ },
+ "comments": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/8/comments"
+ },
+ "review_comments": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/comments"
+ },
+ "review_comment": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}"
+ },
+ "commits": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/8/commits"
+ },
+ "statuses": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/b7a1f9c27caa4e03c14a88feb56e2d4f7500aa63"
+ }
+ }
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/baxterthehacker/public-repo/deployments",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2016-08-15T17:19:01Z",
+ "pushed_at": "2016-10-03T23:37:43Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 233,
+ "stargazers_count": 2,
+ "watchers_count": 2,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 2,
+ "mirror_url": null,
+ "open_issues_count": 5,
+ "forks": 2,
+ "open_issues": 5,
+ "watchers": 2,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request_review_comment.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request_review_comment.json
new file mode 100644
index 0000000000..a89b6b547d
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/pull_request_review_comment.json
@@ -0,0 +1,446 @@
+{
+ "action": "created",
+ "comment": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments/29724692",
+ "id": 29724692,
+ "diff_hunk": "@@ -1 +1 @@\n-# public-repo",
+ "path": "README.md",
+ "position": 1,
+ "original_position": 1,
+ "commit_id": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "original_commit_id": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "body": "Maybe you should use more emojji on this line.",
+ "created_at": "2015-05-05T23:40:27Z",
+ "updated_at": "2015-05-05T23:40:27Z",
+ "html_url": "https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692",
+ "pull_request_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1",
+ "_links": {
+ "self": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments/29724692"
+ },
+ "html": {
+ "href": "https://github.com/baxterthehacker/public-repo/pull/1#discussion_r29724692"
+ },
+ "pull_request": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1"
+ }
+ }
+ },
+ "pull_request": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1",
+ "id": 34778301,
+ "html_url": "https://github.com/baxterthehacker/public-repo/pull/1",
+ "diff_url": "https://github.com/baxterthehacker/public-repo/pull/1.diff",
+ "patch_url": "https://github.com/baxterthehacker/public-repo/pull/1.patch",
+ "issue_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1",
+ "number": 1,
+ "state": "open",
+ "locked": false,
+ "title": "Update the README with new information",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "body": "This is a pretty simple change that we need to pull into master.",
+ "created_at": "2015-05-05T23:40:27Z",
+ "updated_at": "2015-05-05T23:40:27Z",
+ "closed_at": null,
+ "merged_at": null,
+ "merge_commit_sha": "18721552ba489fb84e12958c1b5694b5475f7991",
+ "assignee": null,
+ "milestone": null,
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits",
+ "review_comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments",
+ "review_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "head": {
+ "label": "baxterthehacker:changes",
+ "ref": "changes",
+ "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 1,
+ "forks": 0,
+ "open_issues": 1,
+ "watchers": 0,
+ "default_branch": "master"
+ }
+ },
+ "base": {
+ "label": "baxterthehacker:master",
+ "ref": "master",
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "user": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 1,
+ "forks": 0,
+ "open_issues": 1,
+ "watchers": 0,
+ "default_branch": "master"
+ }
+ },
+ "_links": {
+ "self": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1"
+ },
+ "html": {
+ "href": "https://github.com/baxterthehacker/public-repo/pull/1"
+ },
+ "issue": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1"
+ },
+ "comments": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/issues/1/comments"
+ },
+ "review_comments": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/comments"
+ },
+ "review_comment": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/comments{/number}"
+ },
+ "commits": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/pulls/1/commits"
+ },
+ "statuses": {
+ "href": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"
+ }
+ }
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 1,
+ "forks": 0,
+ "open_issues": 1,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/push.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/push.json
new file mode 100644
index 0000000000..11477e0bb7
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/push.json
@@ -0,0 +1,159 @@
+{
+ "ref": "refs/heads/changes",
+ "before": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "after": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "created": false,
+ "deleted": false,
+ "forced": false,
+ "base_ref": null,
+ "compare": "https://github.com/baxterthehacker/public-repo/compare/9049f1265b7d...0d1a26e67d8f",
+ "commits": [
+ {
+ "id": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "tree_id": "f9d2a07e9488b91af2641b26b9407fe22a451433",
+ "distinct": true,
+ "message": "Update README.md",
+ "timestamp": "2015-05-05T19:40:15-04:00",
+ "url": "https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "author": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com",
+ "username": "baxterthehacker"
+ },
+ "committer": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com",
+ "username": "baxterthehacker"
+ },
+ "added": [
+ ],
+ "removed": [
+ ],
+ "modified": [
+ "README.md"
+ ]
+ }
+ ],
+ "head_commit": {
+ "id": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "tree_id": "f9d2a07e9488b91af2641b26b9407fe22a451433",
+ "distinct": true,
+ "message": "Update README.md",
+ "timestamp": "2015-05-05T19:40:15-04:00",
+ "url": "https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "author": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com",
+ "username": "baxterthehacker"
+ },
+ "committer": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com",
+ "username": "baxterthehacker"
+ },
+ "added": [
+ ],
+ "removed": [
+ ],
+ "modified": [
+ "README.md"
+ ]
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com"
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://github.com/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": 1430869212,
+ "updated_at": "2015-05-05T23:40:12Z",
+ "pushed_at": 1430869217,
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master",
+ "stargazers": 0,
+ "master_branch": "master"
+ },
+ "pusher": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/release.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/release.json
new file mode 100644
index 0000000000..35de2f33eb
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/release.json
@@ -0,0 +1,147 @@
+{
+ "action": "published",
+ "release": {
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438",
+ "assets_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases/1261438/assets",
+ "upload_url": "https://uploads.github.com/repos/baxterthehacker/public-repo/releases/1261438/assets{?name}",
+ "html_url": "https://github.com/baxterthehacker/public-repo/releases/tag/0.0.1",
+ "id": 1261438,
+ "tag_name": "0.0.1",
+ "target_commitish": "master",
+ "name": null,
+ "draft": false,
+ "author": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "prerelease": false,
+ "created_at": "2015-05-05T23:40:12Z",
+ "published_at": "2015-05-05T23:40:38Z",
+ "assets": [
+ ],
+ "tarball_url": "https://api.github.com/repos/baxterthehacker/public-repo/tarball/0.0.1",
+ "zipball_url": "https://api.github.com/repos/baxterthehacker/public-repo/zipball/0.0.1",
+ "body": null
+ },
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:38Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/repository.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/repository.json
new file mode 100644
index 0000000000..d22386c3f2
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/repository.json
@@ -0,0 +1,119 @@
+{
+ "action": "created",
+ "repository": {
+ "id": 27496774,
+ "name": "new-repository",
+ "full_name": "baxterandthehackers/new-repository",
+ "owner": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "private": true,
+ "html_url": "https://github.com/baxterandthehackers/new-repository",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterandthehackers/new-repository",
+ "forks_url": "https://api.github.com/repos/baxterandthehackers/new-repository/forks",
+ "keys_url": "https://api.github.com/repos/baxterandthehackers/new-repository/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterandthehackers/new-repository/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterandthehackers/new-repository/teams",
+ "hooks_url": "https://api.github.com/repos/baxterandthehackers/new-repository/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterandthehackers/new-repository/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterandthehackers/new-repository/events",
+ "assignees_url": "https://api.github.com/repos/baxterandthehackers/new-repository/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterandthehackers/new-repository/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterandthehackers/new-repository/tags",
+ "blobs_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterandthehackers/new-repository/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterandthehackers/new-repository/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterandthehackers/new-repository/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterandthehackers/new-repository/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterandthehackers/new-repository/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterandthehackers/new-repository/subscription",
+ "commits_url": "https://api.github.com/repos/baxterandthehackers/new-repository/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterandthehackers/new-repository/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterandthehackers/new-repository/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/new-repository/issues/comments/{number}",
+ "contents_url": "https://api.github.com/repos/baxterandthehackers/new-repository/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterandthehackers/new-repository/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterandthehackers/new-repository/merges",
+ "archive_url": "https://api.github.com/repos/baxterandthehackers/new-repository/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterandthehackers/new-repository/downloads",
+ "issues_url": "https://api.github.com/repos/baxterandthehackers/new-repository/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterandthehackers/new-repository/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterandthehackers/new-repository/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterandthehackers/new-repository/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterandthehackers/new-repository/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterandthehackers/new-repository/releases{/id}",
+ "created_at": "2014-12-03T16:39:25Z",
+ "updated_at": "2014-12-03T16:39:25Z",
+ "pushed_at": "2014-12-03T16:39:25Z",
+ "git_url": "git://github.com/baxterandthehackers/new-repository.git",
+ "ssh_url": "git@github.com:baxterandthehackers/new-repository.git",
+ "clone_url": "https://github.com/baxterandthehackers/new-repository.git",
+ "svn_url": "https://github.com/baxterandthehackers/new-repository",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "organization": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "url": "https://api.github.com/orgs/baxterandthehackers",
+ "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/orgs/baxterandthehackers/events",
+ "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=2"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=2",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/status.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/status.json
new file mode 100644
index 0000000000..82f5a09967
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/status.json
@@ -0,0 +1,205 @@
+{
+ "id": 214015194,
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "name": "baxterthehacker/public-repo",
+ "target_url": null,
+ "context": "default",
+ "description": null,
+ "state": "success",
+ "commit": {
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "commit": {
+ "author": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com",
+ "date": "2015-05-05T23:40:12Z"
+ },
+ "committer": {
+ "name": "baxterthehacker",
+ "email": "baxterthehacker@users.noreply.github.com",
+ "date": "2015-05-05T23:40:12Z"
+ },
+ "message": "Initial commit",
+ "tree": {
+ "sha": "02b49ad0ba4f1acd9f06531b21e16a4ac5d341d0",
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees/02b49ad0ba4f1acd9f06531b21e16a4ac5d341d0"
+ },
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "comment_count": 1
+ },
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "html_url": "https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b/comments",
+ "author": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "committer": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "parents": [
+ ]
+ },
+ "branches": [
+ {
+ "name": "master",
+ "commit": {
+ "sha": "9049f1265b7d61be4a8904a9a27120d2064dab3b",
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/9049f1265b7d61be4a8904a9a27120d2064dab3b"
+ }
+ },
+ {
+ "name": "changes",
+ "commit": {
+ "sha": "0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c",
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c"
+ }
+ },
+ {
+ "name": "gh-pages",
+ "commit": {
+ "sha": "b11bb7545ac14abafc6191a0481b0d961e7793c6",
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo/commits/b11bb7545ac14abafc6191a0481b0d961e7793c6"
+ }
+ }
+ ],
+ "created_at": "2015-05-05T23:40:39Z",
+ "updated_at": "2015-05-05T23:40:39Z",
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:39Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/team_add.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/team_add.json
new file mode 100644
index 0000000000..bd4256bc07
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/team_add.json
@@ -0,0 +1,129 @@
+{
+ "team": {
+ "name": "github",
+ "id": 836012,
+ "slug": "github",
+ "description": "",
+ "permission": "pull",
+ "url": "https://api.github.com/teams/836012",
+ "members_url": "https://api.github.com/teams/836012/members{/member}",
+ "repositories_url": "https://api.github.com/teams/836012/repos"
+ },
+ "repository": {
+ "id": 35129393,
+ "name": "public-repo",
+ "full_name": "baxterandthehackers/public-repo",
+ "owner": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterandthehackers/public-repo",
+ "description": "",
+ "fork": true,
+ "url": "https://api.github.com/repos/baxterandthehackers/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterandthehackers/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterandthehackers/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterandthehackers/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterandthehackers/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterandthehackers/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterandthehackers/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterandthehackers/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterandthehackers/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterandthehackers/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterandthehackers/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterandthehackers/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterandthehackers/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterandthehackers/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterandthehackers/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterandthehackers/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterandthehackers/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterandthehackers/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterandthehackers/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterandthehackers/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterandthehackers/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterandthehackers/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterandthehackers/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:30Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterandthehackers/public-repo.git",
+ "ssh_url": "git@github.com:baxterandthehackers/public-repo.git",
+ "clone_url": "https://github.com/baxterandthehackers/public-repo.git",
+ "svn_url": "https://github.com/baxterandthehackers/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": false,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 0,
+ "open_issues": 0,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "organization": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "url": "https://api.github.com/orgs/baxterandthehackers",
+ "repos_url": "https://api.github.com/orgs/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/orgs/baxterandthehackers/events",
+ "members_url": "https://api.github.com/orgs/baxterandthehackers/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/baxterandthehackers/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "description": null
+ },
+ "sender": {
+ "login": "baxterandthehackers",
+ "id": 7649605,
+ "avatar_url": "https://avatars.githubusercontent.com/u/7649605?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterandthehackers",
+ "html_url": "https://github.com/baxterandthehackers",
+ "followers_url": "https://api.github.com/users/baxterandthehackers/followers",
+ "following_url": "https://api.github.com/users/baxterandthehackers/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterandthehackers/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterandthehackers/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterandthehackers/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterandthehackers/orgs",
+ "repos_url": "https://api.github.com/users/baxterandthehackers/repos",
+ "events_url": "https://api.github.com/users/baxterandthehackers/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterandthehackers/received_events",
+ "type": "Organization",
+ "site_admin": false
+ }
+}
diff --git a/src/test/resources/org/kohsuke/github/GHEventPayloadTest/watch.json b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/watch.json
new file mode 100644
index 0000000000..88bc71d0ab
--- /dev/null
+++ b/src/test/resources/org/kohsuke/github/GHEventPayloadTest/watch.json
@@ -0,0 +1,109 @@
+{
+ "action": "started",
+ "repository": {
+ "id": 35129377,
+ "name": "public-repo",
+ "full_name": "baxterthehacker/public-repo",
+ "owner": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/baxterthehacker/public-repo",
+ "description": "",
+ "fork": false,
+ "url": "https://api.github.com/repos/baxterthehacker/public-repo",
+ "forks_url": "https://api.github.com/repos/baxterthehacker/public-repo/forks",
+ "keys_url": "https://api.github.com/repos/baxterthehacker/public-repo/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/baxterthehacker/public-repo/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/baxterthehacker/public-repo/teams",
+ "hooks_url": "https://api.github.com/repos/baxterthehacker/public-repo/hooks",
+ "issue_events_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/baxterthehacker/public-repo/events",
+ "assignees_url": "https://api.github.com/repos/baxterthehacker/public-repo/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/baxterthehacker/public-repo/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/tags",
+ "blobs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/baxterthehacker/public-repo/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/baxterthehacker/public-repo/languages",
+ "stargazers_url": "https://api.github.com/repos/baxterthehacker/public-repo/stargazers",
+ "contributors_url": "https://api.github.com/repos/baxterthehacker/public-repo/contributors",
+ "subscribers_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscribers",
+ "subscription_url": "https://api.github.com/repos/baxterthehacker/public-repo/subscription",
+ "commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/baxterthehacker/public-repo/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/baxterthehacker/public-repo/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/baxterthehacker/public-repo/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/baxterthehacker/public-repo/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/baxterthehacker/public-repo/merges",
+ "archive_url": "https://api.github.com/repos/baxterthehacker/public-repo/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/baxterthehacker/public-repo/downloads",
+ "issues_url": "https://api.github.com/repos/baxterthehacker/public-repo/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/baxterthehacker/public-repo/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/baxterthehacker/public-repo/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/baxterthehacker/public-repo/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/baxterthehacker/public-repo/labels{/name}",
+ "releases_url": "https://api.github.com/repos/baxterthehacker/public-repo/releases{/id}",
+ "created_at": "2015-05-05T23:40:12Z",
+ "updated_at": "2015-05-05T23:40:30Z",
+ "pushed_at": "2015-05-05T23:40:27Z",
+ "git_url": "git://github.com/baxterthehacker/public-repo.git",
+ "ssh_url": "git@github.com:baxterthehacker/public-repo.git",
+ "clone_url": "https://github.com/baxterthehacker/public-repo.git",
+ "svn_url": "https://github.com/baxterthehacker/public-repo",
+ "homepage": null,
+ "size": 0,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": null,
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": true,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 0,
+ "default_branch": "master"
+ },
+ "sender": {
+ "login": "baxterthehacker",
+ "id": 6752317,
+ "avatar_url": "https://avatars.githubusercontent.com/u/6752317?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/baxterthehacker",
+ "html_url": "https://github.com/baxterthehacker",
+ "followers_url": "https://api.github.com/users/baxterthehacker/followers",
+ "following_url": "https://api.github.com/users/baxterthehacker/following{/other_user}",
+ "gists_url": "https://api.github.com/users/baxterthehacker/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/baxterthehacker/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/baxterthehacker/subscriptions",
+ "organizations_url": "https://api.github.com/users/baxterthehacker/orgs",
+ "repos_url": "https://api.github.com/users/baxterthehacker/repos",
+ "events_url": "https://api.github.com/users/baxterthehacker/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/baxterthehacker/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}