X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fvideo_embed_field%2Ftests%2Fsrc%2FKernel%2FFieldOutputTest.php;fp=web%2Fmodules%2Fcontrib%2Fvideo_embed_field%2Ftests%2Fsrc%2FKernel%2FFieldOutputTest.php;h=4836892ac04217d6707f27f918a89dae81a1f901;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/video_embed_field/tests/src/Kernel/FieldOutputTest.php b/web/modules/contrib/video_embed_field/tests/src/Kernel/FieldOutputTest.php new file mode 100644 index 000000000..4836892ac --- /dev/null +++ b/web/modules/contrib/video_embed_field/tests/src/Kernel/FieldOutputTest.php @@ -0,0 +1,505 @@ + [ + 'https://www.youtube.com/watch?v=fdbFVWupSsw', + [ + 'type' => 'video_embed_field_thumbnail', + 'settings' => [], + ], + [ + '#theme' => 'image', + '#uri' => 'public://video_thumbnails/fdbFVWupSsw.jpg', + ], + ], + 'YouTube: Thumbnail With Image Style' => [ + 'https://www.youtube.com/watch?v=fdbFVWupSsw', + [ + 'type' => 'video_embed_field_thumbnail', + 'settings' => [ + 'image_style' => 'thumbnail', + ], + ], + [ + '#theme' => 'image_style', + '#uri' => 'public://video_thumbnails/fdbFVWupSsw.jpg', + '#style_name' => 'thumbnail', + ], + ], + 'YouTube: Embed Code' => [ + 'https://www.youtube.com/watch?v=fdbFVWupSsw', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'video_embed_iframe', + '#provider' => 'youtube', + '#url' => 'https://www.youtube.com/embed/fdbFVWupSsw', + '#query' => [ + 'autoplay' => '1', + 'start' => '0', + 'rel' => '0', + ], + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + 'YouTube: Time-index Embed Code' => [ + 'https://www.youtube.com/watch?v=fdbFVWupSsw&t=100', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'video_embed_iframe', + '#provider' => 'youtube', + '#url' => 'https://www.youtube.com/embed/fdbFVWupSsw', + '#query' => [ + 'autoplay' => '1', + 'start' => '100', + 'rel' => '0', + ], + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + 'YouTube: Language Specified Embed Code' => [ + 'https://www.youtube.com/watch?v=fdbFVWupSsw&hl=fr', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'video_embed_iframe', + '#provider' => 'youtube', + '#url' => 'https://www.youtube.com/embed/fdbFVWupSsw', + '#query' => [ + 'autoplay' => '1', + 'start' => '0', + 'rel' => '0', + 'cc_lang_pref' => 'fr', + ], + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + 'Vimeo: Thumbnail' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_thumbnail', + 'settings' => [], + ], + [ + '#theme' => 'image', + '#uri' => 'public://video_thumbnails/80896303.jpg', + ], + ], + 'Vimeo: Embed Code' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'video_embed_iframe', + '#provider' => 'vimeo', + '#url' => 'https://player.vimeo.com/video/80896303', + '#query' => [ + 'autoplay' => '1', + ], + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + 'Vimeo: Autoplaying Embed Code' => [ + 'https://vimeo.com/80896303#t=150s', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'video_embed_iframe', + '#provider' => 'vimeo', + '#url' => 'https://player.vimeo.com/video/80896303', + '#query' => [ + 'autoplay' => '1', + ], + '#fragment' => 't=150s', + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + 'Linked Thumbnail: Content' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_thumbnail', + 'settings' => ['link_image_to' => Thumbnail::LINK_CONTENT], + ], + [ + '#type' => 'link', + '#title' => [ + '#theme' => 'image', + '#uri' => 'public://video_thumbnails/80896303.jpg', + ], + '#url' => 'entity.entity_test.canonical', + ], + ], + 'Linked Thumbnail: Provider' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_thumbnail', + 'settings' => ['link_image_to' => Thumbnail::LINK_PROVIDER], + ], + [ + '#type' => 'link', + '#title' => [ + '#theme' => 'image', + '#uri' => 'public://video_thumbnails/80896303.jpg', + ], + '#url' => 'https://vimeo.com/80896303', + ], + ], + 'Colorbox Modal: Linked Image & Autoplay' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_colorbox', + 'settings' => [ + 'link_image_to' => Thumbnail::LINK_PROVIDER, + 'autoplay' => TRUE, + 'width' => 500, + 'height' => 500, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'container', + '#attributes' => [ + 'data-video-embed-field-modal' => '', + 'class' => ['video-embed-field-launch-modal'], + ], + '#attached' => [ + 'library' => [ + 'video_embed_field/colorbox', + 'video_embed_field/responsive-video', + ], + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + 'children' => [ + '#type' => 'link', + '#title' => [ + '#theme' => 'image', + '#uri' => 'public://video_thumbnails/80896303.jpg', + ], + '#url' => 'https://vimeo.com/80896303', + ], + ], + ], + 'Colorbox Modal: Responsive' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_colorbox', + 'settings' => [ + 'link_image_to' => Thumbnail::LINK_PROVIDER, + 'autoplay' => TRUE, + 'width' => 900, + 'height' => 450, + 'responsive' => TRUE, + 'modal_max_width' => 999, + ], + ], + [ + '#type' => 'container', + '#attributes' => [ + 'data-video-embed-field-modal' => '
', + 'class' => [ + 'video-embed-field-launch-modal', + ], + ], + '#attached' => [ + 'library' => [ + 'video_embed_field/colorbox', + 'video_embed_field/responsive-video', + ], + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + 'children' => [ + '#type' => 'link', + '#title' => [ + '#theme' => 'image', + '#uri' => 'public://video_thumbnails/80896303.jpg', + ], + '#url' => 'https://vimeo.com/80896303', + ], + ], + ], + 'Video: Responsive' => [ + 'https://vimeo.com/80896303', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => TRUE, + ], + ], + [ + '#type' => 'container', + '#attached' => [ + 'library' => ['video_embed_field/responsive-video'], + ], + '#attributes' => [ + 'class' => ['video-embed-field-responsive-video'], + ], + 'children' => [ + '#type' => 'video_embed_iframe', + '#provider' => 'vimeo', + '#url' => 'https://player.vimeo.com/video/80896303', + '#query' => [ + 'autoplay' => '1', + ], + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + ], + 'YouTube Playlist' => [ + 'https://www.youtube.com/watch?v=xoJH3qZwsHc&list=PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', + [ + 'type' => 'video_embed_field_video', + 'settings' => [ + 'width' => 100, + 'height' => 100, + 'autoplay' => TRUE, + 'responsive' => FALSE, + ], + ], + [ + '#type' => 'video_embed_iframe', + '#provider' => 'youtube_playlist', + '#url' => 'https://www.youtube.com/embed/videoseries', + '#query' => [ + 'list' => 'PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', + ], + '#attributes' => [ + 'width' => '100', + 'height' => '100', + 'frameborder' => '0', + 'allowfullscreen' => 'allowfullscreen', + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + ], + ], + 'No provider (video formatter)' => [ + 'http://example.com/not/a/video/url', + [ + 'type' => 'video_embed_field_video', + 'settings' => [], + ], + [ + '#theme' => 'video_embed_field_missing_provider', + ], + ], + 'No provider (thumbnail formatter)' => [ + 'http://example.com/not/a/video/url', + [ + 'type' => 'video_embed_field_thumbnail', + 'settings' => [], + ], + [ + '#theme' => 'video_embed_field_missing_provider', + ], + ], + 'No provider (colorbox modal)' => [ + 'http://example.com/not/a/video/url', + [ + 'type' => 'video_embed_field_colorbox', + ], + [ + '#type' => 'container', + '#attributes' => [ + 'data-video-embed-field-modal' => 'No video provider was found to handle the given URL. See the documentation for more information.', + 'class' => ['video-embed-field-launch-modal'], + ], + '#attached' => [ + 'library' => [ + 'video_embed_field/colorbox', + 'video_embed_field/responsive-video', + ], + ], + '#cache' => [ + 'contexts' => [ + 'user.permissions', + ], + ], + 'children' => [ + '#theme' => 'video_embed_field_missing_provider', + ], + ], + ], + ]; + } + + /** + * Test the embed field. + * + * @dataProvider renderedFieldTestCases + */ + public function testEmbedField($url, $settings, $expected_field_item_output) { + + $field_output = $this->getPreparedFieldOutput($url, $settings); + + // Assert the specific field output at delta 1 matches the expected test + // data. + $this->assertEquals($expected_field_item_output, $field_output[0]); + } + + /** + * Get and prepare the output of a field. + * + * @param string $url + * The video URL. + * @param array $settings + * An array of formatter settings. + * + * @return array + * The rendered prepared field output. + */ + protected function getPreparedFieldOutput($url, $settings) { + $entity = EntityTest::create(); + $entity->{$this->fieldName}->value = $url; + $entity->save(); + + $field_output = $this->container->get('renderer')->executeInRenderContext(new RenderContext(), function() use ($entity, $settings) { + return $entity->{$this->fieldName}->view($settings); + }); + + // Prepare the field output to make it easier to compare our test data + // values against. + array_walk_recursive($field_output[0], function (&$value) { + // Prevent circular references with comparing field output that + // contains url objects. + if ($value instanceof Url) { + $value = $value->isRouted() ? $value->getRouteName() : $value->getUri(); + } + // Trim to prevent stray whitespace for the colorbox formatters with + // early rendering. + $value = $this->stripWhitespace($value); + }); + + return $field_output; + } + +}