annotate core/modules/media/tests/src/Functional/UrlResolverTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@17 1 <?php
Chris@17 2
Chris@17 3 namespace Drupal\Tests\media\Functional;
Chris@17 4
Chris@17 5 use Drupal\Tests\media\Traits\OEmbedTestTrait;
Chris@17 6
Chris@17 7 /**
Chris@17 8 * Tests the oEmbed URL resolver service.
Chris@17 9 *
Chris@17 10 * @coversDefaultClass \Drupal\media\OEmbed\UrlResolver
Chris@17 11 *
Chris@17 12 * @group media
Chris@17 13 */
Chris@17 14 class UrlResolverTest extends MediaFunctionalTestBase {
Chris@17 15
Chris@17 16 use OEmbedTestTrait;
Chris@17 17
Chris@17 18 /**
Chris@17 19 * {@inheritdoc}
Chris@17 20 */
Chris@17 21 protected function setUp() {
Chris@17 22 parent::setUp();
Chris@17 23 $this->lockHttpClientToFixtures();
Chris@17 24 $this->useFixtureProviders();
Chris@17 25 }
Chris@17 26
Chris@17 27 /**
Chris@17 28 * Data provider for testEndpointMatching().
Chris@17 29 *
Chris@17 30 * @see ::testEndpointMatching()
Chris@17 31 *
Chris@17 32 * @return array
Chris@17 33 */
Chris@17 34 public function providerEndpointMatching() {
Chris@17 35 return [
Chris@17 36 'match by endpoint: Twitter' => [
Chris@17 37 'https://twitter.com/Dries/status/999985431595880448',
Chris@17 38 'https://publish.twitter.com/oembed?url=https%3A//twitter.com/Dries/status/999985431595880448',
Chris@17 39 ],
Chris@17 40 'match by endpoint: Vimeo' => [
Chris@17 41 'https://vimeo.com/14782834',
Chris@17 42 'https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/14782834',
Chris@17 43 ],
Chris@17 44 'match by endpoint: CollegeHumor' => [
Chris@17 45 'http://www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
Chris@17 46 'http://www.collegehumor.com/oembed.json?url=http%3A//www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime',
Chris@17 47 ],
Chris@17 48 ];
Chris@17 49 }
Chris@17 50
Chris@17 51 /**
Chris@17 52 * Tests resource URL resolution when the asset URL can be matched to a
Chris@17 53 * provider endpoint.
Chris@17 54 *
Chris@17 55 * @covers ::getProviderByUrl
Chris@17 56 * @covers ::getResourceUrl
Chris@17 57 *
Chris@17 58 * @param string $url
Chris@17 59 * The asset URL to resolve.
Chris@17 60 * @param string $resource_url
Chris@17 61 * The expected oEmbed resource URL of the asset.
Chris@17 62 *
Chris@17 63 * @dataProvider providerEndpointMatching
Chris@17 64 */
Chris@17 65 public function testEndpointMatching($url, $resource_url) {
Chris@17 66 $this->assertSame(
Chris@17 67 $resource_url,
Chris@17 68 $this->container->get('media.oembed.url_resolver')->getResourceUrl($url)
Chris@17 69 );
Chris@17 70 }
Chris@17 71
Chris@17 72 /**
Chris@17 73 * Tests that hook_oembed_resource_url_alter() is invoked.
Chris@17 74 *
Chris@17 75 * @depends testEndpointMatching
Chris@17 76 */
Chris@17 77 public function testResourceUrlAlterHook() {
Chris@17 78 $this->container->get('module_installer')->install(['media_test_oembed']);
Chris@17 79
Chris@17 80 $resource_url = $this->container->get('media.oembed.url_resolver')
Chris@17 81 ->getResourceUrl('https://vimeo.com/14782834');
Chris@17 82
Chris@17 83 $this->assertContains('altered=1', parse_url($resource_url, PHP_URL_QUERY));
Chris@17 84 }
Chris@17 85
Chris@17 86 /**
Chris@17 87 * Data provider for testUrlDiscovery().
Chris@17 88 *
Chris@17 89 * @see ::testUrlDiscovery()
Chris@17 90 *
Chris@17 91 * @return array
Chris@17 92 */
Chris@17 93 public function providerUrlDiscovery() {
Chris@17 94 return [
Chris@17 95 'JSON resource' => [
Chris@17 96 'video_vimeo.html',
Chris@17 97 'https://vimeo.com/api/oembed.json?url=video_vimeo.html',
Chris@17 98 ],
Chris@17 99 'XML resource' => [
Chris@17 100 'video_collegehumor.html',
Chris@17 101 // The endpoint does not explicitly declare that it supports XML, so
Chris@17 102 // only JSON support is assumed, which is why the discovered URL
Chris@17 103 // contains '.json'. However, the fetched HTML file contains a
Chris@17 104 // relationship to an XML representation of the resource, with the
Chris@17 105 // application/xml+oembed MIME type.
Chris@17 106 'http://www.collegehumor.com/oembed.json?url=video_collegehumor.html',
Chris@17 107 ],
Chris@17 108 ];
Chris@17 109 }
Chris@17 110
Chris@17 111 /**
Chris@17 112 * Tests URL resolution when the resource URL must be actively discovered by
Chris@17 113 * scanning the asset.
Chris@17 114 *
Chris@17 115 * @param string $url
Chris@17 116 * The asset URL to resolve.
Chris@17 117 * @param string $resource_url
Chris@17 118 * The expected oEmbed resource URL of the asset.
Chris@17 119 *
Chris@17 120 * @covers ::discoverResourceUrl
Chris@17 121 * @covers ::getProviderByUrl
Chris@17 122 * @covers ::getResourceUrl
Chris@17 123 *
Chris@17 124 * @dataProvider providerUrlDiscovery
Chris@17 125 */
Chris@17 126 public function testUrlDiscovery($url, $resource_url) {
Chris@17 127 $this->assertSame(
Chris@17 128 $this->container->get('media.oembed.url_resolver')->getResourceUrl($url),
Chris@17 129 $resource_url
Chris@17 130 );
Chris@17 131 }
Chris@17 132
Chris@17 133 }