Mercurial > hg > isophonics-drupal-site
diff core/modules/media/tests/src/Functional/UrlResolverTest.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/media/tests/src/Functional/UrlResolverTest.php Thu Feb 28 13:21:36 2019 +0000 @@ -0,0 +1,133 @@ +<?php + +namespace Drupal\Tests\media\Functional; + +use Drupal\Tests\media\Traits\OEmbedTestTrait; + +/** + * Tests the oEmbed URL resolver service. + * + * @coversDefaultClass \Drupal\media\OEmbed\UrlResolver + * + * @group media + */ +class UrlResolverTest extends MediaFunctionalTestBase { + + use OEmbedTestTrait; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + $this->lockHttpClientToFixtures(); + $this->useFixtureProviders(); + } + + /** + * Data provider for testEndpointMatching(). + * + * @see ::testEndpointMatching() + * + * @return array + */ + public function providerEndpointMatching() { + return [ + 'match by endpoint: Twitter' => [ + 'https://twitter.com/Dries/status/999985431595880448', + 'https://publish.twitter.com/oembed?url=https%3A//twitter.com/Dries/status/999985431595880448', + ], + 'match by endpoint: Vimeo' => [ + 'https://vimeo.com/14782834', + 'https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/14782834', + ], + 'match by endpoint: CollegeHumor' => [ + 'http://www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime', + 'http://www.collegehumor.com/oembed.json?url=http%3A//www.collegehumor.com/video/40002870/lets-not-get-a-drink-sometime', + ], + ]; + } + + /** + * Tests resource URL resolution when the asset URL can be matched to a + * provider endpoint. + * + * @covers ::getProviderByUrl + * @covers ::getResourceUrl + * + * @param string $url + * The asset URL to resolve. + * @param string $resource_url + * The expected oEmbed resource URL of the asset. + * + * @dataProvider providerEndpointMatching + */ + public function testEndpointMatching($url, $resource_url) { + $this->assertSame( + $resource_url, + $this->container->get('media.oembed.url_resolver')->getResourceUrl($url) + ); + } + + /** + * Tests that hook_oembed_resource_url_alter() is invoked. + * + * @depends testEndpointMatching + */ + public function testResourceUrlAlterHook() { + $this->container->get('module_installer')->install(['media_test_oembed']); + + $resource_url = $this->container->get('media.oembed.url_resolver') + ->getResourceUrl('https://vimeo.com/14782834'); + + $this->assertContains('altered=1', parse_url($resource_url, PHP_URL_QUERY)); + } + + /** + * Data provider for testUrlDiscovery(). + * + * @see ::testUrlDiscovery() + * + * @return array + */ + public function providerUrlDiscovery() { + return [ + 'JSON resource' => [ + 'video_vimeo.html', + 'https://vimeo.com/api/oembed.json?url=video_vimeo.html', + ], + 'XML resource' => [ + 'video_collegehumor.html', + // The endpoint does not explicitly declare that it supports XML, so + // only JSON support is assumed, which is why the discovered URL + // contains '.json'. However, the fetched HTML file contains a + // relationship to an XML representation of the resource, with the + // application/xml+oembed MIME type. + 'http://www.collegehumor.com/oembed.json?url=video_collegehumor.html', + ], + ]; + } + + /** + * Tests URL resolution when the resource URL must be actively discovered by + * scanning the asset. + * + * @param string $url + * The asset URL to resolve. + * @param string $resource_url + * The expected oEmbed resource URL of the asset. + * + * @covers ::discoverResourceUrl + * @covers ::getProviderByUrl + * @covers ::getResourceUrl + * + * @dataProvider providerUrlDiscovery + */ + public function testUrlDiscovery($url, $resource_url) { + $this->assertSame( + $this->container->get('media.oembed.url_resolver')->getResourceUrl($url), + $resource_url + ); + } + +}