diff --git a/doc/README.md b/doc/README.md index 2c351060190..00faee5a846 100644 --- a/doc/README.md +++ b/doc/README.md @@ -27,6 +27,7 @@ v3 APIs: * [Comments](issue/comments.md) * [Labels](issue/labels.md) * [Milestones](issue/milestones.md) + * [Timeline](issue/timeline.md) * [Meta](meta.md) * Miscellaneous * [Emojis](miscellaneous/emojis.md) diff --git a/doc/issue/timeline.md b/doc/issue/timeline.md new file mode 100644 index 00000000000..5b0760f92ee --- /dev/null +++ b/doc/issue/timeline.md @@ -0,0 +1,17 @@ +## Issues / Timeline API +[Back to the "Issues API"](../issues.md) | [Back to the navigation](../README.md) + +Wraps [GitHub Issue Timeline API](http://developer.github.com/v3/issues/timeline/). + +This api is currently only available to developers in Early Access. To access the API during the Early Access period, +you must provide a custom media type in the Accept header. + +```php +$client->api('ìssue')->timeline()->configure(); +``` + +### List events for an issue + +```php +$events = $client->api('issue')->timeline()->all('KnpLabs', 'php-github-api', 123); +``` diff --git a/lib/Github/Api/Issue.php b/lib/Github/Api/Issue.php index 537f7b8ed00..5a42d5cd4bd 100644 --- a/lib/Github/Api/Issue.php +++ b/lib/Github/Api/Issue.php @@ -7,6 +7,7 @@ use Github\Api\Issue\Events; use Github\Api\Issue\Labels; use Github\Api\Issue\Milestones; +use Github\Api\Issue\Timeline; use Github\Exception\MissingArgumentException; /** @@ -245,4 +246,16 @@ public function assignees() { return new Assignees($this->client); } + + /** + * List all events. + * + * @link https://developer.github.com/v3/issues/timeline/ + * + * @return Timeline + */ + public function timeline() + { + return new Timeline($this->client); + } } diff --git a/lib/Github/Api/Issue/Timeline.php b/lib/Github/Api/Issue/Timeline.php new file mode 100644 index 00000000000..1a076641024 --- /dev/null +++ b/lib/Github/Api/Issue/Timeline.php @@ -0,0 +1,33 @@ +acceptHeaderValue = 'application/vnd.github.mockingbird-preview'; + + return $this; + } + + /** + * Get all events for a specific issue. + * + * @link https://developer.github.com/v3/issues/timeline/#list-events-for-an-issue + * @param string $username + * @param string $repository + * @param int $issue + * + * @return array + */ + public function all($username, $repository, $issue) + { + return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/timeline'); + } +} diff --git a/test/Github/Tests/Api/Issue/TimelineTest.php b/test/Github/Tests/Api/Issue/TimelineTest.php new file mode 100644 index 00000000000..43bd991f279 --- /dev/null +++ b/test/Github/Tests/Api/Issue/TimelineTest.php @@ -0,0 +1,36 @@ +getApiMock(); + $api->expects($this->once()) + ->method('get') + ->with('/repos/KnpLabs/php-github-api/issues/123/timeline', array()) + ->will($this->returnValue($expectedValue)); + + $this->assertEquals($expectedValue, $api->all('KnpLabs', 'php-github-api', 123)); + } + + + /** + * @return string + */ + protected function getApiClass() + { + return \Github\Api\Issue\Timeline::class; + } +} diff --git a/test/Github/Tests/Api/IssueTest.php b/test/Github/Tests/Api/IssueTest.php index 5596f6be4de..545c5184be5 100644 --- a/test/Github/Tests/Api/IssueTest.php +++ b/test/Github/Tests/Api/IssueTest.php @@ -242,6 +242,16 @@ public function shouldGetMilestonesApiObject() $this->assertInstanceOf(\Github\Api\Issue\Milestones::class, $api->milestones()); } + /** + * @test + */ + public function shouldGetTimelineApiObject() + { + $api = $this->getApiMock(); + + $this->assertInstanceOf(\Github\Api\Issue\Timeline::class, $api->timeline()); + } + /** * @test */