OEmbedTestTrait.php

Same filename in other branches
  1. 9 core/modules/media/tests/src/Traits/OEmbedTestTrait.php
  2. 10 core/modules/media/tests/src/Traits/OEmbedTestTrait.php
  3. 11.x core/modules/media/tests/src/Traits/OEmbedTestTrait.php

Namespace

Drupal\Tests\media\Traits

File

core/modules/media/tests/src/Traits/OEmbedTestTrait.php

View source
<?php

namespace Drupal\Tests\media\Traits;

use Drupal\Component\Serialization\Json;
use Drupal\Core\Url;
use Drupal\media\OEmbed\Provider;

/**
 * Contains helper functions for testing oEmbed functionality in isolation.
 */
trait OEmbedTestTrait {
    
    /**
     * Returns the relative path to the oEmbed fixtures directory.
     *
     * @return string
     */
    protected function getFixturesDirectory() {
        return drupal_get_path('module', 'media') . '/tests/fixtures/oembed';
    }
    
    /**
     * Returns the absolute URL of the oEmbed fixtures directory.
     *
     * @return string
     */
    protected function getFixturesUrl() {
        return $this->baseUrl . '/' . $this->getFixturesDirectory();
    }
    
    /**
     * Forces Media to use the provider database in the fixtures directory.
     */
    protected function useFixtureProviders() {
        $this->config('media.settings')
            ->set('oembed_providers_url', $this->getFixturesUrl() . '/providers.json')
            ->save();
    }
    
    /**
     * Configures the http_client service so that all requests are carried out
     * relative to the URL of the fixtures directory. For example, after calling
     * this method, a request for foobar.html will actually request
     * http://test-site/path/to/fuxtures/foobar.html.
     */
    protected function lockHttpClientToFixtures() {
        $this->writeSettings([
            'settings' => [
                'http_client_config' => [
                    'base_uri' => (object) [
                        'value' => $this->getFixturesUrl() . '/',
                        'required' => TRUE,
                    ],
                ],
            ],
        ]);
    }
    
    /**
     * Ensures that all oEmbed provider endpoints defined in the fixture
     * providers.json will use the media_test_oembed.resource.get route as their
     * URL.
     *
     * This requires the media_test_oembed module in order to work.
     */
    protected function hijackProviderEndpoints() {
        $providers = $this->getFixturesDirectory() . '/providers.json';
        $providers = file_get_contents($providers);
        $providers = Json::decode($providers);
        $endpoint_url = Url::fromRoute('media_test_oembed.resource.get')->setAbsolute()
            ->toString();
        
        /** @var \Drupal\media_test_oembed\ProviderRepository $provider_repository */
        $provider_repository = $this->container
            ->get('media.oembed.provider_repository');
        foreach ($providers as &$provider) {
            foreach ($provider['endpoints'] as &$endpoint) {
                $endpoint['url'] = $endpoint_url;
            }
            $provider_repository->setProvider(new Provider($provider['provider_name'], $provider['provider_url'], $provider['endpoints']));
        }
    }

}

Traits

Title Deprecated Summary
OEmbedTestTrait Contains helper functions for testing oEmbed functionality in isolation.

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