public function assertGetEndpoint($uri, $apiResp, array $filters = [], $collect = true, $maxResults = null)
{
$envelope = null;
$objects = [];
$constraint = new ResponseBodyConstraint($apiResp);
if ($apiResp instanceof ListResponse) {
do {
$params = $filters;
if ($maxResults) {
$params[ApiController::QUERY_PARAM_MAX_RESULTS] = $maxResults;
}
if (isset($envelope->pagination->next)) {
$parts = parse_url($envelope->pagination->next);
parse_str($parts['query'], $params);
}
$response = $this->request($uri, Request::METHOD_GET, $params);
$this->assertEquals(200, $response->status, sprintf('%s. Api url %s', $this->printResponseError($response), $uri));
/* @var $envelope ListResultEnvelope */
$envelope = $response->getBody();
$this->assertNotEmpty($envelope);
$this->assertObjectHasAttribute('meta', $envelope);
$this->assertObjectHasAttribute('data', $envelope);
$this->assertObjectHasAttribute('pagination', $envelope);
$this->assertObjectNotHasAttribute('errors', $envelope);
$this->assertThat($envelope, $constraint, "Api url {$uri}");
if ($collect) {
$objects[] = $envelope->data;
}
} while (!empty($envelope->pagination->next) && !$maxResults);
} else {
$response = $this->request($uri, Request::METHOD_GET, $filters);
$this->assertEquals(200, $response->status, sprintf('%s. Api url %s', $this->printResponseError($response), $uri));
/* @var $envelope ResultEnvelope */
$envelope = $response->getBody();
$this->assertNotEmpty($envelope);
$this->assertObjectHasAttribute('meta', $envelope);
$this->assertObjectHasAttribute('data', $envelope);
$this->assertObjectNotHasAttribute('errors', $envelope);
$this->assertThat($envelope, $constraint, "Api url {$uri}");
if ($collect) {
$objects[] = [$envelope->data];
}
}
return empty($objects) ? [] : call_user_func_array('array_merge', $objects);
}