You are here

protected function EntityShareClientFunctionalTestBase::discoverJsonApiEndpoints in Entity Share 8.2

Same name and namespace in other branches
  1. 8.3 modules/entity_share_client/tests/src/Functional/EntityShareClientFunctionalTestBase.php \Drupal\Tests\entity_share_client\Functional\EntityShareClientFunctionalTestBase::discoverJsonApiEndpoints()

Helper function to populate the request service with responses.

Parameters

\GuzzleHttp\Client $http_client: The http client.

string $url: THe url to request.

6 calls to EntityShareClientFunctionalTestBase::discoverJsonApiEndpoints()
CliTest::populateRequestService in modules/entity_share_client/tests/src/Functional/CliTest.php
Helper function to populate the request service with responses.
ContentEntityReferenceTest::populateRequestService in modules/entity_share_client/tests/src/Functional/ContentEntityReferenceTest.php
Helper function to populate the request service with responses.
EntityShareAsyncFunctionalTest::populateRequestService in modules/entity_share_async/tests/src/Functional/EntityShareAsyncFunctionalTest.php
Helper function to populate the request service with responses.
EntityShareClientFunctionalTestBase::populateRequestService in modules/entity_share_client/tests/src/Functional/EntityShareClientFunctionalTestBase.php
Helper function to populate the request service with responses.
InfiniteLoopTest::populateRequestService in modules/entity_share_client/tests/src/Functional/InfiniteLoopTest.php
Helper function to populate the request service with responses.

... See full list

File

modules/entity_share_client/tests/src/Functional/EntityShareClientFunctionalTestBase.php, line 406

Class

EntityShareClientFunctionalTestBase
Base class for Entity share server functional tests.

Namespace

Drupal\Tests\entity_share_client\Functional

Code

protected function discoverJsonApiEndpoints(Client $http_client, $url) {

  // Prevents infinite loop.
  if (in_array($url, $this->visitedUrlsDuringSetup)) {
    return;
  }
  $this->visitedUrlsDuringSetup[] = $url;
  $response = $this->requestService
    ->request($http_client, 'GET', $url);
  $json_response = Json::decode((string) $response
    ->getBody());

  // Loop on the data and relationships to get expected endpoints.
  if (is_array($json_response['data'])) {
    foreach (EntityShareUtility::prepareData($json_response['data']) as $data) {
      if (isset($data['relationships'])) {
        foreach ($data['relationships'] as $field_data) {
          if (isset($field_data['links']['related']['href'])) {
            $this
              ->discoverJsonApiEndpoints($http_client, $field_data['links']['related']['href']);
          }
        }
      }

      // File entity.
      if ($data['type'] == 'file--file' && isset($data['attributes']['uri']['url'])) {

        // Need to handle exception for the test where the physical file has
        // been deleted.
        try {
          $this->requestService
            ->request($this->remoteManager
            ->prepareClient($this->remote), 'GET', $data['attributes']['uri']['url']);
        } catch (ClientException $exception) {

          // Do nothing.
        }
      }
    }
  }

  // Handle pagination.
  if (isset($json_response['links']['next']['href'])) {
    $this
      ->discoverJsonApiEndpoints($http_client, $json_response['links']['next']['href']);
  }
}