You are here

class OEmbedIframeControllerTest in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/media/tests/src/Kernel/OEmbedIframeControllerTest.php \Drupal\Tests\media\Kernel\OEmbedIframeControllerTest
  2. 9 core/modules/media/tests/src/Kernel/OEmbedIframeControllerTest.php \Drupal\Tests\media\Kernel\OEmbedIframeControllerTest

@coversDefaultClass \Drupal\media\Controller\OEmbedIframeController

@group media

Hierarchy

Expanded class hierarchy of OEmbedIframeControllerTest

File

core/modules/media/tests/src/Kernel/OEmbedIframeControllerTest.php, line 17

Namespace

Drupal\Tests\media\Kernel
View source
class OEmbedIframeControllerTest extends MediaKernelTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'media_test_oembed',
  ];

  /**
   * Data provider for testBadHashParameter().
   *
   * @return array
   */
  public function providerBadHashParameter() {
    return [
      'no hash' => [
        '',
      ],
      'invalid hash' => [
        $this
          ->randomString(),
      ],
    ];
  }

  /**
   * Tests validation of the 'hash' query string parameter.
   *
   * @param string $hash
   *   The 'hash' query string parameter.
   *
   * @dataProvider providerBadHashParameter
   *
   * @covers ::render
   */
  public function testBadHashParameter($hash) {

    /** @var callable $controller */
    $controller = $this->container
      ->get('controller_resolver')
      ->getControllerFromDefinition('\\Drupal\\media\\Controller\\OEmbedIframeController::render');
    $this
      ->assertIsCallable($controller);
    $this
      ->expectException('\\Symfony\\Component\\HttpKernel\\Exception\\AccessDeniedHttpException');
    $this
      ->expectExceptionMessage('This resource is not available');
    $request = new Request([
      'url' => 'https://example.com/path/to/resource',
      'hash' => $hash,
    ]);
    $controller($request);
  }

  /**
   * Tests that resources can be used in media_oembed_iframe preprocess.
   *
   * @see media_test_oembed_preprocess_media_oembed_iframe()
   *
   * @covers ::render
   */
  public function testResourcePassedToPreprocess() {
    $hash = $this->container
      ->get('media.oembed.iframe_url_helper')
      ->getHash('', 0, 0);
    $url_resolver = $this
      ->prophesize('\\Drupal\\media\\OEmbed\\UrlResolverInterface');
    $resource_fetcher = $this
      ->prophesize('\\Drupal\\media\\OEmbed\\ResourceFetcherInterface');
    $provider = new Provider('YouTube', 'https://youtube.com', [
      [
        'url' => 'https://youtube.com/foo',
      ],
    ]);
    $resource = Resource::rich('<iframe src="https://youtube.com/watch?feature=oembed"></iframe>', 320, 240, $provider);
    $resource_fetcher
      ->fetchResource(Argument::cetera())
      ->willReturn($resource);
    $this->container
      ->set('media.oembed.url_resolver', $url_resolver
      ->reveal());
    $this->container
      ->set('media.oembed.resource_fetcher', $resource_fetcher
      ->reveal());
    $request = new Request([
      'url' => '',
      'hash' => $hash,
    ]);
    $response = $this->container
      ->get('html_response.attachments_processor')
      ->processAttachments(OEmbedIframeController::create($this->container)
      ->render($request));
    assert($response instanceof HtmlResponse);
    $content = $response
      ->getContent();

    // This query parameter is added by
    // media_test_oembed_preprocess_media_oembed_iframe() for YouTube videos.
    $this
      ->assertStringContainsString('&pasta=rigatoni', $content);
    $this
      ->assertStringContainsString('test.css', $content);
    $this
      ->assertContains('yo_there', $response
      ->getCacheableMetadata()
      ->getCacheTags());
    $this
      ->assertStringContainsString('text/html', $response->headers
      ->get('Content-Type'));
  }

}

Members