Yaffs site version 1.1
[yaffs-website] / web / modules / contrib / slick / tests / src / Kernel / SlickCrudTest.php
diff --git a/web/modules/contrib/slick/tests/src/Kernel/SlickCrudTest.php b/web/modules/contrib/slick/tests/src/Kernel/SlickCrudTest.php
new file mode 100644 (file)
index 0000000..c64dd20
--- /dev/null
@@ -0,0 +1,228 @@
+<?php
+
+namespace Drupal\Tests\slick\Kernel;
+
+use Drupal\slick\Entity\Slick;
+use Drupal\Tests\blazy\Kernel\BlazyKernelTestBase;
+use Drupal\Tests\slick\Traits\SlickUnitTestTrait;
+
+/**
+ * Tests creation, loading, updating, deleting of Slick optionsets.
+ *
+ * @coversDefaultClass \Drupal\slick\Entity\Slick
+ *
+ * @group slick
+ */
+class SlickCrudTest extends BlazyKernelTestBase {
+
+  use SlickUnitTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'image',
+    'blazy',
+    'slick',
+    'slick_ui',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installConfig(static::$modules);
+    $this->installEntitySchema('slick');
+
+    $this->blazyAdmin     = $this->container->get('blazy.admin.extended');
+    $this->blazyManager   = $this->container->get('blazy.manager');
+    $this->slickManager   = $this->container->get('slick.manager');
+    $this->slickFormatter = $this->container->get('slick.formatter');
+    $this->slickAdmin     = $this->container->get('slick.admin');
+  }
+
+  /**
+   * Tests CRUD operations for Slick optionsets.
+   */
+  public function testSlickCrud() {
+    // Add a Slick optionset with minimum data only.
+    $empty = Slick::create([
+      'name'  => 'test_empty',
+      'label' => 'Empty slick',
+    ]);
+
+    $empty->save();
+    $this->verifySlickOptionset($empty);
+
+    // Add main Slick optionset with possible properties.
+    $main = Slick::create([
+      'name'  => 'test_main',
+      'label' => 'Test main',
+    ]);
+
+    $main->save();
+
+    $settings = [
+      'arrows'   => FALSE,
+      'dots'     => TRUE,
+      'lazyLoad' => 'progressive',
+    ] + $main->getSettings();
+
+    $main->set('group', 'main');
+    $main->set('optimized', TRUE);
+    $main->setSettings($settings);
+
+    $main->save();
+
+    $breakpoints = $main->getBreakpoints();
+    $this->assertEmpty($breakpoints);
+    $this->assertEquals('main', $main->getGroup());
+
+    $optimized = $main->optimized();
+    $this->assertNotEmpty($optimized);
+
+    $this->verifySlickOptionset($main);
+
+    // @todo: Use dataProvider.
+    try {
+      $responsive_options = $main->getResponsiveOptions();
+    }
+    catch (\PHPUnit_Framework_Exception $e) {
+    }
+
+    $this->assertTrue(TRUE);
+
+    $responsive_settings = $settings;
+    $main->set('breakpoints', 2);
+
+    $breakpoints = [481, 769];
+    foreach ($breakpoints as $key => $breakpoint) {
+      $main->setResponsiveSettings($responsive_settings, $key, 'settings');
+      $main->setResponsiveSettings($breakpoint, $key, 'breakpoint');
+    }
+
+    $main->save();
+
+    $responsive_options = $main->getResponsiveOptions();
+
+    foreach ($responsive_options as $key => $responsive) {
+      $this->assertEquals('progressive', $responsive['settings']['lazyLoad']);
+      $this->assertEquals($breakpoints[$key], $responsive['breakpoint']);
+    }
+
+    $options = $main->getSettings();
+    $cleaned = $main->removeDefaultValues($options);
+    $this->assertArrayHasKey('responsive', $cleaned);
+
+    foreach ($responsive_options as $key => $responsive) {
+      $main->setResponsiveSettings(TRUE, $key, 'unslick');
+    }
+
+    $main->save();
+
+    $options = $main->getSettings();
+    $cleaned = $main->removeDefaultValues($options);
+
+    foreach ($cleaned['responsive'] as $key => $responsive) {
+      $this->assertEquals('unslick', $responsive['settings']);
+    }
+
+    // Alter some slick optionset properties and save again.
+    $main->set('label', 'Altered slick');
+    $main->setSetting('mobileFirst', TRUE);
+    $main->save();
+    $this->verifySlickOptionset($main);
+
+    // Enable autoplay and save again.
+    $main->setSetting('autoplay', TRUE);
+    $main->save();
+    $this->verifySlickOptionset($main);
+
+    // Add nav Slick optionset with possible properties.
+    $nav = Slick::create([
+      'name' => 'test_nav',
+      'label' => 'Test nav',
+    ]);
+
+    $skin = $nav->getSkin();
+    $this->assertEmpty($skin);
+
+    $nav->setSetting('cssEaseBezier', 'easeInQuad');
+    $nav->save();
+    $settings = $nav->getSettings();
+
+    $nav->removeWastedDependentOptions($settings);
+    $this->assertArrayNotHasKey('cssEaseBezier', $settings);
+    $this->assertEquals('easeInQuad', $settings['cssEase']);
+
+    $this->assertEmpty($nav->getSetting('mobileFirst'));
+    $nav->setSetting('mobileFirst', TRUE);
+    $nav->save();
+    $this->assertNotEmpty($nav->getSetting('mobileFirst'));
+
+    // @todo: Use dataProvider.
+    try {
+      $mobile_first = $nav->getOptions('settings', 'mobileFirst');
+    }
+    catch (\PHPUnit_Framework_Exception $e) {
+    }
+
+    $this->assertTrue(!empty($mobile_first));
+
+    try {
+      $mobile_first = $nav->getOptions(['settings', 'mobileFirst']);
+    }
+    catch (\PHPUnit_Framework_Exception $e) {
+    }
+
+    $this->assertTrue(!empty($mobile_first));
+
+    $settings = $nav->getOptions('settings');
+    $this->assertArrayHasKey('mobileFirst', $settings);
+
+    $options = $nav->getOptions();
+    $this->assertArrayHasKey('settings', $options);
+
+    $merged = array_merge(Slick::defaultSettings() + Slick::jsSettings(), $settings);
+    $nav->setSettings($merged);
+    $nav->save();
+    $this->assertTrue(!empty($nav->getSetting('mobileFirst')));
+
+    $nav->removeDefaultValues($settings);
+    $this->assertArrayNotHasKey('lazyLoad', $settings);
+
+    // Delete the slick optionset.
+    $nav->delete();
+
+    $slicks = Slick::loadMultiple();
+    $this->assertFalse(isset($slicks[$nav->id()]), 'Slick::loadMultiple: Disabled slick optionset no longer exists.');
+
+    $id1 = Slick::getHtmlId('slick');
+    $this->assertNotEmpty($id1);
+
+    $id2 = Slick::getHtmlId('slick', 'slick-image');
+    $this->assertEquals($id2, 'slick-image');
+  }
+
+  /**
+   * Verifies that a slick optionset is properly stored.
+   *
+   * @param \Drupal\slick\Entity\Slick $slick
+   *   The Slick instance.
+   */
+  public function verifySlickOptionset(Slick $slick) {
+    $t_args = ['%slick' => $slick->label()];
+    $default_langcode = \Drupal::languageManager()->getDefaultLanguage()->getId();
+
+    // Verify the loaded slick has all properties.
+    $slick = Slick::load($slick->id());
+    $this->assertEqual($slick->id(), $slick->id(), format_string('Slick::load: Proper slick id for slick optionset %slick.', $t_args));
+    $this->assertEqual($slick->label(), $slick->label(), format_string('Slick::load: Proper title for slick optionset %slick.', $t_args));
+
+    // Check that the slick was created in site default language.
+    $this->assertEqual($slick->language()->getId(), $default_langcode, format_string('Slick::load: Proper language code for slick optionset %slick.', $t_args));
+  }
+
+}