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