diff --git a/lib/Github/Api/Repo.php b/lib/Github/Api/Repo.php index 0285f44886a..2279340535c 100644 --- a/lib/Github/Api/Repo.php +++ b/lib/Github/Api/Repo.php @@ -15,6 +15,7 @@ use Github\Api\Repository\Labels; use Github\Api\Repository\Stargazers; use Github\Api\Repository\Statuses; +use Github\Api\Repository\Traffic; /** * Searching repositories, getting repository information @@ -549,4 +550,9 @@ public function projects() { return new Projects($this->client); } + + public function traffic() + { + return new Traffic($this->client); + } } diff --git a/lib/Github/Api/Repository/Traffic.php b/lib/Github/Api/Repository/Traffic.php new file mode 100644 index 00000000000..1e7d85bf5ce --- /dev/null +++ b/lib/Github/Api/Repository/Traffic.php @@ -0,0 +1,63 @@ + + */ +class Traffic extends AbstractApi +{ + /** + * @link https://developer.github.com/v3/repos/traffic/#list-referrers + * + * @param string $owner + * @param string $repository + * + * @return array + */ + public function referers($owner, $repository) + { + return $this->get('/repos/'.rawurlencode($owner).'/'.rawurlencode($repository).'/traffic/popular/referrers'); + } + /** + * @link https://developer.github.com/v3/repos/traffic/#list-paths + * + * @param string $owner + * @param string $repository + * + * @return array + */ + public function paths($owner, $repository) + { + return $this->get('/repos/'.rawurlencode($owner).'/'.rawurlencode($repository).'/traffic/popular/paths'); + } + /** + * @link https://developer.github.com/v3/repos/traffic/#views + * + * @param string $owner + * @param string $repository + * @param string|day $per + * + * @return array + */ + public function views($owner, $repository, $per = 'day') + { + return $this->get('/repos/'.rawurlencode($owner).'/'.rawurlencode($repository).'/traffic/views?per='.rawurlencode($per)); + } + /** + * @link https://developer.github.com/v3/repos/traffic/#clones + * + * @param string $owner + * @param string $repository + * @param string|day $per + * + * @return array + */ + public function clones($owner, $repository, $per = 'day') + { + return $this->get('/repos/'.rawurlencode($owner).'/'.rawurlencode($repository).'/traffic/clones?per='.rawurlencode($per)); + } +} diff --git a/test/Github/Tests/Api/Repository/TrafficTest.php b/test/Github/Tests/Api/Repository/TrafficTest.php new file mode 100644 index 00000000000..5110c546240 --- /dev/null +++ b/test/Github/Tests/Api/Repository/TrafficTest.php @@ -0,0 +1,79 @@ + "github.com","count" => 112,"uniques" => 15]); + + $api = $this->getApiMock(); + + $api->expects($this->once()) + ->method('get') + ->with('/repos/knplabs/php-github-api/traffic/popular/referrers') + ->will($this->returnValue($expectedValue)); + + $result = $api->referers('knplabs', 'php-github-api'); + + $this->assertEquals($expectedValue, $result); + } + + public function shouldgetPaths() + { + $expectedValue = json_encode(["path" => "/knplabs/php-github-api","title" => "KnpLabs/php-github-api: A simple PHP GitHub API client, Object Oriented, tested and documented. For 5.5+.","count" => 203,"uniques" => 54]); + + $api = $this->getApiMock(); + + $api->expects($this->once()) + ->method('get') + ->with('/repos/knplabs/php-github-api/traffic/popular/paths') + ->will($this->returnValue($expectedValue)); + + $result = $api->paths('knplabs', 'php-github-api'); + + $this->assertEquals($expectedValue, $result); + } + + public function shouldgetViews() + { + $expectedValue = json_encode(["count" => 813,"uniques" => 61,"views" => [["timestamp" => "2017-03-12T00:00:00Z","count" => 40,"uniques" => 3]]]); + + $api = $this->getApiMock(); + + $api->expects($this->once()) + ->method('get') + ->with('/repos/knplabs/php-github-api/traffic/views?per=day') + ->will($this->returnValue($expectedValue)); + + $result = $api->views('knplabs', 'php-github-api'); + + $this->assertEquals($expectedValue, $result); + } + + public function shouldgetClones() + { + $expectedValue = json_encode(["count" => 813,"uniques" => 61,"clones" => [["timestamp" => "2017-03-12T00:00:00Z","count" => 14,"uniques" => 8]]]); + + $api = $this->getApiMock(); + + $api->expects($this->once()) + ->method('get') + ->with('/repos/knplabs/php-github-api/traffic/clones?per=day') + ->will($this->returnValue($expectedValue)); + + $result = $api->clones('knplabs', 'php-github-api'); + + $this->assertEquals($expectedValue, $result); + } + + protected function getApiClass() + { + return \Github\Api\Repository\Traffic::class; + } +}