Skip to content

Commit

Permalink
Added unit test for case of GitHub API returning 204 empty content in…
Browse files Browse the repository at this point in the history
… ResultPager KnpLabs#1091
  • Loading branch information
tomcorbett committed Mar 24, 2024
1 parent 4fff555 commit eaa7993
Showing 1 changed file with 63 additions and 0 deletions.
63 changes: 63 additions & 0 deletions test/Github/Tests/ResultPagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
use Github\Api\Organization\Members;
use Github\Api\Repository\Statuses;
use Github\Api\Search;
use Github\Api\Repo;
use Github\Client;
use Github\ResultPager;
use Github\Tests\Mock\PaginatedResponse;
Expand Down Expand Up @@ -116,6 +117,40 @@ public function shouldGetAllSearchResults()
$this->assertCount($amountLoops * count($content['items']), $result);
}

/**
* @test
*/
public function shouldHandleEmptyContributorListWith204Header()
{
// Set up a 204 response with an empty body
$response = new Response(204, [], '');
$username = 'testuser';
$reponame = 'testrepo';

// Mock the HttpClient to return the empty response
$httpClientMock = $this->getMockBuilder(HttpClient::class)
->onlyMethods(['sendRequest'])
->getMock();
$httpClientMock
->method('sendRequest')
->willReturn($response);

$client = Client::createWithHttpClient($httpClientMock);

$repoApi = new Repo($client);

$paginator = $this->getMockBuilder(ResultPager::class)
->setConstructorArgs([$client]) // Pass the Client in the constructor
->onlyMethods(['fetchAll'])
->getMock();
$paginator->expects($this->once())
->method('fetchAll')
->with($repoApi, 'contributors', [$username, $reponame])
->willReturn([]);

$this->assertEquals([], $paginator->fetchAll($repoApi, 'contributors', [$username, $reponame]));
}

public function testFetch()
{
$result = ['foo'];
Expand Down Expand Up @@ -201,6 +236,34 @@ public function testFetchAllWithoutKeys()
$this->assertCount(9, $result);
}

public function testFetchAll()
{
$content = [
['title' => 'issue 1'],
['title' => 'issue 2'],
['title' => 'issue 3'],
];

$response = new PaginatedResponse(3, $content);

// httpClient mock
$httpClientMock = $this->getMockBuilder(HttpClient::class)
->onlyMethods(['sendRequest'])
->getMock();
$httpClientMock
->expects($this->exactly(3))
->method('sendRequest')
->willReturn($response);

$client = Client::createWithHttpClient($httpClientMock);

$api = new Issue($client);
$paginator = new ResultPager($client);
$result = $paginator->fetchAll($api, 'all', ['knplabs', 'php-github-api']);

$this->assertCount(9, $result);
}

/**
* @group legacy
*/
Expand Down

0 comments on commit eaa7993

Please sign in to comment.