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 }
|