/** * Encode DataObject collection. * * @param CollectionInterface $action_result * @param ResponseInterface $response * @return ResponseInterface */ private function encodeCollection(CollectionInterface $action_result, ResponseInterface $response) { $response = $response->write(json_encode($action_result))->withStatus(200); if ($action_result->canBeEtagged()) { if ($action_result->getApplicationIdentifier() != $this->app_identifier) { $action_result->setApplicationIdentifier($this->app_identifier); // Sign collection etag with app identifier } $response = $this->cache_provider->withEtag($response, $action_result->getEtag($this->user_identifier)); $response = $this->cache_provider->withExpires($response, '+90 days'); } if ($action_result->getCurrentPage() && $action_result->getItemsPerPage()) { $response = $response->withHeader('X-PaginationCurrentPage', $action_result->getCurrentPage())->withHeader('X-PaginationItemsPerPage', $action_result->getItemsPerPage())->withHeader('X-PaginationTotalItems', $action_result->count()); } else { $response = $response->withHeader('X-PaginationCurrentPage', 0)->withHeader('X-PaginationItemsPerPage', 0)->withHeader('X-PaginationTotalItems', $action_result->count()); } return $response; }
/** * @expectedException \InvalidArgumentException */ public function testWithETagInvalidType() { $etag = 'abc'; $cacheProvider = new CacheProvider(); $cacheProvider->withEtag(new Response(), $etag, 'bork'); }