protected function ResourceTestBase::getExpectedCollectionResponse in Drupal 9
Same name and namespace in other branches
- 8 core/modules/jsonapi/tests/src/Functional/ResourceTestBase.php \Drupal\Tests\jsonapi\Functional\ResourceTestBase::getExpectedCollectionResponse()
Returns a JSON:API collection document for the expected entities.
Parameters
\Drupal\Core\Entity\EntityInterface[] $collection: The entities for the collection.
string $self_link: The self link for the collection response document.
array $request_options: Request options to apply.
array|null $included_paths: (optional) Any include paths that should be appended to the expected response.
bool $filtered: Whether the collection is filtered or not.
Return value
\Drupal\jsonapi\ResourceResponse A ResourceResponse for the expected entity collection.
See also
\GuzzleHttp\ClientInterface::request()
2 calls to ResourceTestBase::getExpectedCollectionResponse()
- ResourceTestBase::testCollection in core/
modules/ jsonapi/ tests/ src/ Functional/ ResourceTestBase.php - Tests GETting a collection of resources.
- ResourceTestBase::testRevisions in core/
modules/ jsonapi/ tests/ src/ Functional/ ResourceTestBase.php - Tests individual and collection revisions.
File
- core/
modules/ jsonapi/ tests/ src/ Functional/ ResourceTestBase.php, line 1246
Class
- ResourceTestBase
- Subclass this for every JSON:API resource type.
Namespace
Drupal\Tests\jsonapi\FunctionalCode
protected function getExpectedCollectionResponse(array $collection, $self_link, array $request_options, array $included_paths = NULL, $filtered = FALSE) {
$resource_identifiers = array_map([
static::class,
'toResourceIdentifier',
], $collection);
$individual_responses = static::toResourceResponses($this
->getResponses(static::getResourceLinks($resource_identifiers), $request_options));
$merged_response = static::toCollectionResourceResponse($individual_responses, $self_link, TRUE);
$merged_document = $merged_response
->getResponseData();
if (!isset($merged_document['data'])) {
$merged_document['data'] = [];
}
$cacheability = static::getExpectedCollectionCacheability($this->account, $collection, NULL, $filtered);
$cacheability
->setCacheMaxAge($merged_response
->getCacheableMetadata()
->getCacheMaxAge());
$collection_response = new CacheableResourceResponse($merged_document);
$collection_response
->addCacheableDependency($cacheability);
if (is_null($included_paths)) {
return $collection_response;
}
$related_responses = array_reduce($collection, function ($related_responses, EntityInterface $entity) use ($included_paths, $request_options, $self_link) {
if (!$entity
->access('view', $this->account) && !$entity
->access('view label', $this->account)) {
return $related_responses;
}
$expected_related_responses = $this
->getExpectedRelatedResponses($included_paths, $request_options, $entity);
if (empty($related_responses)) {
return $expected_related_responses;
}
foreach ($included_paths as $included_path) {
$both_responses = [
$related_responses[$included_path],
$expected_related_responses[$included_path],
];
$related_responses[$included_path] = static::toCollectionResourceResponse($both_responses, $self_link, TRUE);
}
return $related_responses;
}, []);
return static::decorateExpectedResponseForIncludedFields($collection_response, $related_responses);
}