blazy-8.x-2.x-dev/tests/src/Kernel/BlazyManagerTest.php
tests/src/Kernel/BlazyManagerTest.php
<?php namespace Drupal\Tests\blazy\Kernel; use Drupal\blazy\Blazy; use Drupal\blazy\BlazyDefault; use Drupal\blazy\Theme\BlazyTheme; /** * Tests the Blazy manager methods. * * @coversDefaultClass \Drupal\blazy\BlazyManager * @requires module media * * @group blazy */ class BlazyManagerTest extends BlazyKernelTestBase { /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $bundle = $this->bundle; $settings['fields']['field_text_multiple'] = 'text'; $this->setUpContentTypeTest($bundle, $settings); $this->setUpContentWithItems($bundle); $this->setUpRealImage(); } /** * Tests BlazyManager image. * * @param array $settings * The settings being tested. * @param bool $expected_has_responsive_image * Has the responsive image style ID. * * @covers ::preRenderBlazy * @covers ::postSettings * @covers \Drupal\blazy\Theme\Lightbox::build * @covers \Drupal\blazy\Theme\Lightbox::buildCaptions * @covers \Drupal\blazy\BlazyManager::postSettings * @dataProvider providerTestPreRenderImage */ public function testPreRenderImage(array $settings, $expected_has_responsive_image = FALSE) { $build = $this->data; $url = $settings['content_url'] ?? ''; $this->blazyManager->postSettings($settings); $blazies = $settings['blazies']; $blazies->set('count', $this->maxItems) ->set('entity.url', $url) ->set('media.embed_url', $settings['embed_url'] ?? '') // $blazies->set('is.lightbox', ($settings['lightbox'] ?? FALSE)); ->set('media.type', $settings['type'] ?? '') ->set('image.uri', $this->uri); $settings['count'] = $this->maxItems; $build['#settings'] = array_merge($build['#settings'], $settings); $switch_css = str_replace('_', '-', $settings['media_switch']); $element = $this->doPreRenderImage($build); $blazies = $build['#settings']['blazies']; if ($url && $blazies->get('switch') == 'content') { $this->assertEquals($blazies->get('entity.url'), $element['#url']); $this->assertArrayHasKey('#url', $element); } elseif ($blazies->get('lightbox.name')) { $this->assertArrayHasKey('data-' . $switch_css . '-trigger', $element['#url_attributes']); $this->assertArrayHasKey('#url', $element); } /* // @todo re-check why failed since 2.9-DEV. // $blazies = $element['#settings']['blazies']; // $this->assertEquals($expected_has_responsive_image, // !empty($blazies->get('resimage.id'))); */ } /** * Provide test cases for ::testPreRenderImage(). * * @return array * An array of tested data. */ public static function providerTestPreRenderImage() { $data[] = [ [ 'content_url' => 'node/1', 'media_switch' => 'content', ], FALSE, ]; $data[] = [ [ // 'lightbox' => TRUE, 'media_switch' => 'blazy_test', 'responsive_image_style' => 'blazy_responsive_test', ], TRUE, ]; $data[] = [ [ 'box_style' => 'blazy_crop', 'box_media_style' => 'large', 'box_caption' => 'custom', 'box_caption_custom' => '[node:field_text_multiple]', 'embed_url' => '//www.youtube.com/watch?v=E03HFA923kw', // 'lightbox' => TRUE, 'media_switch' => 'blazy_test', 'type' => 'video', ], FALSE, ]; return $data; } /** * Tests building Blazy attributes. * * @param array $settings * The settings being tested. * @param bool $use_uri * Whether to provide image URI, or not. * @param bool $use_item * Whether to provide image item, or not. * @param bool $iframe * Whether to expect an iframe, or not. * @param bool $expected * Whether the expected output is an image. * * @covers \Drupal\blazy\Blazy::init * @covers \Drupal\blazy\Theme\BlazyTheme::blazy * @covers \Drupal\blazy\Media\BlazyImage::prepare * @covers \Drupal\blazy\BlazyDefault::entitySettings * @covers \Drupal\blazy\BlazyManager::postSettings * @covers \Drupal\blazy\Media\BlazyOEmbed::build * @covers \Drupal\blazy\Media\BlazyOEmbed::checkInputUrl * @dataProvider providerPreprocessBlazy */ public function testPreprocessBlazy(array $settings, $use_uri, $use_item, $iframe, $expected) { $variables = ['attributes' => []]; $input_url = $settings['input_url'] ?? NULL; $settings = array_merge($this->getFormatterSettings(), $settings); $settings += Blazy::init(); $blazies = $settings['blazies']; $id = 'blazy'; $blazies->set('item.id', $id) ->set('is.blazy', TRUE) ->set('lazy.id', $id) ->set('image.uri', $use_uri ? $this->uri : ''); $settings['image_style'] = 'blazy_crop'; $settings['thumbnail_style'] = 'thumbnail'; if ($input_url) { $settings = array_merge(BlazyDefault::entitySettings(), $settings); } $this->blazyManager->postSettings($settings); $blazies = $settings['blazies']->reset($settings); $item = $use_item ? $this->testItem : NULL; if ($input_url) { $blazies->set('media.input_url', $input_url) ->set('media.source', 'oembed:video') ->set('media.bundle', 'remote_video') ->set('type', 'video'); $data = [ '#entity' => $this->entity, '#settings' => $settings, '#item' => $item, ]; $this->blazyOembed->build($data); $settings = $data['#settings']; } $variables['element']['#item'] = $item; $variables['element']['#settings'] = $settings; BlazyTheme::blazy($variables); $image = $expected == TRUE ? !empty($variables['image']) : empty($variables['image']); $iframe = $iframe == TRUE ? !empty($variables['iframe']) : empty($variables['iframe']); $this->assertTrue($image); $this->assertTrue($iframe); } /** * Provider for ::testPreprocessBlazy. */ public static function providerPreprocessBlazy() { // $use_uri, $use_item, $iframe, $expected. $data[] = [ [ 'background' => FALSE, ], FALSE, FALSE, FALSE, FALSE, ]; $data[] = [ [ 'background' => FALSE, ], TRUE, FALSE, FALSE, TRUE, ]; $data[] = [ [ 'background' => TRUE, ], FALSE, TRUE, FALSE, FALSE, ]; $data[] = [ [ 'background' => FALSE, 'input_url' => 'https://www.youtube.com/watch?v=uny9kbh4iOEd', 'media_switch' => 'media', 'ratio' => 'fluid', // 'width' => 640, // 'height' => 360, // 'bundle' => 'remote_video', // 'type' => 'video', ], FALSE, TRUE, FALSE, TRUE, ]; return $data; } /** * Tests responsive image integration. * * @param string $responsive_image_style_id * The responsive_image_style_id. * @param bool $expected * The expected output_image_tag. * * @dataProvider providerResponsiveImage */ public function testPreprocessResponsiveImage($responsive_image_style_id, $expected) { $variables = [ 'item' => $this->testItem, 'uri' => $this->uri, 'responsive_image_style_id' => $responsive_image_style_id, 'width' => 600, 'height' => 480, ]; template_preprocess_responsive_image($variables); $variables['img_element']['#uri'] = $this->uri; BlazyTheme::responsiveImage($variables); $this->assertEquals($expected, $variables['output_image_tag']); } /** * Provider for ::testPreprocessResponsiveImage. */ public static function providerResponsiveImage() { return [ 'Responsive image with picture 8.x-3' => [ 'blazy_picture_test', FALSE, ], 'Responsive image without picture 8.x-3' => [ 'blazy_responsive_test', TRUE, ], ]; } /** * Tests cases for various methods. * * @covers ::attach */ public function testBlazyManagerMethods() { // Tests Blazy attachments. $attach = ['blazy' => TRUE, 'media_switch' => 'blazy_test']; $attachments = $this->blazyManager->attach($attach); $this->assertArrayHasKey('blazy', $attachments['drupalSettings']); } }