Page MenuHomePhabricator

D15448.diff
No OneTemporary

D15448.diff

diff --git a/.arclint b/.arclint
--- a/.arclint
+++ b/.arclint
@@ -61,7 +61,19 @@
"type": "spelling"
},
"text": {
- "type": "text"
+ "type": "text",
+ "exclude": [
+ "(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json))"
+ ]
+ },
+ "text-without-length": {
+ "type": "text",
+ "include": [
+ "(^src/(.*/)?__tests__/[^/]+/.*\\.(txt|json))"
+ ],
+ "severity": {
+ "3": "disabled"
+ }
},
"xhpast": {
"type": "xhpast",
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1426,6 +1426,7 @@
'NuanceGitHubImportCursor' => 'applications/nuance/cursor/NuanceGitHubImportCursor.php',
'NuanceGitHubIssuesImportCursor' => 'applications/nuance/cursor/NuanceGitHubIssuesImportCursor.php',
'NuanceGitHubRawEvent' => 'applications/nuance/github/NuanceGitHubRawEvent.php',
+ 'NuanceGitHubRawEventTestCase' => 'applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php',
'NuanceGitHubRepositoryImportCursor' => 'applications/nuance/cursor/NuanceGitHubRepositoryImportCursor.php',
'NuanceGitHubRepositorySourceDefinition' => 'applications/nuance/source/NuanceGitHubRepositorySourceDefinition.php',
'NuanceImportCursor' => 'applications/nuance/cursor/NuanceImportCursor.php',
@@ -5687,6 +5688,7 @@
'NuanceGitHubImportCursor' => 'NuanceImportCursor',
'NuanceGitHubIssuesImportCursor' => 'NuanceGitHubImportCursor',
'NuanceGitHubRawEvent' => 'Phobject',
+ 'NuanceGitHubRawEventTestCase' => 'PhabricatorTestCase',
'NuanceGitHubRepositoryImportCursor' => 'NuanceGitHubImportCursor',
'NuanceGitHubRepositorySourceDefinition' => 'NuanceSourceDefinition',
'NuanceImportCursor' => 'Phobject',
diff --git a/src/applications/nuance/github/NuanceGitHubRawEvent.php b/src/applications/nuance/github/NuanceGitHubRawEvent.php
--- a/src/applications/nuance/github/NuanceGitHubRawEvent.php
+++ b/src/applications/nuance/github/NuanceGitHubRawEvent.php
@@ -30,14 +30,35 @@
switch ($this->getIssueRawKind()) {
case 'IssuesEvent':
- case 'IssuesCommentEvent':
return true;
+ case 'IssueCommentEvent':
+ if (!$this->getRawPullRequestData()) {
+ return true;
+ }
+ break;
}
return false;
}
public function isPullRequestEvent() {
+ if ($this->type == self::TYPE_ISSUE) {
+ // TODO: This is wrong, some of these are pull events.
+ return false;
+ }
+
+ $raw = $this->raw;
+
+ switch ($this->getIssueRawKind()) {
+ case 'PullRequestEvent':
+ return true;
+ case 'IssueCommentEvent':
+ if ($this->getRawPullRequestData()) {
+ return true;
+ }
+ break;
+ }
+
return false;
}
@@ -46,27 +67,71 @@
return null;
}
+ return $this->getRawIssueNumber();
+ }
+
+ public function getPullRequestNumber() {
+ if (!$this->isPullRequestEvent()) {
+ return null;
+ }
+
+ return $this->getRawIssueNumber();
+ }
+
+ private function getRepositoryFullRawName() {
$raw = $this->raw;
- if ($this->type == self::TYPE_ISSUE) {
- return idxv($raw, array('issue', 'number'));
+ $full = idxv($raw, array('repo', 'name'));
+ if (strlen($full)) {
+ return $full;
}
- if ($this->type == self::TYPE_REPOSITORY) {
- return idxv($raw, array('payload', 'issue', 'number'));
+ // For issue events, the repository is not identified explicitly in the
+ // response body. Parse it out of the URI.
+
+ $matches = null;
+ $ok = preg_match(
+ '(/repos/((?:[^/]+)/(?:[^/]+))/issues/events/)',
+ idx($raw, 'url'),
+ $matches);
+
+ if ($ok) {
+ return $matches[1];
}
return null;
}
- private function getRepositoryFullRawName() {
+ private function getIssueRawKind() {
$raw = $this->raw;
- return idxv($raw, array('repo', 'name'));
+ return idxv($raw, array('type'));
}
- private function getIssueRawKind() {
+ private function getRawIssueNumber() {
$raw = $this->raw;
- return idxv($raw, array('type'));
+
+ if ($this->type == self::TYPE_ISSUE) {
+ return idxv($raw, array('issue', 'number'));
+ }
+
+ if ($this->type == self::TYPE_REPOSITORY) {
+ $issue_number = idxv($raw, array('payload', 'issue', 'number'));
+ if ($issue_number) {
+ return $issue_number;
+ }
+
+ $pull_number = idxv($raw, array('payload', 'number'));
+ if ($pull_number) {
+ return $pull_number;
+ }
+ }
+
+ return null;
+ }
+
+ private function getRawPullRequestData() {
+ $raw = $this->raw;
+ return idxv($raw, array('payload', 'issue', 'pull_request'));
}
}
diff --git a/src/applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php b/src/applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php
@@ -0,0 +1,108 @@
+<?php
+
+final class NuanceGitHubRawEventTestCase
+ extends PhabricatorTestCase {
+
+ public function testIssueEvents() {
+ $path = dirname(__FILE__).'/issueevents/';
+
+ $cases = $this->readTestCases($path);
+
+ foreach ($cases as $name => $info) {
+ $input = $info['input'];
+ $expect = $info['expect'];
+
+ $event = NuanceGitHubRawEvent::newEvent(
+ NuanceGitHubRawEvent::TYPE_ISSUE,
+ $input);
+
+ $this->assertGitHubRawEventParse($expect, $event, $name);
+ }
+ }
+
+ public function testRepositoryEvents() {
+ $path = dirname(__FILE__).'/repositoryevents/';
+
+ $cases = $this->readTestCases($path);
+
+ foreach ($cases as $name => $info) {
+ $input = $info['input'];
+ $expect = $info['expect'];
+
+ $event = NuanceGitHubRawEvent::newEvent(
+ NuanceGitHubRawEvent::TYPE_REPOSITORY,
+ $input);
+
+ $this->assertGitHubRawEventParse($expect, $event, $name);
+ }
+ }
+
+ private function assertGitHubRawEventParse(
+ array $expect,
+ NuanceGitHubRawEvent $event,
+ $name) {
+
+ $actual = array(
+ 'repository.name.full' => $event->getRepositoryFullName(),
+ 'is.issue' => $event->isIssueEvent(),
+ 'is.pull' => $event->isPullRequestEvent(),
+ 'issue.number' => $event->getIssueNumber(),
+ 'pull.number' => $event->getPullRequestNumber(),
+ );
+
+ // Only verify the keys which are actually present in the test. This
+ // allows tests to specify only relevant keys.
+ $actual = array_select_keys($actual, array_keys($expect));
+
+ ksort($expect);
+ ksort($actual);
+
+ $this->assertEqual($expect, $actual, $name);
+ }
+
+ private function readTestCases($path) {
+ $files = Filesystem::listDirectory($path, $include_hidden = false);
+
+ $tests = array();
+ foreach ($files as $file) {
+ $data = Filesystem::readFile($path.$file);
+
+ $parts = preg_split('/^~{5,}$/m', $data);
+ if (count($parts) < 2) {
+ throw new Exception(
+ pht(
+ 'Expected test file "%s" to contain an input section in JSON, '.
+ 'then an expected result section in JSON, with the two sections '.
+ 'separated by a line of "~~~~~", but the divider is not present '.
+ 'in the file.',
+ $file));
+ } else if (count($parts) > 2) {
+ throw new Exception(
+ pht(
+ 'Expected test file "%s" to contain exactly two sections, '.
+ 'but it has more than two sections.'));
+ }
+
+ list($input, $expect) = $parts;
+
+ try {
+ $input = phutil_json_decode($input);
+ $expect = phutil_json_decode($expect);
+ } catch (Exception $ex) {
+ throw new PhutilProxyException(
+ pht(
+ 'Exception while decoding test data for test "%s".',
+ $file),
+ $ex);
+ }
+
+ $tests[$file] = array(
+ 'input' => $input,
+ 'expect' => $expect,
+ );
+ }
+
+ return $tests;
+ }
+
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/assigned.txt b/src/applications/nuance/github/__tests__/issueevents/assigned.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/assigned.txt
@@ -0,0 +1,114 @@
+{
+ "id": 583217900,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583217900",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "assigned",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:42:53Z",
+ "assignee": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "assigner": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/closed.txt b/src/applications/nuance/github/__tests__/issueevents/closed.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/closed.txt
@@ -0,0 +1,76 @@
+{
+ "id": 583218864,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218864",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "closed",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:53Z",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt b/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt
@@ -0,0 +1,79 @@
+{
+ "id": 583218613,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218613",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "demilestoned",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:36Z",
+ "milestone": {
+ "title": "b"
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/labeled.txt b/src/applications/nuance/github/__tests__/issueevents/labeled.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/labeled.txt
@@ -0,0 +1,80 @@
+{
+ "id": 583217784,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583217784",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "labeled",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:42:44Z",
+ "label": {
+ "name": "bug",
+ "color": "fc2929"
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/locked.txt b/src/applications/nuance/github/__tests__/issueevents/locked.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/locked.txt
@@ -0,0 +1,76 @@
+{
+ "id": 583218006,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218006",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "locked",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:42:58Z",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/milestoned.txt b/src/applications/nuance/github/__tests__/issueevents/milestoned.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/milestoned.txt
@@ -0,0 +1,79 @@
+{
+ "id": 583217866,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583217866",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "milestoned",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:42:50Z",
+ "milestone": {
+ "title": "b"
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/renamed.txt b/src/applications/nuance/github/__tests__/issueevents/renamed.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/renamed.txt
@@ -0,0 +1,80 @@
+{
+ "id": 583218162,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218162",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "renamed",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:07Z",
+ "rename": {
+ "from": "Enforce haiku in commit messages",
+ "to": "Enforce haiku in commit messages edit"
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/reopened.txt b/src/applications/nuance/github/__tests__/issueevents/reopened.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/reopened.txt
@@ -0,0 +1,76 @@
+{
+ "id": 583218814,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218814",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "reopened",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:50Z",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/unassigned.txt b/src/applications/nuance/github/__tests__/issueevents/unassigned.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/unassigned.txt
@@ -0,0 +1,114 @@
+{
+ "id": 583218511,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218511",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "unassigned",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:29Z",
+ "assignee": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "assigner": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt b/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt
@@ -0,0 +1,80 @@
+{
+ "id": 583218703,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218703",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "unlabeled",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:42Z",
+ "label": {
+ "name": "bug",
+ "color": "fc2929"
+ },
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/issueevents/unlocked.txt b/src/applications/nuance/github/__tests__/issueevents/unlocked.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/issueevents/unlocked.txt
@@ -0,0 +1,76 @@
+{
+ "id": 583218062,
+ "url": "https://api.github.com/repos/epriestley/poems/issues/events/583218062",
+ "actor": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "event": "unlocked",
+ "commit_id": null,
+ "commit_url": null,
+ "created_at": "2016-03-09T12:43:01Z",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 5,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T14:34:46Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt
@@ -0,0 +1,161 @@
+{
+ "id": "3740938746",
+ "type": "IssueCommentEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "created",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/2",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/2/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/2/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/2/events",
+ "html_url": "https://github.com/epriestley/poems/pull/2",
+ "id": 139568860,
+ "number": 2,
+ "title": "Please Merge Quack2 into Feature",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+ {
+ "url": "https://api.github.com/repos/epriestley/poems/labels/bug",
+ "name": "bug",
+ "color": "fc2929"
+ }
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "milestone": {
+ "url": "https://api.github.com/repos/epriestley/poems/milestones/1",
+ "html_url": "https://github.com/epriestley/poems/milestones/b",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/milestones/1/labels",
+ "id": 1633589,
+ "number": 1,
+ "title": "b",
+ "description": null,
+ "creator": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "open_issues": 1,
+ "closed_issues": 0,
+ "state": "open",
+ "created_at": "2016-03-09T12:42:50Z",
+ "updated_at": "2016-03-09T12:52:41Z",
+ "due_on": null,
+ "closed_at": null
+ },
+ "comments": 1,
+ "created_at": "2016-03-09T12:52:31Z",
+ "updated_at": "2016-03-09T12:53:06Z",
+ "closed_at": null,
+ "pull_request": {
+ "url": "https://api.github.com/repos/epriestley/poems/pulls/2",
+ "html_url": "https://github.com/epriestley/poems/pull/2",
+ "diff_url": "https://github.com/epriestley/poems/pull/2.diff",
+ "patch_url": "https://github.com/epriestley/poems/pull/2.patch"
+ },
+ "body": ""
+ },
+ "comment": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/comments/194282800",
+ "html_url": "https://github.com/epriestley/poems/pull/2#issuecomment-194282800",
+ "issue_url": "https://api.github.com/repos/epriestley/poems/issues/2",
+ "id": 194282800,
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "created_at": "2016-03-09T12:53:06Z",
+ "updated_at": "2016-03-09T12:53:06Z",
+ "body": "wub wub"
+ }
+ },
+ "public": true,
+ "created_at": "2016-03-09T12:53:06Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": false,
+ "is.pull": true,
+ "issue.number": null,
+ "pull.number": 2
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt
@@ -0,0 +1,98 @@
+{
+ "id": "3733510485",
+ "type": "IssueCommentEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "created",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 1,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-08T00:41:22Z",
+ "closed_at": null,
+ "body": "OK"
+ },
+ "comment": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/comments/193528669",
+ "html_url": "https://github.com/epriestley/poems/issues/1#issuecomment-193528669",
+ "issue_url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "id": 193528669,
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "created_at": "2016-03-08T00:41:22Z",
+ "updated_at": "2016-03-08T00:41:22Z",
+ "body": "comment on issue"
+ }
+ },
+ "public": true,
+ "created_at": "2016-03-08T00:41:22Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt
@@ -0,0 +1,70 @@
+{
+ "id": "3740905151",
+ "type": "IssuesEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "closed",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "closed",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 2,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T12:43:48Z",
+ "closed_at": "2016-03-09T12:43:48Z",
+ "body": "OK"
+ }
+ },
+ "public": true,
+ "created_at": "2016-03-09T12:43:48Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt
@@ -0,0 +1,70 @@
+{
+ "id": "3733509737",
+ "type": "IssuesEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "opened",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 0,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-08T00:41:08Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+ },
+ "public": true,
+ "created_at": "2016-03-08T00:41:08Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt
@@ -0,0 +1,70 @@
+{
+ "id": "3740908680",
+ "type": "IssuesEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "reopened",
+ "issue": {
+ "url": "https://api.github.com/repos/epriestley/poems/issues/1",
+ "repository_url": "https://api.github.com/repos/epriestley/poems",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/issues/1/labels{/name}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/1/comments",
+ "events_url": "https://api.github.com/repos/epriestley/poems/issues/1/events",
+ "html_url": "https://github.com/epriestley/poems/issues/1",
+ "id": 139138813,
+ "number": 1,
+ "title": "Enforce haiku in commit messages edit",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "labels": [
+
+ ],
+ "state": "open",
+ "locked": false,
+ "assignee": null,
+ "milestone": null,
+ "comments": 3,
+ "created_at": "2016-03-08T00:41:08Z",
+ "updated_at": "2016-03-09T12:44:49Z",
+ "closed_at": null,
+ "body": "OK"
+ }
+ },
+ "public": true,
+ "created_at": "2016-03-09T12:44:49Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": true,
+ "is.pull": false,
+ "issue.number": 1
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt b/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt
@@ -0,0 +1,334 @@
+{
+ "id": "3740936638",
+ "type": "PullRequestEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "opened",
+ "number": 2,
+ "pull_request": {
+ "url": "https://api.github.com/repos/epriestley/poems/pulls/2",
+ "id": 62223852,
+ "html_url": "https://github.com/epriestley/poems/pull/2",
+ "diff_url": "https://github.com/epriestley/poems/pull/2.diff",
+ "patch_url": "https://github.com/epriestley/poems/pull/2.patch",
+ "issue_url": "https://api.github.com/repos/epriestley/poems/issues/2",
+ "number": 2,
+ "state": "open",
+ "locked": false,
+ "title": "Please Merge Quack2 into Feature",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "body": "",
+ "created_at": "2016-03-09T12:52:31Z",
+ "updated_at": "2016-03-09T12:52:31Z",
+ "closed_at": null,
+ "merged_at": null,
+ "merge_commit_sha": null,
+ "assignee": null,
+ "milestone": null,
+ "commits_url": "https://api.github.com/repos/epriestley/poems/pulls/2/commits",
+ "review_comments_url": "https://api.github.com/repos/epriestley/poems/pulls/2/comments",
+ "review_comment_url": "https://api.github.com/repos/epriestley/poems/pulls/comments{/number}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/issues/2/comments",
+ "statuses_url": "https://api.github.com/repos/epriestley/poems/statuses/6cf5f6d0c8c06c4c73b8783666d9b3ecce138244",
+ "head": {
+ "label": "epriestley:feature",
+ "ref": "feature",
+ "sha": "6cf5f6d0c8c06c4c73b8783666d9b3ecce138244",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "poems",
+ "full_name": "epriestley/poems",
+ "owner": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/epriestley/poems",
+ "description": "Poems (Mirror)",
+ "fork": false,
+ "url": "https://api.github.com/repos/epriestley/poems",
+ "forks_url": "https://api.github.com/repos/epriestley/poems/forks",
+ "keys_url": "https://api.github.com/repos/epriestley/poems/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/epriestley/poems/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/epriestley/poems/teams",
+ "hooks_url": "https://api.github.com/repos/epriestley/poems/hooks",
+ "issue_events_url": "https://api.github.com/repos/epriestley/poems/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/epriestley/poems/events",
+ "assignees_url": "https://api.github.com/repos/epriestley/poems/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/epriestley/poems/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/epriestley/poems/tags",
+ "blobs_url": "https://api.github.com/repos/epriestley/poems/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/epriestley/poems/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/epriestley/poems/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/epriestley/poems/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/epriestley/poems/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/epriestley/poems/languages",
+ "stargazers_url": "https://api.github.com/repos/epriestley/poems/stargazers",
+ "contributors_url": "https://api.github.com/repos/epriestley/poems/contributors",
+ "subscribers_url": "https://api.github.com/repos/epriestley/poems/subscribers",
+ "subscription_url": "https://api.github.com/repos/epriestley/poems/subscription",
+ "commits_url": "https://api.github.com/repos/epriestley/poems/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/epriestley/poems/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/epriestley/poems/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/epriestley/poems/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/epriestley/poems/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/epriestley/poems/merges",
+ "archive_url": "https://api.github.com/repos/epriestley/poems/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/epriestley/poems/downloads",
+ "issues_url": "https://api.github.com/repos/epriestley/poems/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/epriestley/poems/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/epriestley/poems/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/epriestley/poems/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/labels{/name}",
+ "releases_url": "https://api.github.com/repos/epriestley/poems/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/epriestley/poems/deployments",
+ "created_at": "2013-11-22T19:47:42Z",
+ "updated_at": "2016-01-21T17:10:27Z",
+ "pushed_at": "2016-01-21T17:10:21Z",
+ "git_url": "git://github.com/epriestley/poems.git",
+ "ssh_url": "git@github.com:epriestley/poems.git",
+ "clone_url": "https://github.com/epriestley/poems.git",
+ "svn_url": "https://github.com/epriestley/poems",
+ "homepage": null,
+ "size": 715,
+ "stargazers_count": 9,
+ "watchers_count": 9,
+ "language": "PHP",
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 9,
+ "default_branch": "master"
+ }
+ },
+ "base": {
+ "label": "epriestley:quack2",
+ "ref": "quack2",
+ "sha": "5a9c51e86615f6e1097b2a4a73ef0fe75981c1dd",
+ "user": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "poems",
+ "full_name": "epriestley/poems",
+ "owner": {
+ "login": "epriestley",
+ "id": 102631,
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?v=3",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "html_url": "https://github.com/epriestley",
+ "followers_url": "https://api.github.com/users/epriestley/followers",
+ "following_url": "https://api.github.com/users/epriestley/following{/other_user}",
+ "gists_url": "https://api.github.com/users/epriestley/gists{/gist_id}",
+ "starred_url": "https://api.github.com/users/epriestley/starred{/owner}{/repo}",
+ "subscriptions_url": "https://api.github.com/users/epriestley/subscriptions",
+ "organizations_url": "https://api.github.com/users/epriestley/orgs",
+ "repos_url": "https://api.github.com/users/epriestley/repos",
+ "events_url": "https://api.github.com/users/epriestley/events{/privacy}",
+ "received_events_url": "https://api.github.com/users/epriestley/received_events",
+ "type": "User",
+ "site_admin": false
+ },
+ "private": false,
+ "html_url": "https://github.com/epriestley/poems",
+ "description": "Poems (Mirror)",
+ "fork": false,
+ "url": "https://api.github.com/repos/epriestley/poems",
+ "forks_url": "https://api.github.com/repos/epriestley/poems/forks",
+ "keys_url": "https://api.github.com/repos/epriestley/poems/keys{/key_id}",
+ "collaborators_url": "https://api.github.com/repos/epriestley/poems/collaborators{/collaborator}",
+ "teams_url": "https://api.github.com/repos/epriestley/poems/teams",
+ "hooks_url": "https://api.github.com/repos/epriestley/poems/hooks",
+ "issue_events_url": "https://api.github.com/repos/epriestley/poems/issues/events{/number}",
+ "events_url": "https://api.github.com/repos/epriestley/poems/events",
+ "assignees_url": "https://api.github.com/repos/epriestley/poems/assignees{/user}",
+ "branches_url": "https://api.github.com/repos/epriestley/poems/branches{/branch}",
+ "tags_url": "https://api.github.com/repos/epriestley/poems/tags",
+ "blobs_url": "https://api.github.com/repos/epriestley/poems/git/blobs{/sha}",
+ "git_tags_url": "https://api.github.com/repos/epriestley/poems/git/tags{/sha}",
+ "git_refs_url": "https://api.github.com/repos/epriestley/poems/git/refs{/sha}",
+ "trees_url": "https://api.github.com/repos/epriestley/poems/git/trees{/sha}",
+ "statuses_url": "https://api.github.com/repos/epriestley/poems/statuses/{sha}",
+ "languages_url": "https://api.github.com/repos/epriestley/poems/languages",
+ "stargazers_url": "https://api.github.com/repos/epriestley/poems/stargazers",
+ "contributors_url": "https://api.github.com/repos/epriestley/poems/contributors",
+ "subscribers_url": "https://api.github.com/repos/epriestley/poems/subscribers",
+ "subscription_url": "https://api.github.com/repos/epriestley/poems/subscription",
+ "commits_url": "https://api.github.com/repos/epriestley/poems/commits{/sha}",
+ "git_commits_url": "https://api.github.com/repos/epriestley/poems/git/commits{/sha}",
+ "comments_url": "https://api.github.com/repos/epriestley/poems/comments{/number}",
+ "issue_comment_url": "https://api.github.com/repos/epriestley/poems/issues/comments{/number}",
+ "contents_url": "https://api.github.com/repos/epriestley/poems/contents/{+path}",
+ "compare_url": "https://api.github.com/repos/epriestley/poems/compare/{base}...{head}",
+ "merges_url": "https://api.github.com/repos/epriestley/poems/merges",
+ "archive_url": "https://api.github.com/repos/epriestley/poems/{archive_format}{/ref}",
+ "downloads_url": "https://api.github.com/repos/epriestley/poems/downloads",
+ "issues_url": "https://api.github.com/repos/epriestley/poems/issues{/number}",
+ "pulls_url": "https://api.github.com/repos/epriestley/poems/pulls{/number}",
+ "milestones_url": "https://api.github.com/repos/epriestley/poems/milestones{/number}",
+ "notifications_url": "https://api.github.com/repos/epriestley/poems/notifications{?since,all,participating}",
+ "labels_url": "https://api.github.com/repos/epriestley/poems/labels{/name}",
+ "releases_url": "https://api.github.com/repos/epriestley/poems/releases{/id}",
+ "deployments_url": "https://api.github.com/repos/epriestley/poems/deployments",
+ "created_at": "2013-11-22T19:47:42Z",
+ "updated_at": "2016-01-21T17:10:27Z",
+ "pushed_at": "2016-01-21T17:10:21Z",
+ "git_url": "git://github.com/epriestley/poems.git",
+ "ssh_url": "git@github.com:epriestley/poems.git",
+ "clone_url": "https://github.com/epriestley/poems.git",
+ "svn_url": "https://github.com/epriestley/poems",
+ "homepage": null,
+ "size": 715,
+ "stargazers_count": 9,
+ "watchers_count": 9,
+ "language": "PHP",
+ "has_issues": true,
+ "has_downloads": true,
+ "has_wiki": true,
+ "has_pages": false,
+ "forks_count": 0,
+ "mirror_url": null,
+ "open_issues_count": 2,
+ "forks": 0,
+ "open_issues": 2,
+ "watchers": 9,
+ "default_branch": "master"
+ }
+ },
+ "_links": {
+ "self": {
+ "href": "https://api.github.com/repos/epriestley/poems/pulls/2"
+ },
+ "html": {
+ "href": "https://github.com/epriestley/poems/pull/2"
+ },
+ "issue": {
+ "href": "https://api.github.com/repos/epriestley/poems/issues/2"
+ },
+ "comments": {
+ "href": "https://api.github.com/repos/epriestley/poems/issues/2/comments"
+ },
+ "review_comments": {
+ "href": "https://api.github.com/repos/epriestley/poems/pulls/2/comments"
+ },
+ "review_comment": {
+ "href": "https://api.github.com/repos/epriestley/poems/pulls/comments{/number}"
+ },
+ "commits": {
+ "href": "https://api.github.com/repos/epriestley/poems/pulls/2/commits"
+ },
+ "statuses": {
+ "href": "https://api.github.com/repos/epriestley/poems/statuses/6cf5f6d0c8c06c4c73b8783666d9b3ecce138244"
+ }
+ },
+ "merged": false,
+ "mergeable": null,
+ "mergeable_state": "unknown",
+ "merged_by": null,
+ "comments": 0,
+ "review_comments": 0,
+ "commits": 26,
+ "additions": 26,
+ "deletions": 0,
+ "changed_files": 1
+ }
+ },
+ "public": true,
+ "created_at": "2016-03-09T12:52:31Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": false,
+ "is.pull": true,
+ "issue.number": null,
+ "pull.number": 2
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt b/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt
@@ -0,0 +1,45 @@
+{
+ "id": "3498724127",
+ "type": "PushEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "push_id": 924333172,
+ "size": 1,
+ "distinct_size": 1,
+ "ref": "refs/heads/master",
+ "head": "c829132d37c4c1da80d319942a5a1e500632b52f",
+ "before": "d8262dc45f0bd79c06571c6851d47efaeb6b599b",
+ "commits": [
+ {
+ "sha": "c829132d37c4c1da80d319942a5a1e500632b52f",
+ "author": {
+ "email": "git@epriestley.com",
+ "name": "epriestley"
+ },
+ "message": "Put 16K files in a single directory",
+ "distinct": true,
+ "url": "https://api.github.com/repos/epriestley/poems/commits/c829132d37c4c1da80d319942a5a1e500632b52f"
+ }
+ ]
+ },
+ "public": true,
+ "created_at": "2016-01-06T11:21:59Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": false,
+ "is.pull": false,
+ "issue.number": null
+}
diff --git a/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt b/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt
new file mode 100644
--- /dev/null
+++ b/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt
@@ -0,0 +1,29 @@
+{
+ "id": "3740950917",
+ "type": "WatchEvent",
+ "actor": {
+ "id": 102631,
+ "login": "epriestley",
+ "gravatar_id": "",
+ "url": "https://api.github.com/users/epriestley",
+ "avatar_url": "https://avatars.githubusercontent.com/u/102631?"
+ },
+ "repo": {
+ "id": 14627834,
+ "name": "epriestley/poems",
+ "url": "https://api.github.com/repos/epriestley/poems"
+ },
+ "payload": {
+ "action": "started"
+ },
+ "public": true,
+ "created_at": "2016-03-09T12:56:28Z"
+}
+~~~~~
+{
+ "repository.name.full": "epriestley/poems",
+ "is.issue": false,
+ "is.pull": false,
+ "issue.number": null,
+ "pull.number": null
+}

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 2, 7:51 AM (6 d, 15 h ago)
Storage Engine
amazon-s3
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
phabricator/secure/g7/un/7tyapnzoxtrt7l6x
Default Alt Text
D15448.diff (91 KB)

Event Timeline