function GetDocumentFromResponseTrait::getDocumentFromResponse

Same name in other branches
  1. 11.x core/modules/jsonapi/tests/src/Traits/GetDocumentFromResponseTrait.php \Drupal\Tests\jsonapi\Traits\GetDocumentFromResponseTrait::getDocumentFromResponse()

Retrieve document from response, with basic validation.

Parameters

\Psr\Http\Message\ResponseInterface $response: Response to extract JSON:API document from.

bool $validate: Determines whether the data is validated or not. Defaults to TRUE.

Return value

?array JSON:API document extracted from the response, or NULL.

Throws

\PHPUnit\Framework\AssertionFailedError Thrown when the document does not pass basic validation against the spec.

40 calls to GetDocumentFromResponseTrait::getDocumentFromResponse()
CommentExtrasTest::testPostIndividualSkipCommentApproval in core/modules/jsonapi/tests/src/Functional/CommentExtrasTest.php
Tests POSTing a comment with and without 'skip comment approval'.
CommentTest::testCollectionFilterAccess in core/modules/jsonapi/tests/src/Functional/CommentTest.php
ConfigurableLanguageTest::testGetIndividualDefaultConfig in core/modules/jsonapi/tests/src/Functional/ConfigurableLanguageTest.php
Tests a GET request for a default config entity, which has a _core key.
EntryPointTest::testEntryPoint in core/modules/jsonapi/tests/src/Functional/EntryPointTest.php
Test GET to the entry point.
ExternalNormalizersTest::testFormatAgnosticNormalizers in core/modules/jsonapi/tests/src/Functional/ExternalNormalizersTest.php
Tests a format-agnostic normalizer.

... See full list

File

core/modules/jsonapi/tests/src/Traits/GetDocumentFromResponseTrait.php, line 30

Class

GetDocumentFromResponseTrait
Test trait for retrieving the JSON:API document from a response.

Namespace

Drupal\Tests\jsonapi\Traits

Code

protected function getDocumentFromResponse(ResponseInterface $response, bool $validate = TRUE) : ?array {
    assert($this instanceof TestCase);
    $document = Json::decode((string) $response->getBody());
    if (isset($document['data']) && isset($document['errors'])) {
        $this->fail('Document contains both data and errors members; only one is allowed.');
    }
    if ($validate === TRUE && !isset($document['data'])) {
        if (isset($document['errors'])) {
            $errors = [];
            foreach ($document['errors'] as $error) {
                $errors[] = $error['title'] . ' (' . $error['status'] . '): ' . $error['detail'];
            }
            $this->fail('Missing expected data member in document. Error(s): ' . PHP_EOL . '  ' . implode('  ' . PHP_EOL, $errors));
        }
        $this->fail('Missing both data and errors members in document; either is required. Response body: ' . PHP_EOL . '  ' . $response->getBody());
    }
    return $document;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.