function 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.
 
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\TraitsCode
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.