diff --git a/src/applications/nuance/github/NuanceGitHubRawEvent.php b/src/applications/nuance/github/NuanceGitHubRawEvent.php index 50ab9020ef..0e8fe44c2e 100644 --- a/src/applications/nuance/github/NuanceGitHubRawEvent.php +++ b/src/applications/nuance/github/NuanceGitHubRawEvent.php @@ -1,137 +1,199 @@ type = $type; $event->raw = $raw; return $event; } public function getRepositoryFullName() { return $this->getRepositoryFullRawName(); } public function isIssueEvent() { if ($this->isPullRequestEvent()) { return false; } if ($this->type == self::TYPE_ISSUE) { return true; } switch ($this->getIssueRawKind()) { case 'IssuesEvent': 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; } public function getIssueNumber() { if (!$this->isIssueEvent()) { return null; } return $this->getRawIssueNumber(); } public function getPullRequestNumber() { if (!$this->isPullRequestEvent()) { return null; } return $this->getRawIssueNumber(); } + + public function getID() { + $raw = $this->raw; + + $id = idx($raw, 'id'); + if ($id) { + return (int)$id; + } + + return null; + } + + public function getURI() { + $raw = $this->raw; + + if ($this->isIssueEvent()) { + if ($this->type == self::TYPE_ISSUE) { + $uri = idxv($raw, array('issue', 'html_url')); + $uri = $uri.'#event-'.$this->getID(); + } else { + $uri = idxv($raw, array('payload', 'issue', 'html_url')); + $uri = $uri.'#event-'.$this->getID(); + } + } else if ($this->isPullRequestEvent()) { + if ($this->type == self::TYPE_ISSUE) { + $uri = idxv($raw, array('issue', 'html_url')); + $uri = $uri.'#event-'.$this->getID(); + } else { + // The format of pull request events varies so we need to fish around + // a bit to find the correct URI. + $uri = idxv($raw, array('payload', 'pull_request', 'html_url')); + if (!$uri) { + $uri = idxv($raw, array('payload', 'issue', 'html_url')); + } + $uri = $uri.'#event-'.$this->getID(); + } + } else { + switch ($this->getIssueRawKind()) { + case 'PushEvent': + // These don't really have a URI since there may be multiple commits + // involved and GitHub doesn't bundle the push as an object on its + // own. Just try to find the URI for the log. The API also does + // not return any HTML URI for these events. + + $head = idxv($raw, array('payload', 'head')); + if ($head === null) { + return null; + } + + $repo = $this->getRepositoryFullRawName(); + return "https://github.com/{$repo}/commits/{$head}"; + case 'WatchEvent': + // These have no reasonable URI. + return null; + default: + return null; + } + } + + return $uri; + } + private function getRepositoryFullRawName() { $raw = $this->raw; $full = idxv($raw, array('repo', 'name')); if (strlen($full)) { return $full; } // 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 getIssueRawKind() { $raw = $this->raw; return idxv($raw, array('type')); } private function getRawIssueNumber() { $raw = $this->raw; 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 index f956079b6a..5ce199cb8c 100644 --- a/src/applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php +++ b/src/applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php @@ -1,108 +1,110 @@ 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(), + 'id' => $event->getID(), + 'uri' => $event->getURI(), ); // 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 index bdf5046e00..7c1c89435f 100644 --- a/src/applications/nuance/github/__tests__/issueevents/assigned.txt +++ b/src/applications/nuance/github/__tests__/issueevents/assigned.txt @@ -1,114 +1,116 @@ { "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 + "issue.number": 1, + "id": 583217900, + "uri": "https://github.com/epriestley/poems/issues/1#event-583217900" } diff --git a/src/applications/nuance/github/__tests__/issueevents/closed.txt b/src/applications/nuance/github/__tests__/issueevents/closed.txt index 7651d07172..e13c9a1ffd 100644 --- a/src/applications/nuance/github/__tests__/issueevents/closed.txt +++ b/src/applications/nuance/github/__tests__/issueevents/closed.txt @@ -1,76 +1,78 @@ { "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 + "issue.number": 1, + "id": 583218864, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218864" } diff --git a/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt b/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt index bbde0e7d24..1c9bab5725 100644 --- a/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt +++ b/src/applications/nuance/github/__tests__/issueevents/demilestoned.txt @@ -1,79 +1,81 @@ { "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 + "issue.number": 1, + "id": 583218613, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218613" } diff --git a/src/applications/nuance/github/__tests__/issueevents/labeled.txt b/src/applications/nuance/github/__tests__/issueevents/labeled.txt index bf41262ac4..92cd7cd4f0 100644 --- a/src/applications/nuance/github/__tests__/issueevents/labeled.txt +++ b/src/applications/nuance/github/__tests__/issueevents/labeled.txt @@ -1,80 +1,82 @@ { "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 + "issue.number": 1, + "id": 583217784, + "uri": "https://github.com/epriestley/poems/issues/1#event-583217784" } diff --git a/src/applications/nuance/github/__tests__/issueevents/locked.txt b/src/applications/nuance/github/__tests__/issueevents/locked.txt index 440eec0d95..536d95af8e 100644 --- a/src/applications/nuance/github/__tests__/issueevents/locked.txt +++ b/src/applications/nuance/github/__tests__/issueevents/locked.txt @@ -1,76 +1,78 @@ { "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 + "issue.number": 1, + "id": 583218006, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218006" } diff --git a/src/applications/nuance/github/__tests__/issueevents/milestoned.txt b/src/applications/nuance/github/__tests__/issueevents/milestoned.txt index e8b32b1113..748beddda9 100644 --- a/src/applications/nuance/github/__tests__/issueevents/milestoned.txt +++ b/src/applications/nuance/github/__tests__/issueevents/milestoned.txt @@ -1,79 +1,81 @@ { "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 + "issue.number": 1, + "id": 583217866, + "uri": "https://github.com/epriestley/poems/issues/1#event-583217866" } diff --git a/src/applications/nuance/github/__tests__/issueevents/renamed.txt b/src/applications/nuance/github/__tests__/issueevents/renamed.txt index 0cbbd1ebb8..e4a4614ebb 100644 --- a/src/applications/nuance/github/__tests__/issueevents/renamed.txt +++ b/src/applications/nuance/github/__tests__/issueevents/renamed.txt @@ -1,80 +1,82 @@ { "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 + "issue.number": 1, + "id": 583218162, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218162" } diff --git a/src/applications/nuance/github/__tests__/issueevents/reopened.txt b/src/applications/nuance/github/__tests__/issueevents/reopened.txt index bc778728d8..baab332450 100644 --- a/src/applications/nuance/github/__tests__/issueevents/reopened.txt +++ b/src/applications/nuance/github/__tests__/issueevents/reopened.txt @@ -1,76 +1,78 @@ { "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 + "issue.number": 1, + "id": 583218814, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218814" } diff --git a/src/applications/nuance/github/__tests__/issueevents/unassigned.txt b/src/applications/nuance/github/__tests__/issueevents/unassigned.txt index bc8b9e1df9..43c610b576 100644 --- a/src/applications/nuance/github/__tests__/issueevents/unassigned.txt +++ b/src/applications/nuance/github/__tests__/issueevents/unassigned.txt @@ -1,114 +1,116 @@ { "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 + "issue.number": 1, + "id": 583218511, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218511" } diff --git a/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt b/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt index e3435605e0..8d40ba5702 100644 --- a/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt +++ b/src/applications/nuance/github/__tests__/issueevents/unlabeled.txt @@ -1,80 +1,82 @@ { "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 + "issue.number": 1, + "id": 583218703, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218703" } diff --git a/src/applications/nuance/github/__tests__/issueevents/unlocked.txt b/src/applications/nuance/github/__tests__/issueevents/unlocked.txt index e59ba6e93f..080fbd79e8 100644 --- a/src/applications/nuance/github/__tests__/issueevents/unlocked.txt +++ b/src/applications/nuance/github/__tests__/issueevents/unlocked.txt @@ -1,76 +1,78 @@ { "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 + "issue.number": 1, + "id": 583218062, + "uri": "https://github.com/epriestley/poems/issues/1#event-583218062" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt index 0068f7c092..9c784f21be 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.pull.txt @@ -1,161 +1,163 @@ { "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 + "pull.number": 2, + "id": 3740938746, + "uri": "https://github.com/epriestley/poems/pull/2#event-3740938746" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt index c6fa5ccb54..b5034ef453 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/IssueCommentEvent.created.txt @@ -1,98 +1,100 @@ { "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 + "issue.number": 1, + "id": 3733510485, + "uri": "https://github.com/epriestley/poems/issues/1#event-3733510485" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt index 8373e2ee52..78fc81be95 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.closed.txt @@ -1,70 +1,72 @@ { "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 + "issue.number": 1, + "id": 3740905151, + "uri": "https://github.com/epriestley/poems/issues/1#event-3740905151" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt index 91068727e7..7ba07a591b 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.opened.txt @@ -1,70 +1,72 @@ { "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 + "issue.number": 1, + "id": 3733509737, + "uri": "https://github.com/epriestley/poems/issues/1#event-3733509737" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt index 6ab81e1028..797eb84078 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/IssuesEvent.reopened.txt @@ -1,70 +1,72 @@ { "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 + "issue.number": 1, + "id": 3740908680, + "uri": "https://github.com/epriestley/poems/issues/1#event-3740908680" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt b/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt index 848ed63afe..c2f892f090 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/PullRequestEvent.opened.txt @@ -1,334 +1,336 @@ { "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 + "pull.number": 2, + "id": 3740936638, + "uri": "https://github.com/epriestley/poems/pull/2#event-3740936638" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt b/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt index f36fed2f52..d7c1b5ecad 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/PushEvent.txt @@ -1,45 +1,47 @@ { "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 + "issue.number": null, + "id": 3498724127, + "uri": "https://github.com/epriestley/poems/commits/c829132d37c4c1da80d319942a5a1e500632b52f" } diff --git a/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt b/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt index 7cc6ed8164..c65a5ee771 100644 --- a/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt +++ b/src/applications/nuance/github/__tests__/repositoryevents/WatchEvent.started.txt @@ -1,29 +1,31 @@ { "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 + "pull.number": null, + "id": 3740950917, + "uri": null } diff --git a/src/applications/nuance/item/NuanceGitHubEventItemType.php b/src/applications/nuance/item/NuanceGitHubEventItemType.php index cec3d366ec..dd52dc1c15 100644 --- a/src/applications/nuance/item/NuanceGitHubEventItemType.php +++ b/src/applications/nuance/item/NuanceGitHubEventItemType.php @@ -1,189 +1,232 @@ getItemProperty('api.type'); switch ($api_type) { case 'issue': return $this->getGitHubIssueAPIEventDisplayName($item); case 'repository': return $this->getGitHubRepositoryAPIEventDisplayName($item); default: return pht('GitHub Event (Unknown API Type "%s")', $api_type); } } private function getGitHubIssueAPIEventDisplayName(NuanceItem $item) { $raw = $item->getItemProperty('api.raw', array()); $action = idxv($raw, array('event')); $number = idxv($raw, array('issue', 'number')); return pht('GitHub Issue #%d (%s)', $number, $action); } private function getGitHubRepositoryAPIEventDisplayName(NuanceItem $item) { $raw = $item->getItemProperty('api.raw', array()); $repo = idxv($raw, array('repo', 'name'), pht('')); $type = idx($raw, 'type'); switch ($type) { case 'PushEvent': $head = idxv($raw, array('payload', 'head')); $head = substr($head, 0, 8); $name = pht('Push %s', $head); break; case 'IssuesEvent': $action = idxv($raw, array('payload', 'action')); $number = idxv($raw, array('payload', 'issue', 'number')); $name = pht('Issue #%d (%s)', $number, $action); break; case 'IssueCommentEvent': $action = idxv($raw, array('payload', 'action')); $number = idxv($raw, array('payload', 'issue', 'number')); $name = pht('Issue #%d (Comment, %s)', $number, $action); break; case 'PullRequestEvent': $action = idxv($raw, array('payload', 'action')); $number = idxv($raw, array('payload', 'pull_request', 'number')); $name = pht('Pull Request #%d (%s)', $number, $action); break; default: $name = pht('Unknown Event ("%s")', $type); break; } return pht('GitHub %s %s', $repo, $name); } public function canUpdateItems() { return true; } protected function updateItemFromSource(NuanceItem $item) { $viewer = $this->getViewer(); $is_dirty = false; // TODO: Link up the requestor, etc. $source = $item->getSource(); $token = $source->getSourceProperty('github.token'); $token = new PhutilOpaqueEnvelope($token); $ref = $this->getDoorkeeperRef($item); if ($ref) { $ref = id(new DoorkeeperImportEngine()) ->setViewer($viewer) ->setRefs(array($ref)) ->setThrowOnMissingLink(true) ->setContextProperty('github.token', $token) ->executeOne(); if ($ref->getSyncFailed()) { $xobj = null; } else { $xobj = $ref->getExternalObject(); } if ($xobj) { $item->setItemProperty('doorkeeper.xobj.phid', $xobj->getPHID()); $is_dirty = true; } } if ($item->getStatus() == NuanceItem::STATUS_IMPORTING) { $item->setStatus(NuanceItem::STATUS_ROUTING); $is_dirty = true; } if ($is_dirty) { $item->save(); } } private function getDoorkeeperRef(NuanceItem $item) { $raw = $this->newRawEvent($item); $full_repository = $raw->getRepositoryFullName(); if (!strlen($full_repository)) { return null; } if ($raw->isIssueEvent()) { $ref_type = DoorkeeperBridgeGitHubIssue::OBJTYPE_GITHUB_ISSUE; $issue_number = $raw->getIssueNumber(); $full_ref = "{$full_repository}#{$issue_number}"; } else { return null; } return id(new DoorkeeperObjectRef()) ->setApplicationType(DoorkeeperBridgeGitHub::APPTYPE_GITHUB) ->setApplicationDomain(DoorkeeperBridgeGitHub::APPDOMAIN_GITHUB) ->setObjectType($ref_type) ->setObjectID($full_ref); } private function newRawEvent(NuanceItem $item) { $type = $item->getItemProperty('api.type'); $raw = $item->getItemProperty('api.raw', array()); return NuanceGitHubRawEvent::newEvent($type, $raw); } public function getItemActions(NuanceItem $item) { $actions = array(); $actions[] = $this->newItemAction($item, 'raw') ->setName(pht('View Raw Event')) ->setWorkflow(true) ->setIcon('fa-code'); return $actions; } protected function handleAction(NuanceItem $item, $action) { $controller = $this->getController(); switch ($action) { case 'raw': $raw = array( 'api.type' => $item->getItemProperty('api.type'), 'api.raw' => $item->getItemProperty('api.raw'), ); $raw_output = id(new PhutilJSON())->encodeFormatted($raw); $raw_box = id(new AphrontFormTextAreaControl()) ->setCustomClass('PhabricatorMonospaced') ->setLabel(pht('Raw Event')) ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_TALL) ->setValue($raw_output); $form = id(new AphrontFormView()) ->appendChild($raw_box); return $controller->newDialog() ->setWidth(AphrontDialogView::WIDTH_FULL) ->setTitle(pht('GitHub Raw Event')) ->appendForm($form) ->addCancelButton($item->getURI(), pht('Done')); } return null; } + protected function newItemView(NuanceItem $item) { + $content = array(); + + $content[] = $this->newGitHubEventItemPropertyBox($item); + + return $content; + } + + private function newGitHubEventItemPropertyBox($item) { + $viewer = $this->getViewer(); + + $property_list = id(new PHUIPropertyListView()) + ->setViewer($viewer); + + $event = $this->newRawEvent($item); + + $property_list->addProperty( + pht('GitHub Event ID'), + $event->getID()); + + $event_uri = $event->getURI(); + if ($event_uri && PhabricatorEnv::isValidRemoteURIForLink($event_uri)) { + $event_uri = phutil_tag( + 'a', + array( + 'href' => $event_uri, + ), + $event_uri); + } + + if ($event_uri) { + $property_list->addProperty( + pht('GitHub Event URI'), + $event_uri); + } + + return id(new PHUIObjectBoxView()) + ->setHeaderText(pht('Event Properties')) + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) + ->appendChild($property_list); + } + + } diff --git a/src/applications/nuance/item/NuanceItemType.php b/src/applications/nuance/item/NuanceItemType.php index 2f348dee1f..14b2fc5324 100644 --- a/src/applications/nuance/item/NuanceItemType.php +++ b/src/applications/nuance/item/NuanceItemType.php @@ -1,99 +1,99 @@ viewer = $viewer; return $this; } public function getViewer() { return $this->viewer; } public function setController(PhabricatorController $controller) { $this->controller = $controller; return $this; } public function getController() { return $this->controller; } public function canUpdateItems() { return false; } final public function buildItemView(NuanceItem $item) { return $this->newItemView($item); } - protected function newItemView() { + protected function newItemView(NuanceItem $item) { return null; } public function getItemTypeDisplayIcon() { return null; } public function getItemActions(NuanceItem $item) { return array(); } abstract public function getItemTypeDisplayName(); abstract public function getItemDisplayName(NuanceItem $item); final public function updateItem(NuanceItem $item) { if (!$this->canUpdateItems()) { throw new Exception( pht( 'This item type ("%s", of class "%s") can not update items.', $this->getItemTypeConstant(), get_class($this))); } $this->updateItemFromSource($item); } protected function updateItemFromSource(NuanceItem $item) { throw new PhutilMethodNotImplementedException(); } final public function getItemTypeConstant() { return $this->getPhobjectClassConstant('ITEMTYPE', 64); } final public static function getAllItemTypes() { return id(new PhutilClassMapQuery()) ->setAncestorClass(__CLASS__) ->setUniqueMethod('getItemTypeConstant') ->execute(); } final protected function newItemAction(NuanceItem $item, $key) { $id = $item->getID(); $action_uri = "/nuance/item/action/{$id}/{$key}/"; return id(new PhabricatorActionView()) ->setHref($action_uri); } final public function buildActionResponse(NuanceItem $item, $action) { $response = $this->handleAction($item, $action); if ($response === null) { return new Aphront404Response(); } return $response; } protected function handleAction(NuanceItem $item, $action) { return null; } }