Page MenuHomeDevCentral

D274.id642.diff
No OneTemporary

D274.id642.diff

diff --git a/app/Analyzers/GitHub/Events/CommitCommentEvent.php b/app/Analyzers/GitHub/Events/CommitCommentEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/CommitCommentEvent.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * CommitCommentEvent payload analyzer
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#commitcommentevent
+ */
+class CommitCommentEvent extends Event {
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ $comment = $this->payload->comment;
+
+ return trans(
+ 'GitHub.EventsDescriptions.CommitCommentEvent',
+ [
+ 'author' => $comment->user->login,
+ 'commit' => substr($comment->commit_id, 0, 8),
+ 'excerpt' => self::cut($comment->body),
+ ]
+ );
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ return $this->payload->comment->html_url;
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/CreateEvent.php b/app/Analyzers/GitHub/Events/CreateEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/CreateEvent.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * CreateEvent payload analyzer
+ *
+ * We don't support the repository ref type, as, according the documentation,
+ * "webhooks will not receive this event for created repositories".webhooks
+ *
+ * Another case when we won't receive the event is when at least four tags are
+ * pushed at once.
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#createevent
+ */
+class CreateEvent extends Event {
+
+ use WithRef;
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ $repository = $this->payload->repository->full_name;
+ $type = $this->payload->ref_type;
+ $ref = $this->payload->ref;
+
+ if (!self::isValidRefType($type)) {
+ return trans(
+ 'GitHub.EventsDescriptions.CreateEventUnknown',
+ [
+ 'type' => $type,
+ 'ref' => $ref,
+ ]
+ );
+ }
+
+ return trans(
+ 'GitHub.EventsDescriptions.CreateEvent',
+ [
+ 'type' => $type,
+ 'ref' => $ref,
+ 'repository' => $repository,
+ ]
+ );
+ }
+
+ /**
+ * Gets link segments for the type
+ *
+ * @return Array
+ * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
+ */
+ private function getLinkRefSegments () {
+ return [
+ 'tag' => '/releases/tag/',
+ 'branch' => '/tree/',
+ ];
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ $type = $this->payload->ref_type;
+ $ref = $this->payload->ref;
+
+ $url = $this->payload->repository->html_url;
+ $url .= $this->getLinkRefSegment($type);
+ $url .= $ref;
+
+ return $url;
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/DeleteEvent.php b/app/Analyzers/GitHub/Events/DeleteEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/DeleteEvent.php
@@ -0,0 +1,73 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * DeleteEvent payload analyzer
+ *
+ * Another case when we won't receive the event is when at least four tags are
+ * deleted at once.
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#deleteevent
+ */
+class DeleteEvent extends Event {
+
+ use WithRef;
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ $repository = $this->payload->repository->full_name;
+ $type = $this->payload->ref_type;
+ $ref = $this->payload->ref;
+
+ if (!self::isValidRefType($type)) {
+ return trans(
+ 'GitHub.EventsDescriptions.DeleteEventUnknown',
+ [
+ 'type' => $type,
+ 'ref' => $ref,
+ ]
+ );
+ }
+
+ return trans(
+ 'GitHub.EventsDescriptions.DeleteEvent',
+ [
+ 'type' => $type,
+ 'ref' => $ref,
+ 'repository' => $repository,
+ ]
+ );
+ }
+
+ /**
+ * Gets link segments for the type
+ *
+ * @return Array
+ * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
+ */
+ private function getLinkRefSegments () {
+ return [
+ 'tag' => '/tags',
+ 'branch' => '/branches',
+ ];
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ $type = $this->payload->ref_type;
+
+ $url = $this->payload->repository->html_url;
+ $url .= $this->getLinkRefSegment($type);
+
+ return $url;
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/Event.php b/app/Analyzers/GitHub/Events/Event.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/Event.php
@@ -0,0 +1,78 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+class Event {
+
+ ///
+ /// Properties
+ ///
+
+ /**
+ * The payload
+ *
+ * @var stdClass
+ */
+ protected $payload;
+
+ ///
+ /// Constructor
+ ///
+
+ public function __construct ($payload) {
+ $this->payload = $payload;
+ }
+
+ ///
+ /// Gets or initialize relevant class
+ ///
+
+ /**
+ * Gets class name from the GitHub webhooks event name
+ *
+ * @param string $eventName The event name (e.g. commit_comment)
+ * @return string The event class name (e.g. CommitCommentEvent)
+ */
+ public static function getClass ($eventName) {
+ return __NAMESPACE__ . '\\' . studly_case($eventName) . 'Event';
+ }
+
+ /**
+ * Gets an instance of the event class, from the
+ *
+ * @param string $eventName The event name (e.g. commit_comment)
+ * @return Event
+ */
+ public static function forPayload ($eventName, $payload) {
+ $class = self::getClass($eventName);
+ if (!class_exists($class)) {
+ throw new \InvalidArgumentException("Class doesn't exist: $class (for $eventName)");
+ }
+ return new $class($payload);
+ }
+
+ ///
+ /// Helper methods
+ ///
+
+ /**
+ * Cuts a text
+ *
+ * @param string $text The text to cut
+ * @param int $strLen The amount of characters to allow [optional]
+ * @param string $symbol The symbol to append to a cut text [optional]
+ */
+ public static function cut ($text, $strLen = 114, $symbol = '…') {
+ $len = strlen($text);
+ if ($len <= $strLen) {
+ return $text;
+ }
+
+ if ($strLen < 1) {
+ return $symbol;
+ }
+
+ return substr($text, 0, $strLen - 1) . $symbol;
+ }
+
+}
diff --git a/app/Analyzers/GitHub/Events/PingEvent.php b/app/Analyzers/GitHub/Events/PingEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/PingEvent.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * PingEvent payload analyzer
+ *
+ * @link https://developer.github.com/webhooks/#ping-event
+ */
+class PingEvent extends Event {
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ return trans(
+ 'GitHub.EventsDescriptions.PingEvent',
+ [
+ 'zen' => $this->payload->zen,
+ 'hook_id' => $this->payload->hook_id,
+ ]
+ );
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ return '';
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/PushEvent.php b/app/Analyzers/GitHub/Events/PushEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/PushEvent.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * PushEvent payload analyzer
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#pushevent
+ */
+class PushEvent extends Event {
+
+ use WithCommit;
+ use WithRepoAndBranch;
+
+ /**
+ * Gets the description message key according the amount of commits
+ *
+ * @param int $count The count of commits
+ * @return The l10n message key for description
+ */
+ private static function getDescriptionMessageKey ($count) {
+ $key = 'GitHub.EventsDescriptions.PushEvent';
+
+ if ($count === 0) {
+ return $key . '.0';
+ }
+
+ return $key . '.n';
+ }
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ $n = count($this->payload->commits);
+
+ if ($n === 1) {
+ // If only one commit is pushed at the time,
+ // we want a description for this commit.
+ return $this->getHeadCommitDescription();
+ }
+
+ // Otherwise, we want a description for the push.
+ return trans(self::getDescriptionMessageKey($n), [
+ 'user' => $this->payload->pusher->name,
+ 'count' => $n,
+ 'repoAndBranch' => $this->getWhere(),
+ ]);
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ $n = count($this->payload->commits);
+
+ if ($n === 1) {
+ return $this->payload->head_commit->url;
+ }
+
+ return $this->payload->compare;
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/RepositoryEvent.php b/app/Analyzers/GitHub/Events/RepositoryEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/RepositoryEvent.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * RepositoryEvent payload analyzer
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#repositoryevent
+ */
+class RepositoryEvent extends Event {
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ $message = trans('GitHub.EventsDescriptions.RepositoryEvent', [
+ 'repository' => $this->payload->repository->full_name,
+ ]);
+
+ if ($this->payload->repository->fork) {
+ $message .= trans('GitHub.EventsDescriptions.RepositoryEventFork');
+ }
+
+ if ($description = $this->payload->repository->description) {
+ $message .= trans('GitHub.Separator');
+ $message .= $description;
+ }
+
+ return $message;
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ return $this->payload->repository->html_url;
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/StatusEvent.php b/app/Analyzers/GitHub/Events/StatusEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/StatusEvent.php
@@ -0,0 +1,65 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * StatusEvent payload analyzer
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#statusevent
+ */
+class StatusEvent extends Event {
+
+ /**
+ * Gets state localized message
+ *
+ * @return string
+ */
+ private function getState () {
+ $state = $this->payload->state; // pending, success, failure, or error
+ $key = 'GitHub.StatusEventState.' . $state;
+ return trans($key);
+ }
+
+ /**
+ * Gets status result
+ *
+ * @return string
+ */
+ private function getStatusResult () {
+ $glue = trans('GitHub.Separator');
+ $fragments = array_filter([
+ $this->payload->context,
+ $this->payload->description,
+ $this->getState(),
+ ]);
+
+ return implode($glue, $fragments);
+ }
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ return trans('GitHub.EventsDescriptions.StatusEvent', [
+ 'commit' => substr($this->payload->sha, 0, 8),
+ 'status' => $this->getStatusResult(),
+ ]);
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ $url = $this->payload->target_url;
+
+ if ($url === null) {
+ return "";
+ }
+
+ return $url;
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/UnknownEvent.php b/app/Analyzers/GitHub/Events/UnknownEvent.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/UnknownEvent.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * Unknown event payload analyzer
+ */
+class UnknownEvent extends Event {
+
+ /**
+ * @var string
+ */
+ private $eventType;
+
+ /**
+ * Initializes a new instance of the UnknownEvent class, an Event analyzer
+ * class to handle unknown events type.
+ *
+ * @param string $eventType The event type (e.g. push)
+ */
+ public function __construct ($eventType, $payload = null) {
+ $this->eventType = $eventType;
+ parent::__construct($payload);
+ }
+
+ /**
+ * Gets description for the payload
+ *
+ * @return string
+ */
+ public function getDescription () {
+ return "Some $this->eventType happened";
+ }
+
+ /**
+ * Gets link for the payload
+ *
+ * @return string
+ */
+ public function getLink () {
+ return "";
+ }
+}
diff --git a/app/Analyzers/GitHub/Events/WithCommit.php b/app/Analyzers/GitHub/Events/WithCommit.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/WithCommit.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * Helper methods for events with a need to specify commit information
+ * (e.g. push)
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#pushevent
+ */
+trait WithCommit {
+
+ /**
+ * Gets the title of the head commit
+ *
+ * @return string
+ */
+ private function getHeadCommitTitle () {
+ return static::getCommitTitle($this->payload->head_commit->message);
+ }
+
+ /**
+ * Extracts the commit title from the whole commit message.
+ *
+ * @param string $message The commit message
+ * @return string The commit title
+ */
+ public static function getCommitTitle ($message) {
+ // Discards extra lines
+ $pos = strpos($message, "\n");
+ if ($pos > 0) {
+ $message = substr($message, 0, $pos);
+ }
+
+ // Short messages are returned as is
+ // Longer messages are truncated
+ return self::cut($message, 72);
+ }
+
+ /**
+ * Gets the description text for the head commit.
+ *
+ * @return string
+ */
+ private function getHeadCommitDescription () {
+ $commit = $this->payload->head_commit;
+ $committer = $commit->committer->username;
+ $author = $commit->author->username;
+
+ $message = trans('GitHub.Commits.Message', [
+ 'committer' => $committer,
+ 'title' => $this->getHeadCommitTitle(),
+ ]);
+
+ if ($committer !== $author) {
+ $message .= trans('GitHub.Commits.Authored', [
+ 'author' => $author,
+ ]);
+ }
+
+ return $message;
+ }
+
+}
diff --git a/app/Analyzers/GitHub/Events/WithRef.php b/app/Analyzers/GitHub/Events/WithRef.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/WithRef.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * References helper methods for events using ref and ref_type fields.
+ * (e.g. create and delete)
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#createevent
+ * @link https://developer.github.com/v3/activity/events/types/#deleteevent
+ */
+trait WithRef {
+
+ /**
+ * Determines if the ref type is valid.
+ *
+ * The ref type 'repository' is deemed invalid, as we shouldn't receive it.
+ *
+ * @param string $type The ref type to check
+ * @return bool true if the ref type id valid; otheriwse, false
+ */
+ protected static function isValidRefType ($type) {
+ $types = ['branch', 'tag'];
+ return in_array($type, $types);
+ }
+
+ /**
+ * Gets link ref segment for the payload
+ *
+ * @param string $type The reference type
+ * @return string the part of the URL for this reference type (e.g. /tree/)
+ */
+ protected function getLinkRefSegment ($type) {
+ $segments = $this->getLinkRefSegments();
+
+ if (!array_key_exists($type, $segments)) {
+ throw new \InvalidArgumentException;
+ }
+
+ return $segments[$type];
+ }
+
+}
diff --git a/app/Analyzers/GitHub/Events/WithRepoAndBranch.php b/app/Analyzers/GitHub/Events/WithRepoAndBranch.php
new file mode 100644
--- /dev/null
+++ b/app/Analyzers/GitHub/Events/WithRepoAndBranch.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Nasqueron\Notifications\Analyzers\GitHub\Events;
+
+/**
+ * Helper methods for events with a need to specify the repo and the branch
+ * (e.g. push)
+ *
+ * @link https://developer.github.com/v3/activity/events/types/#pushevent
+ */
+trait WithRepoAndBranch {
+
+ /**
+ * Gets repository and branch information
+ *
+ * @return string
+ */
+ public function getWhere () {
+ $repo = $this->payload->repository->name;
+ $branch = $this->payload->ref;
+
+ return static::getRepositoryAndBranch($repo, $branch);
+ }
+
+ /**
+ * Gets a repository and branch information string
+ *
+ * @param string $repo The repository
+ * @param string $branch The branch
+ * @return string "<repo>" or "<repo> (branch <branch>)" when branch isn't master
+ */
+ public static function getRepositoryAndBranch ($repo = "", $branch = "") {
+ if ($repo === "") {
+ return "";
+ }
+
+ if (starts_with($branch, "refs/heads/")) {
+ $branch = substr($branch, 11);
+ }
+
+ if ($branch === "" || $branch === "master") {
+ return $repo;
+ }
+
+ return trans('GitHub.RepoAndBranch', [
+ 'repo' => $repo,
+ 'branch' => $branch,
+ ]);
+ }
+
+}
diff --git a/app/Analyzers/GitHub/GitHubPayloadAnalyzer.php b/app/Analyzers/GitHub/GitHubPayloadAnalyzer.php
--- a/app/Analyzers/GitHub/GitHubPayloadAnalyzer.php
+++ b/app/Analyzers/GitHub/GitHubPayloadAnalyzer.php
@@ -2,6 +2,9 @@
namespace Nasqueron\Notifications\Analyzers\GitHub;
+use Nasqueron\Notifications\Analyzers\GitHub\Events\Event;
+use Nasqueron\Notifications\Analyzers\GitHub\Events\UnknownEvent;
+
use Config;
use Storage;
@@ -28,13 +31,19 @@
*/
private $payload;
-
/**
* The configuration for the payload analyzer
- * @var GitHubPayloadAnalyzerConfiguration;
+ * @var Event;
*/
private $configuration;
+ /**
+ * The payload analyzer event
+ *
+ * @var Nasqueron\Notifications\Analyzers\GitHub\Events\Event;
+ */
+ private $analyzerEvent;
+
///
/// Constructor
///
@@ -56,6 +65,12 @@
$this->payload = $payload;
$this->loadConfiguration($project);
+
+ try {
+ $this->analyzerEvent = Event::forPayload($event, $payload);
+ } catch (\InvalidArgumentException $ex) {
+ $this->analyzerEvent = new UnknownEvent($event);
+ }
}
///
@@ -142,146 +157,12 @@
///
/**
- * Gets repository and branch information
- *
- * @return string
- */
- public function getWhere () {
- $repo = $this->payload->repository->name;
- $branch = $this->payload->ref;
- return static::getRepositoryAndBranch($repo, $branch);
- }
-
- /**
- * Gets a repository and branch information string
- *
- * @param string $repo The repository
- * @param string $branch The branch
- * @return string "<repo>" or "<repo> (branch <branch>)" when branch isn't master
- */
- public static function getRepositoryAndBranch ($repo = "", $branch = "") {
- if ($repo === "") {
- return "";
- }
-
- if (starts_with($branch, "refs/heads/")) {
- $branch = substr($branch, 11);
- }
-
- if ($branch === "" || $branch === "master") {
- return $repo;
- }
-
- return "$repo (branch $branch)";
- }
-
- /**
- * Gets the title of the head commit
- *
- * @return string
- */
- private function getHeadCommitTitle () {
- return static::getCommitTitle($this->payload->head_commit->message);
- }
-
- /**
- * Extracts the commit title from the whole commit message.
- *
- * @param string $message The commit message
- * @return string The commit title
- */
- public static function getCommitTitle ($message) {
- // Discards extra lines
- $pos = strpos($message, "\n");
- if ($pos > 0) {
- $message = substr($message, 0, $pos);
- }
-
- // Short messages are returned as is
- $len = strlen($message);
- if ($len <= 72) {
- return $message;
- }
-
- // Longer messages are truncated
- return substr($message, 0, 71) . '…';
- }
-
- /**
- * Gets the description text for the head commit.
- *
- * @return string
- */
- private function getHeadCommitDescription () {
- $commit = $this->payload->head_commit;
- $title = $this->getHeadCommitTitle();
- $committer = $commit->committer->username;
- $author = $commit->author->username;
-
- $message = "$committer committed $title";
- if ($committer !== $author) {
- $message .= " (authored by $author)";
- }
-
- return $message;
- }
-
- /**
* Gets a short textual description of the event
*
* @return string
*/
public function getDescription () {
- switch ($this->event) {
- case "create":
- $repository = $this->payload->repository->full_name;
- $type = $this->payload->ref_type;
- $ref = $this->payload->ref;
-
- if ($type === "tag" || $type === "branch") {
- return "New $type on $repository: $ref";
- }
-
- return "Unknown create: $type $ref";
-
- case "ping":
- $quote = $this->payload->zen;
- return "« $quote » — GitHub Webhooks ping zen aphorism.";
-
- case "push":
- $n = count($this->payload->commits);
- if ($n === 1) {
- return $this->getHeadCommitDescription();
- }
-
- $repoAndBranch = $this->getWhere();
- $user = $this->payload->pusher->name;
-
- if ($n === 0) {
- return "$user forcely updated $repoAndBranch";
- }
-
- return "$user pushed $n commits to $repoAndBranch";
-
- case "repository":
- $repository = $this->payload->repository->full_name;
- $message = "New repository $repository";
- if ($this->payload->repository->fork) {
- $message .= " (fork)";
- }
- if ($description = $this->payload->repository->description) {
- $message .= " — $description";
- }
- return $message;
-
- case "status":
- return $this->payload->description
- . " — "
- . $this->payload->context;
-
- default:
- return "Some $this->event happened";
- }
+ return $this->analyzerEvent->getDescription();
}
/**
@@ -290,35 +171,6 @@
* @return string The most relevant URL
*/
public function getLink () {
- switch ($this->event) {
- case "create":
- $type = $this->payload->ref_type;
- $ref = $this->payload->ref;
- $url = $this->payload->repository->html_url;
-
- if ($type === "tag") {
- $url .= "/releases/tag/" . $ref;
- } elseif ($type === "branch") {
- $url .= "/tree/" . $ref;
- }
-
- return $url;
-
- case "push":
- $n = count($this->payload->commits);
- if ($n === 1) {
- return $this->payload->head_commit->url;
- }
- return $this->payload->compare;
-
- case "repository":
- return $this->payload->repository->html_url;
-
- case "status":
- return $this->payload->target_url;
-
- default:
- return "";
- }
+ return $this->analyzerEvent->getLink();
}
}
diff --git a/resources/lang/en/GitHub.php b/resources/lang/en/GitHub.php
new file mode 100644
--- /dev/null
+++ b/resources/lang/en/GitHub.php
@@ -0,0 +1,53 @@
+<?php
+
+return [
+
+ /*
+ |--------------------------------------------------------------------------
+ | GitHub notifications messages
+ |--------------------------------------------------------------------------
+ |
+ | The following language lines are used to localize notifications for events
+ | fired by GitHub
+ |
+ */
+
+ 'Separator' => ' — ',
+
+ 'Commits' => [
+ 'Message' => ':committer committed :title',
+ 'Authored' => ' (authored by :author)', // appended to Message
+ ],
+
+ 'RepoAndBranch' => ':repo (branch :branch)',
+
+ 'EventsDescriptions' => [
+ 'CommitCommentEvent' => ':author added a comment to :commit: :excerpt',
+
+ 'CreateEvent' => 'New :type on :repository: :ref',
+ 'CreateEventUnknown' => 'Unknown create reference: :type :ref',
+
+ 'DeleteEvent' => 'Removed :type on :repository: :ref',
+ 'DeleteEventUnknown' => 'Unknown delete reference: :type :ref',
+
+ 'PingEvent' => '« :zen » — GitHub Webhooks ping zen aphorism.',
+
+ 'PushEvent' => [
+ '0' => ':user forcely updated :repoAndBranch',
+ 'n' => ':user pushed :count commits to :repoAndBranch', // n > 1
+ ],
+
+ 'RepositoryEvent' => 'New repository :repository',
+ 'RepositoryEventFork' => ' (fork)',
+
+ 'StatusEvent' => 'Status of :commit: :status',
+ ],
+
+ 'StatusEventState' => [
+ 'pending' => 'pending',
+ 'success' => 'success',
+ 'failure' => 'failure',
+ 'error' => 'error',
+ ],
+
+];
diff --git a/tests/Analyzers/GitHub/Events/CreateEventTest.php b/tests/Analyzers/GitHub/Events/CreateEventTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Analyzers/GitHub/Events/CreateEventTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Analyzers\GitHub\Events;
+
+use Nasqueron\Notifications\Analyzers\GitHub\Events\CreateEvent;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class CreateEventTest extends TestCase {
+ /**
+ * @var CreateEvent
+ */
+ private $event;
+
+ public function setUp () {
+ $payload = new \stdClass;
+ $payload->repository = new \stdClass;
+ $payload->repository->full_name = 'baxterthehacker/public-repo';
+ $payload->repository->html_url = 'https://github.com/baxterthehacker/public-repo';
+ $payload->ref_type = 'bookmark';
+ $payload->ref = 'quux';
+
+ $this->event = new CreateEvent($payload);
+
+ parent::setUp();
+ }
+
+ public function testNonExistingRefType () {
+ $this->assertSame(
+ "Unknown create reference: bookmark quux",
+ $this->event->getDescription()
+ );
+ }
+
+ /**
+ * @expectedException InvalidArgumentException
+ */
+ public function testNonExistingRefTypeLinkException () {
+ $this->event->getLink();
+ }
+
+}
diff --git a/tests/Analyzers/GitHub/Events/DeleteEventTest.php b/tests/Analyzers/GitHub/Events/DeleteEventTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Analyzers/GitHub/Events/DeleteEventTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Analyzers\GitHub\Events;
+
+use Nasqueron\Notifications\Analyzers\GitHub\Events\DeleteEvent;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class DeleteEventTest extends TestCase {
+ /**
+ * @var DeleteEvent
+ */
+ private $event;
+
+ public function setUp () {
+ $payload = new \stdClass;
+ $payload->repository = new \stdClass;
+ $payload->repository->full_name = 'baxterthehacker/public-repo';
+ $payload->repository->html_url = 'https://github.com/baxterthehacker/public-repo';
+ $payload->ref_type = 'bookmark';
+ $payload->ref = 'quux';
+
+ $this->event = new DeleteEvent($payload);
+
+ parent::setUp();
+ }
+
+ public function testNonExistingRefType () {
+ $this->assertSame(
+ "Unknown delete reference: bookmark quux",
+ $this->event->getDescription()
+ );
+ }
+
+ /**
+ * @expectedException InvalidArgumentException
+ */
+ public function testNonExistingRefTypeLinkException () {
+ $this->event->getLink();
+ }
+
+}
diff --git a/tests/Analyzers/GitHub/Events/EventTest.php b/tests/Analyzers/GitHub/Events/EventTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Analyzers/GitHub/Events/EventTest.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Analyzers\GitHub\Events;
+
+use Nasqueron\Notifications\Analyzers\GitHub\Events\Event;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class EventTest extends TestCase {
+
+ public function testGetClass () {
+ $this->assertSame(
+ 'Nasqueron\Notifications\Analyzers\GitHub\Events\CommitCommentEvent',
+ Event::getClass('commit_comment')
+ );
+ }
+
+ public function testForPayload () {
+ $this->assertInstanceOf(
+ 'Nasqueron\Notifications\Analyzers\GitHub\Events\CommitCommentEvent',
+ Event::forPayload('commit_comment', new \stdClass)
+ );
+ }
+
+ /**
+ * @expectedException InvalidArgumentException
+ */
+ public function testForPayloadWithException () {
+ Event::forPayload('not_existing', new \stdClass);
+ }
+
+ public function testCut () {
+ $this->assertSame('', Event::cut(''));
+ $this->assertSame('', Event::cut('', 0));
+ $this->assertSame('…', Event::cut('Lorem ipsum dolor', 0));
+ $this->assertSame('Lorem…', Event::cut('Lorem ipsum dolor', 6));
+ $this->assertSame('Lorem ipsum dolor', Event::cut('Lorem ipsum dolor'));
+ }
+
+ /**
+ * @dataProvider payloadDescriptionProvider
+ */
+ public function testGetDescriptionAndLink ($eventName,
+ $expectedDescription,
+ $expectedLink) {
+ $filename = __DIR__ . "/../../../data/payloads/GitHubEvents/$eventName.json";
+ $payload = json_decode(file_get_contents($filename));
+ $event = Event::forPayload($eventName, $payload);
+
+ $this->assertSame($expectedDescription, $event->getDescription());
+ $this->assertSame($expectedLink, $event->getLink());
+ }
+
+ public function payloadDescriptionProvider () {
+ return [
+ 'CommitCommentEvent' => [
+ 'commit_comment',
+ 'baxterthehacker added a comment to 9049f126: This is a really good change! :+1:',
+ 'https://github.com/baxterthehacker/public-repo/commit/9049f1265b7d61be4a8904a9a27120d2064dab3b#commitcomment-11056394'
+ ],
+ 'CreateEvent' => [
+ 'create',
+ 'New tag on baxterthehacker/public-repo: 0.0.1',
+ 'https://github.com/baxterthehacker/public-repo/releases/tag/0.0.1'
+ ],
+ 'DeleteEvent' => [
+ 'delete',
+ 'Removed tag on baxterthehacker/public-repo: simple-tag',
+ 'https://github.com/baxterthehacker/public-repo/tags'
+ ],
+ 'PushEvent' => [
+ 'push',
+ 'baxterthehacker committed Update README.md',
+ 'https://github.com/baxterthehacker/public-repo/commit/0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c'
+ ],
+ 'RepositoryEvent' => [
+ 'repository',
+ 'New repository baxterandthehackers/new-repository',
+ 'https://github.com/baxterandthehackers/new-repository'
+ ],
+ 'StatusEvent' => [
+ 'status',
+ 'Status of 9049f126: default — success',
+ ''
+ ],
+ ];
+ }
+
+}
diff --git a/tests/Analyzers/GitHub/Events/PushEventTest.php b/tests/Analyzers/GitHub/Events/PushEventTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Analyzers/GitHub/Events/PushEventTest.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Analyzers\GitHub\Events;
+
+use Nasqueron\Notifications\Analyzers\GitHub\Events\PushEvent;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class PushEventTest extends TestCase {
+
+ /**
+ * @var stdClass[]
+ */
+ private $payloads;
+
+ public function setUp () {
+ $payloadsToPrepare = [
+ '0' => 'DockerHubPushForceZeroPayload.json',
+ '1' => 'GitHubEvents/push.json',
+ 'n' => 'DockerHubPushSeveralCommitsPayload.json',
+ ];
+
+ foreach ($payloadsToPrepare as $key => $filename) {
+ $filename = __DIR__ . "/../../../data/payloads/" . $filename;
+ $this->payloads[$key] = json_decode(file_get_contents($filename));
+ }
+
+ parent::setUp();
+ }
+
+ ///
+ /// WithCommit trait
+ ///
+
+ public function testWhenTheCommitterAndAuthorAreDifferent () {
+ $payload = clone $this->payloads['1'];
+ $payload->head_commit->author->username = "Skrunge";
+ $event = new PushEvent($payload);
+
+ $this->assertSame(
+ "baxterthehacker committed Update README.md (authored by Skrunge)",
+ $event->getDescription()
+ );
+ }
+
+ public function testOnGitPushForce () {
+ $event = new PushEvent($this->payloads['0']);
+
+ $this->assertSame(
+ "dereckson forcely updated docker-nginx-php-fpm (branch novolume)",
+ $event->getDescription()
+ );
+ $this->assertContains("compare", $event->getLink());
+ }
+
+ public function testOnGitPushWithSeveralCommits () {
+ $event = new PushEvent($this->payloads['n']);
+
+ $this->assertSame(
+ "dereckson pushed 2 commits to notifications",
+ $event->getDescription()
+ );
+ $this->assertContains("compare", $event->getLink());
+ }
+}
diff --git a/tests/Analyzers/GitHub/Events/StatusEventTest.php b/tests/Analyzers/GitHub/Events/StatusEventTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Analyzers/GitHub/Events/StatusEventTest.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Analyzers\GitHub\Events;
+
+use Nasqueron\Notifications\Analyzers\GitHub\Events\StatusEvent;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class StatusEventTest extends TestCase {
+
+ /**
+ * @var stdClass
+ */
+ private $payload;
+
+ public function setUp () {
+ $filename = __DIR__ . "/../../../data/payloads/GitHubEvents/status.json";
+ $this->payload = json_decode(file_get_contents($filename));
+
+ parent::setUp();
+ }
+
+ public function testWhenStatusContainsUrl () {
+ $payload = clone $this->payload;
+ $payload->target_url = "http://www.perdu.com/";
+ $event = new StatusEvent($payload);
+
+ $this->assertSame(
+ "http://www.perdu.com/",
+ $event->getLink()
+ );
+ }
+
+}
diff --git a/tests/Analyzers/GitHub/Events/UnknownEventTest.php b/tests/Analyzers/GitHub/Events/UnknownEventTest.php
new file mode 100644
--- /dev/null
+++ b/tests/Analyzers/GitHub/Events/UnknownEventTest.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace Nasqueron\Notifications\Tests\Analyzers\GitHub\Events;
+
+use Nasqueron\Notifications\Analyzers\GitHub\Events\UnknownEvent;
+use Nasqueron\Notifications\Tests\TestCase;
+
+class UnknownEventTest extends TestCase {
+
+ /**
+ * @var Nasqueron\Notifications\Analyzers\GitHub\Events\UnknownEvent
+ */
+ private $event;
+
+ public function setUp () {
+ $filename = __DIR__ . "/../../../data/payloads/GitHubEvents/push.json";
+ $payload = json_decode(file_get_contents($filename));
+ $this->event = new UnknownEvent("quux", $payload);
+
+ parent::setUp();
+ }
+
+ public function testUnknownEvent () {
+ $this->assertInstanceOf("Nasqueron\Notifications\Analyzers\GitHub\Events\UnknownEvent", $this->event);
+ $this->assertSame("Some quux happened", $this->event->getDescription());
+ $this->assertEmpty($this->event->getLink());
+ }
+}
diff --git a/tests/Analyzers/GitHubPayloadAnalyzerTest.php b/tests/Analyzers/GitHubPayloadAnalyzerTest.php
--- a/tests/Analyzers/GitHubPayloadAnalyzerTest.php
+++ b/tests/Analyzers/GitHubPayloadAnalyzerTest.php
@@ -4,6 +4,7 @@
use Illuminate\Foundation\Testing\WithoutMiddleware;
+use Nasqueron\Notifications\Analyzers\GitHub\Events\PushEvent;
use Nasqueron\Notifications\Analyzers\GitHub\GitHubPayloadAnalyzer;
use Nasqueron\Notifications\Analyzers\GitHub\GitHubPayloadAnalyzerConfiguration;
use Nasqueron\Notifications\Tests\TestCase;
@@ -27,6 +28,8 @@
json_decode(file_get_contents($filename)),
new GitHubPayloadAnalyzerConfiguration()
);
+
+ parent::setUp();
}
/**
@@ -45,8 +48,8 @@
}
public function testGetCommitTitle () {
- $this->assertEquals("", GitHubPayloadAnalyzer::getCommitTitle(""));
- $this->assertEquals("Lorem ipsum dolor", GitHubPayloadAnalyzer::getCommitTitle("Lorem ipsum dolor"));
+ $this->assertEquals("", PushEvent::getCommitTitle(""));
+ $this->assertEquals("Lorem ipsum dolor", PushEvent::getCommitTitle("Lorem ipsum dolor"));
$longCommitMessages = [
"I was born in a water moon. Some people, especially its inhabitants, called it a planet, but as it was only a little over two hundred kilometres in diameter, 'moon' seems the more accurate term. The moon was made entirely of water, by which I mean it was a globe that not only had no land, but no rock either, a sphere with no solid core at all, just liquid water, all the way down to the very centre of the globe.",
@@ -56,21 +59,21 @@
foreach ($longCommitMessages as $longCommitMessage) {
$this->assertEquals(
$shortCommitTitle,
- GitHubPayloadAnalyzer::getCommitTitle($longCommitMessage)
+ PushEvent::getCommitTitle($longCommitMessage)
);
}
}
public function testGetRepositoryAndBranch () {
- $this->assertEquals("", GitHubPayloadAnalyzer::getRepositoryAndBranch("", "master"));
- $this->assertEquals("", GitHubPayloadAnalyzer::getRepositoryAndBranch("", "foo"));
- $this->assertEquals("quux", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "master"));
- $this->assertEquals("quux", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "refs/heads/master"));
- $this->assertEquals("quux", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", ""));
- $this->assertEquals("quux (branch foo)", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "refs/heads/foo"));
- $this->assertEquals("quux (branch feature/foo)", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "refs/heads/feature/foo"));
- $this->assertEquals("quux (branch feature/foo)", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "feature/foo"));
- $this->assertEquals("quux (branch foo)", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "foo"));
- $this->assertEquals("quux (branch 0)", GitHubPayloadAnalyzer::getRepositoryAndBranch("quux", "0"));
+ $this->assertEquals("", PushEvent::getRepositoryAndBranch("", "master"));
+ $this->assertEquals("", PushEvent::getRepositoryAndBranch("", "foo"));
+ $this->assertEquals("quux", PushEvent::getRepositoryAndBranch("quux", "master"));
+ $this->assertEquals("quux", PushEvent::getRepositoryAndBranch("quux", "refs/heads/master"));
+ $this->assertEquals("quux", PushEvent::getRepositoryAndBranch("quux", ""));
+ $this->assertEquals("quux (branch foo)", PushEvent::getRepositoryAndBranch("quux", "refs/heads/foo"));
+ $this->assertEquals("quux (branch feature/foo)", PushEvent::getRepositoryAndBranch("quux", "refs/heads/feature/foo"));
+ $this->assertEquals("quux (branch feature/foo)", PushEvent::getRepositoryAndBranch("quux", "feature/foo"));
+ $this->assertEquals("quux (branch foo)", PushEvent::getRepositoryAndBranch("quux", "foo"));
+ $this->assertEquals("quux (branch 0)", PushEvent::getRepositoryAndBranch("quux", "0"));
}
}
diff --git a/tests/data/payloads/DockerHubPushForceZeroPayload.json b/tests/data/payloads/DockerHubPushForceZeroPayload.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/DockerHubPushForceZeroPayload.json
@@ -0,0 +1,151 @@
+{
+ "ref": "refs/heads/novolume",
+ "before": "49a7de26af94aa588b7e85725274557001de72bf",
+ "after": "0e511ea84cd54567f0434d5fa7e684b66fc95209",
+ "created": false,
+ "deleted": false,
+ "forced": true,
+ "base_ref": null,
+ "compare": "https://github.com/nasqueron/docker-nginx-php-fpm/compare/49a7de26af94...0e511ea84cd5",
+ "commits": [
+
+ ],
+ "head_commit": {
+ "id": "0e511ea84cd54567f0434d5fa7e684b66fc95209",
+ "distinct": true,
+ "message": "Upgrade PHP to 5.6.18\n\nSummary: PHP 5.6.18 contains security fixes.\n\nTest Plan: `docker build`\n\nReviewers: dereckson\n\nSubscribers: #nasqueron_docker_deployment_squad, Kaliiixx\n\nProjects: #docker_images\n\nDifferential Revision: http://devcentral.nasqueron.org/D270",
+ "timestamp": "2016-02-05T02:56:53Z",
+ "url": "https://github.com/nasqueron/docker-nginx-php-fpm/commit/0e511ea84cd54567f0434d5fa7e684b66fc95209",
+ "author": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "committer": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "added": [
+
+ ],
+ "removed": [
+
+ ],
+ "modified": [
+ "Dockerfile"
+ ]
+ },
+ "repository": {
+ "id": 34274010,
+ "name": "docker-nginx-php-fpm",
+ "full_name": "nasqueron/docker-nginx-php-fpm",
+ "owner": {
+ "name": "nasqueron",
+ "email": ""
+ },
+ "private": false,
+ "html_url": "https://github.com/nasqueron/docker-nginx-php-fpm",
+ "description": "Docker image with Debian Jessie, PHP, nginx, php-fpm and runit",
+ "fork": false,
+ "url": "https://github.com/nasqueron/docker-nginx-php-fpm",
+ "forks_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/forks",
+ "keys_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/teams",
+ "hooks_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/hooks",
+ "issue_events_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/events",
+ "assignees_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/tags",
+ "blobs_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/languages",
+ "stargazers_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/stargazers",
+ "contributors_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/contributors",
+ "subscribers_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/subscribers",
+ "subscription_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/subscription",
+ "commits_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/merges",
+ "archive_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/downloads",
+ "issues_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/labels{/name}",
+ "releases_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/nasqueron/docker-nginx-php-fpm/deployments",
+ "created_at": 1429549282,
+ "updated_at": "2016-01-17T01:37:24Z",
+ "pushed_at": 1454641057,
+ "git_url": "git://github.com/nasqueron/docker-nginx-php-fpm.git",
+ "ssh_url": "git@github.com:nasqueron/docker-nginx-php-fpm.git",
+ "clone_url": "https://github.com/nasqueron/docker-nginx-php-fpm.git",
+ "svn_url": "https://github.com/nasqueron/docker-nginx-php-fpm",
+ "homepage": null,
+ "size": 30,
+ "stargazers_count": 2,
+ "watchers_count": 2,
+ "language": "PHP",
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 1,
+ "mirror_url": null,
+ "open_issues_count": 0,
+ "forks": 1,
+ "open_issues": 0,
+ "watchers": 2,
+ "default_branch": "master",
+ "stargazers": 2,
+ "master_branch": "master",
+ "organization": "nasqueron"
+ },
+ "pusher": {
+ "name": "dereckson",
+ "email": "dereckson@espace-win.org"
+ },
+ "organization": {
+ "login": "nasqueron",
+ "id": 5605546,
+ "url": "https://api.github.com/orgs/nasqueron",
+ "repos_url": "https://api.github.com/orgs/nasqueron/repos",
+ "events_url": "https://api.github.com/orgs/nasqueron/events",
+ "hooks_url": "https://api.github.com/orgs/nasqueron/hooks",
+ "issues_url": "https://api.github.com/orgs/nasqueron/issues",
+ "members_url": "https://api.github.com/orgs/nasqueron/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/nasqueron/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5605546?v=3",
+ "description": "Central hub of a budding community of creative people, writers, developers and thinkers."
+ },
+ "sender": {
+ "login": "dereckson",
+ "id": 135563,
+ "avatar_url": "https://avatars.githubusercontent.com/u/135563?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/dereckson",
+ "html_url": "https://github.com/dereckson",
+ "followers_url": "https://api.github.com/users/dereckson/followers",
+ "following_url": "https://api.github.com/users/dereckson/following{/other_user}",
+ "gists_url": "https://api.github.com/users/dereckson/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/dereckson/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/dereckson/subscriptions",
+ "organizations_url": "https://api.github.com/users/dereckson/orgs",
+ "repos_url": "https://api.github.com/users/dereckson/repos",
+ "events_url": "https://api.github.com/users/dereckson/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/dereckson/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/tests/data/payloads/DockerHubPushSeveralCommitsPayload.json b/tests/data/payloads/DockerHubPushSeveralCommitsPayload.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/DockerHubPushSeveralCommitsPayload.json
@@ -0,0 +1,200 @@
+{
+ "ref": "refs/heads/master",
+ "before": "aecf09db97cfc86cb2cb749ef2df35901162fe95",
+ "after": "a0b969672645a87e207fa25191732a42253a3603",
+ "created": false,
+ "deleted": false,
+ "forced": false,
+ "base_ref": null,
+ "compare": "https://github.com/nasqueron/notifications/compare/aecf09db97cf...a0b969672645",
+ "commits": [
+ {
+ "id": "de1c7bf32d714a94a1b4a351837a7817faace11d",
+ "distinct": true,
+ "message": "Tests for GitHubPayloadAnalyzerConfiguration",
+ "timestamp": "2015-12-07T15:45:27Z",
+ "url": "https://github.com/nasqueron/notifications/commit/de1c7bf32d714a94a1b4a351837a7817faace11d",
+ "author": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "committer": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "added": [
+ "tests/GitHubPayloadAnalyzerTest.php",
+ "tests/data/GitHubPayloadAnalyzer-Nasqueron.json"
+ ],
+ "removed": [
+
+ ],
+ "modified": [
+
+ ]
+ },
+ {
+ "id": "a0b969672645a87e207fa25191732a42253a3603",
+ "distinct": true,
+ "message": "Tidying and tests for RepositoryGroupMapping::doesRepositoryMatch\n\nLaravel provides a str_is helper function to check 'foo*' pattern,\nwe can so forget fnmatch (? is not really a wanted feature).\n\nAdded test, improved code comment.",
+ "timestamp": "2015-12-07T16:53:18Z",
+ "url": "https://github.com/nasqueron/notifications/commit/a0b969672645a87e207fa25191732a42253a3603",
+ "author": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "committer": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "added": [
+ "tests/RepositoryGroupMappingTest.php"
+ ],
+ "removed": [
+
+ ],
+ "modified": [
+ "app/Analyzers/RepositoryGroupMapping.php"
+ ]
+ }
+ ],
+ "head_commit": {
+ "id": "a0b969672645a87e207fa25191732a42253a3603",
+ "distinct": true,
+ "message": "Tidying and tests for RepositoryGroupMapping::doesRepositoryMatch\n\nLaravel provides a str_is helper function to check 'foo*' pattern,\nwe can so forget fnmatch (? is not really a wanted feature).\n\nAdded test, improved code comment.",
+ "timestamp": "2015-12-07T16:53:18Z",
+ "url": "https://github.com/nasqueron/notifications/commit/a0b969672645a87e207fa25191732a42253a3603",
+ "author": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "committer": {
+ "name": "Sébastien Santoro",
+ "email": "dereckson@espace-win.org",
+ "username": "dereckson"
+ },
+ "added": [
+ "tests/RepositoryGroupMappingTest.php"
+ ],
+ "removed": [
+
+ ],
+ "modified": [
+ "app/Analyzers/RepositoryGroupMapping.php"
+ ]
+ },
+ "repository": {
+ "id": 46330783,
+ "name": "notifications",
+ "full_name": "nasqueron/notifications",
+ "owner": {
+ "name": "nasqueron",
+ "email": ""
+ },
+ "private": false,
+ "html_url": "https://github.com/nasqueron/notifications",
+ "description": "Notifications center",
+ "fork": false,
+ "url": "https://github.com/nasqueron/notifications",
+ "forks_url": "https://api.github.com/repos/nasqueron/notifications/forks",
+ "keys_url": "https://api.github.com/repos/nasqueron/notifications/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/nasqueron/notifications/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/nasqueron/notifications/teams",
+ "hooks_url": "https://api.github.com/repos/nasqueron/notifications/hooks",
+ "issue_events_url": "https://api.github.com/repos/nasqueron/notifications/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/nasqueron/notifications/events",
+ "assignees_url": "https://api.github.com/repos/nasqueron/notifications/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/nasqueron/notifications/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/nasqueron/notifications/tags",
+ "blobs_url": "https://api.github.com/repos/nasqueron/notifications/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/nasqueron/notifications/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/nasqueron/notifications/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/nasqueron/notifications/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/nasqueron/notifications/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/nasqueron/notifications/languages",
+ "stargazers_url": "https://api.github.com/repos/nasqueron/notifications/stargazers",
+ "contributors_url": "https://api.github.com/repos/nasqueron/notifications/contributors",
+ "subscribers_url": "https://api.github.com/repos/nasqueron/notifications/subscribers",
+ "subscription_url": "https://api.github.com/repos/nasqueron/notifications/subscription",
+ "commits_url": "https://api.github.com/repos/nasqueron/notifications/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/nasqueron/notifications/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/nasqueron/notifications/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/nasqueron/notifications/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/nasqueron/notifications/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/nasqueron/notifications/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/nasqueron/notifications/merges",
+ "archive_url": "https://api.github.com/repos/nasqueron/notifications/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/nasqueron/notifications/downloads",
+ "issues_url": "https://api.github.com/repos/nasqueron/notifications/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/nasqueron/notifications/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/nasqueron/notifications/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/nasqueron/notifications/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/nasqueron/notifications/labels{/name}",
+ "releases_url": "https://api.github.com/repos/nasqueron/notifications/releases{/id}",
+ "created_at": 1447745790,
+ "updated_at": "2015-12-03T12:46:43Z",
+ "pushed_at": 1449507450,
+ "git_url": "git://github.com/nasqueron/notifications.git",
+ "ssh_url": "git@github.com:nasqueron/notifications.git",
+ "clone_url": "https://github.com/nasqueron/notifications.git",
+ "svn_url": "https://github.com/nasqueron/notifications",
+ "homepage": "",
+ "size": 88,
+ "stargazers_count": 0,
+ "watchers_count": 0,
+ "language": "PHP",
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": false,
+ "has_pages": false,
+ "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",
+ "organization": "nasqueron"
+ },
+ "pusher": {
+ "name": "dereckson",
+ "email": "dereckson@espace-win.org"
+ },
+ "organization": {
+ "login": "nasqueron",
+ "id": 5605546,
+ "url": "https://api.github.com/orgs/nasqueron",
+ "repos_url": "https://api.github.com/orgs/nasqueron/repos",
+ "events_url": "https://api.github.com/orgs/nasqueron/events",
+ "members_url": "https://api.github.com/orgs/nasqueron/members{/member}",
+ "public_members_url": "https://api.github.com/orgs/nasqueron/public_members{/member}",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5605546?v=3",
+ "description": "Central hub of a budding community of creative people, writers, developers and thinkers."
+ },
+ "sender": {
+ "login": "dereckson",
+ "id": 135563,
+ "avatar_url": "https://avatars.githubusercontent.com/u/135563?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/dereckson",
+ "html_url": "https://github.com/dereckson",
+ "followers_url": "https://api.github.com/users/dereckson/followers",
+ "following_url": "https://api.github.com/users/dereckson/following{/other_user}",
+ "gists_url": "https://api.github.com/users/dereckson/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/dereckson/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/dereckson/subscriptions",
+ "organizations_url": "https://api.github.com/users/dereckson/orgs",
+ "repos_url": "https://api.github.com/users/dereckson/repos",
+ "events_url": "https://api.github.com/users/dereckson/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/dereckson/received_events",
+ "type": "User",
+ "site_admin": false
+ }
+}
diff --git a/tests/data/payloads/GitHubEvents/commit_comment.json b/tests/data/payloads/GitHubEvents/commit_comment.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/GitHubEvents/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/tests/data/payloads/GitHubEvents/create.json b/tests/data/payloads/GitHubEvents/create.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/GitHubEvents/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/tests/data/payloads/GitHubEvents/delete.json b/tests/data/payloads/GitHubEvents/delete.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/GitHubEvents/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/tests/data/payloads/GitHubEvents/push.json b/tests/data/payloads/GitHubEvents/push.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/GitHubEvents/push.json
@@ -0,0 +1,161 @@
+{
+ "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",
+ "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",
+ "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
+ }
+}
\ No newline at end of file
diff --git a/tests/data/payloads/GitHubEvents/repository.json b/tests/data/payloads/GitHubEvents/repository.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/GitHubEvents/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/tests/data/payloads/GitHubEvents/status.json b/tests/data/payloads/GitHubEvents/status.json
new file mode 100644
--- /dev/null
+++ b/tests/data/payloads/GitHubEvents/status.json
@@ -0,0 +1,206 @@
+{
+ "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
+ }
+}

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 19, 12:23 (21 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2252480
Default Alt Text
D274.id642.diff (107 KB)

Event Timeline