Yaffs site version 1.1
[yaffs-website] / web / modules / contrib / blazy / tests / src / Traits / BlazyUnitTestTrait.php
diff --git a/web/modules/contrib/blazy/tests/src/Traits/BlazyUnitTestTrait.php b/web/modules/contrib/blazy/tests/src/Traits/BlazyUnitTestTrait.php
new file mode 100644 (file)
index 0000000..87133fb
--- /dev/null
@@ -0,0 +1,339 @@
+<?php
+
+namespace Drupal\Tests\blazy\Traits;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\blazy\Dejavu\BlazyDefault;
+
+/**
+ * A Trait common for Blazy Unit tests.
+ */
+trait BlazyUnitTestTrait {
+
+  use BlazyPropertiesTestTrait;
+
+  /**
+   * The formatter settings.
+   *
+   * @var array
+   */
+  protected $formatterSettings = [];
+
+  /**
+   * Add empty data for breakpoints.
+   *
+   * @return array
+   *   The dummy breakpoints.
+   */
+  protected function getEmptyBreakpoints() {
+    $build = [];
+
+    foreach (BlazyDefault::getConstantBreakpoints() as $breakpoint) {
+      $build[$breakpoint]['image_style'] = '';
+      $build[$breakpoint]['width'] = '';
+    }
+
+    return $build;
+  }
+
+  /**
+   * Add partially empty data for breakpoints.
+   *
+   * @param string $clean
+   *   The flag for clean breakpoints.
+   *
+   * @return array
+   *   The dummy breakpoints.
+   */
+  protected function getDataBreakpoints($clean = FALSE) {
+    $build  = [];
+    $widths = ['xs' => 210, 'sm' => 1024, 'md' => 1900];
+    $styles = ['xs' => 'blazy_crop', 'sm' => 'blazy_crop', 'md' => 'blazy_crop'];
+
+    foreach (BlazyDefault::getConstantBreakpoints() as $breakpoint) {
+      if ($clean && (!isset($styles[$breakpoint]) || !isset($widths[$breakpoint]))) {
+        continue;
+      }
+      $build[$breakpoint]['image_style'] = isset($styles[$breakpoint]) ? $styles[$breakpoint] : '';
+      $build[$breakpoint]['width'] = isset($widths[$breakpoint]) ? $widths[$breakpoint] : '';
+    }
+
+    return $build;
+  }
+
+  /**
+   * Returns sensible formatter settings for testing purposes.
+   *
+   * @return array
+   *   The formatter settings.
+   */
+  protected function getFormatterSettings() {
+    $defaults = [
+      'box_caption'     => 'custom',
+      'box_style'       => 'large',
+      'breakpoints'     => $this->getDataBreakpoints(),
+      'cache'           => 0,
+      'image_style'     => 'blazy_crop',
+      'media_switch'    => 'blazy_test',
+      'thumbnail_style' => 'thumbnail',
+      'ratio'           => 'fluid',
+      'caption'         => ['alt' => 'alt', 'title' => 'title'],
+      'sizes'           => '100w',
+    ] + BlazyDefault::extendedSettings();
+
+    return empty($this->formatterSettings) ? $defaults : array_merge($defaults, $this->formatterSettings);
+  }
+
+  /**
+   * Sets formatter settings.
+   *
+   * @param array $settings
+   *   The given settings.
+   *
+   * @return $this
+   *   The class instance that this method is called on.
+   */
+  protected function setFormatterSettings(array $settings = []) {
+    $this->formatterSettings = array_merge($this->getFormatterSettings(), $settings);
+    return $this;
+  }
+
+  /**
+   * Sets formatter setting.
+   *
+   * @param string $setting
+   *   The given setting.
+   * @param mixed|bool|string $value
+   *   The given value.
+   *
+   * @return $this
+   *   The class instance that this method is called on.
+   */
+  protected function setFormatterSetting($setting, $value) {
+    $this->formatterSettings[$setting] = $value;
+    return $this;
+  }
+
+  /**
+   * Returns the default field formatter definition.
+   *
+   * @return array
+   *   The default field formatter settings.
+   */
+  protected function getDefaultFormatterDefinition() {
+    // @deprecated: Will be replaced by `form` array below.
+    $deprecated = [
+      'grid_form'         => TRUE,
+      'image_style_form'  => TRUE,
+      'fieldable_form'    => TRUE,
+      'media_switch_form' => TRUE,
+    ];
+
+    return [
+      'background'        => TRUE,
+      'box_captions'      => TRUE,
+      'breakpoints'       => BlazyDefault::getConstantBreakpoints(),
+      'captions'          => ['alt' => 'Alt', 'title' => 'Title'],
+      'classes'           => ['field_class' => 'Classes'],
+      'current_view_mode' => 'default',
+      'entity_type'       => $this->entityType,
+      'field_name'        => $this->testFieldName,
+      'field_type'        => 'image',
+      'multimedia'        => TRUE,
+      'images'            => [$this->testFieldName => $this->testFieldName],
+      'layouts'           => ['top' => 'Top'],
+      'links'             => ['field_link' => 'Link'],
+      'namespace'         => 'blazy',
+      'responsive_image'  => TRUE,
+      'thumbnail_style'   => TRUE,
+      'skins'             => ['classic' => 'Classic'],
+      'style'             => 'grid',
+      'target_type'       => 'file',
+      'titles'            => ['field_text' => 'Text'],
+      'view_mode'         => 'default',
+      'settings'          => $this->getFormatterSettings(),
+      'form'              => [
+        'fieldable',
+        'grid',
+        'image_style',
+        'media_switch',
+      ],
+    ] + $deprecated;
+  }
+
+  /**
+   * Returns the default field formatter definition.
+   *
+   * @return array
+   *   The default field formatter settings.
+   */
+  protected function getDefaulEntityFormatterDefinition() {
+    return [
+      'nav'              => TRUE,
+      'overlays'         => ['field_image' => 'Image'],
+      'vanilla'          => TRUE,
+      'optionsets'       => ['default' => 'Default'],
+      'thumbnails'       => TRUE,
+      'thumbnail_effect' => ['grid', 'hover'],
+      'thumbnail_style'  => TRUE,
+      'thumb_captions'   => ['field_text' => 'Text'],
+      'thumb_positions'  => TRUE,
+      'caches'           => TRUE,
+    ];
+  }
+
+  /**
+   * Returns the field formatter definition along with settings.
+   *
+   * @return array
+   *   The field formatter settings.
+   */
+  protected function getFormatterDefinition() {
+    $defaults = $this->getDefaultFormatterDefinition();
+    return empty($this->formatterDefinition) ? $defaults : array_merge($defaults, $this->formatterDefinition);
+  }
+
+  /**
+   * Sets the field formatter definition.
+   *
+   * @param string $definition
+   *   The key definition defining scope for form elements.
+   * @param mixed|string|bool $value
+   *   The defined value.
+   *
+   * @return $this
+   *   The class instance that this method is called on.
+   */
+  protected function setFormatterDefinition($definition, $value) {
+    $this->formatterDefinition[$definition] = $value;
+    return $this;
+  }
+
+  /**
+   * Return dummy cache metadata.
+   */
+  protected function getCacheMetaData() {
+    $build = [];
+    $suffixes[] = 3;
+    foreach (['contexts', 'keys', 'tags'] as $key) {
+      if ($key == 'contexts') {
+        $cache = ['languages'];
+      }
+      elseif ($key == 'keys') {
+        $cache = ['blazy_image'];
+      }
+      elseif ($key == 'tags') {
+        $cache = Cache::buildTags('file:123', $suffixes, '.');
+      }
+
+      $build['cache_' . $key] = $cache;
+    }
+    return $build;
+  }
+
+  /**
+   * Pre render Blazy image.
+   *
+   * @param array $build
+   *   The data containing: settings and image item.
+   *
+   * @return array
+   *   The pre_render element.
+   */
+  protected function doPreRenderImage(array $build = []) {
+    $image = $this->blazyManager->getImage($build);
+
+    $image['#build']['settings'] = array_merge($this->getCacheMetaData(), $build['settings']);
+    $image['#build']['item'] = $build['item'];
+    return $this->blazyManager->preRenderImage($image);
+  }
+
+  /**
+   * Returns dummy fields for an entity reference.
+   *
+   * @return array
+   *   A common field array for Blazy related entity reference formatter.
+   */
+  protected function getDefaultFields($select = FALSE) {
+    $fields = [
+      'field_class'  => 'text',
+      'field_id'     => 'text',
+      'field_image'  => 'image',
+      'field_layout' => 'list_string',
+      'field_link'   => 'link',
+      'field_title'  => 'text',
+      'field_teaser' => 'text',
+    ];
+
+    $options = [];
+    foreach (array_keys($fields) as $key) {
+      if (in_array($key, ['field_id', 'field_teaser'])) {
+        continue;
+      }
+      $option = str_replace('field_', '', $key);
+      $options[$option] = $key;
+    }
+
+    return $select ? $options : $fields;
+  }
+
+  /**
+   * Set up Blazy variables.
+   */
+  protected function setUpVariables() {
+    $this->entityType    = 'node';
+    $this->bundle        = 'bundle_test';
+    $this->testFieldName = 'field_image_multiple';
+    $this->testFieldType = 'image';
+    $this->testPluginId  = 'blazy';
+    $this->maxItems      = 3;
+    $this->maxParagraphs = 20;
+  }
+
+  /**
+   * Setup the unit images.
+   */
+  protected function setUpUnitImages() {
+    $item = new \stdClass();
+    $item->uri = 'public://example.jpg';
+    $item->entity = NULL;
+    $item->alt = $this->randomMachineName();
+    $item->title = $this->randomMachineName();
+
+    $settings = $this->getFormatterSettings();
+
+    $this->uri = $settings['uri'] = $item->uri;
+
+    $this->data = [
+      'settings' => $settings,
+      'item' => $item,
+    ];
+
+    $this->testItem = $item;
+  }
+
+  /**
+   * Setup the unit images.
+   */
+  protected function setUpMockImage() {
+    $entity = $this->getMock('\Drupal\Core\Entity\ContentEntityInterface');
+    $entity->expects($this->any())
+      ->method('label')
+      ->willReturn($this->randomMachineName());
+    $entity->expects($this->any())
+      ->method('getEntityTypeId')
+      ->will($this->returnValue('node'));
+
+    $item = $this->getMock('\Drupal\Core\Field\FieldItemListInterface');
+    $item->expects($this->any())
+      ->method('getEntity')
+      ->willReturn($entity);
+
+    $this->setUpUnitImages();
+
+    $this->testItem = $item;
+    $this->data['item'] = $item;
+    $item->entity = $entity;
+  }
+
+}