3 namespace Drupal\Tests\slick\Kernel;
5 use Drupal\Tests\blazy\Kernel\BlazyKernelTestBase;
6 use Drupal\Tests\slick\Traits\SlickUnitTestTrait;
7 use Drupal\slick\Entity\Slick;
8 use Drupal\slick_ui\Form\SlickForm;
11 * Tests the Slick manager methods.
13 * @coversDefaultClass \Drupal\slick\SlickManager
17 class SlickManagerTest extends BlazyKernelTestBase {
19 use SlickUnitTestTrait;
24 public static $modules = [
42 protected function setUp() {
45 $bundle = $this->bundle;
47 $this->slickAdmin = $this->container->get('slick.admin');
48 $this->blazyAdminFormatter = $this->slickAdmin;
49 $this->slickFormatter = $this->container->get('slick.formatter');
50 $this->slickManager = $this->container->get('slick.manager');
52 $this->slickForm = new SlickForm(
57 $this->testPluginId = 'slick_image';
58 $this->testFieldName = 'field_slick_image';
60 $this->maxParagraphs = 2;
62 $settings['fields']['field_text_multiple'] = 'text';
63 $this->setUpContentTypeTest($bundle, $settings);
64 $this->setUpContentWithItems($bundle);
65 $this->setUpRealImage();
67 $this->display = $this->setUpFormatterDisplay($bundle);
68 $this->formatterInstance = $this->getFormatterInstance();
72 * Tests cases for various methods.
75 * @covers ::attachSkin
77 * @covers ::getConstantSkins
78 * @covers ::getSkinsByGroup
79 * @covers ::libraryInfoBuild
81 public function testSlickManagerMethods() {
82 $manager = $this->slickManager;
84 'media_switch' => 'media',
89 'thumbnail_effect' => 'hover',
92 ] + $this->getFormatterSettings();
94 $attachments = $manager->attach($settings);
95 $this->assertArrayHasKey('slick', $attachments['drupalSettings']);
98 $skins = $manager->getSkins();
99 $this->assertArrayHasKey('skins', $skins);
100 $this->assertArrayHasKey('arrows', $skins);
101 $this->assertArrayHasKey('dots', $skins);
103 // Verify we have cached skins.
104 $cid = 'slick:skins';
105 $cached_skins = $manager->getCache()->get($cid);
106 $this->assertEquals($cid, $cached_skins->cid);
107 $this->assertEquals($skins, $cached_skins->data);
109 // Verify skins has thumbnail constant.
110 $defined_skins = $manager::getConstantSkins();
111 $this->assertTrue(in_array('thumbnail', $defined_skins));
114 $libraries = $manager->libraryInfoBuild();
115 $this->assertArrayHasKey('slick.main.default', $libraries);
117 $skins = $manager->getSkinsByGroup('dots');
118 $this->assertArrayHasKey('dots', $skins);
122 * Tests for Slick build.
125 * Whether to provide items, or not.
126 * @param array $settings
127 * The settings being tested.
128 * @param array $options
129 * The options being tested.
130 * @param mixed|bool|string $expected
131 * The expected output.
134 * @covers ::preRenderSlick
135 * @covers ::buildGrid
137 * @covers ::preRenderSlickWrapper
138 * @dataProvider providerTestSlickBuild
140 public function testBuild($items, array $settings, array $options, $expected) {
141 $manager = $this->slickManager;
142 $defaults = $this->getFormatterSettings() + Slick::htmlSettings();
143 $settings = array_merge($defaults, $settings);
145 $settings['optionset'] = 'test';
147 $build = $this->display->build($this->entity);
149 $items = !$items ? [] : $build[$this->testFieldName]['#build']['items'];
152 'settings' => $settings,
153 'options' => $options,
154 'optionset' => Slick::load($settings['optionset']),
157 $slick = $manager::slick($build);
158 $this->assertEquals($expected, !empty($slick));
160 $slick['#build']['settings'] = $settings;
161 $slick['#build']['items'] = $items;
163 $element = $manager::preRenderSlick($slick);
164 $this->assertEquals($expected, !empty($element));
166 if (!empty($settings['optionset_thumbnail'])) {
169 'settings' => $settings,
170 'options' => $options,
174 $slicks = $manager->build($build);
175 $this->assertEquals($expected, !empty($slicks));
177 $slicks['#build']['items'] = $items;
178 $slicks['#build']['settings'] = $settings;
180 if (!empty($settings['optionset_thumbnail'])) {
181 $slicks['#build']['thumb']['items'] = $build['thumb']['items'];
182 $slicks['#build']['thumb']['settings'] = $build['thumb']['settings'];
185 $elements = $manager->preRenderSlickWrapper($slicks);
186 $this->assertEquals($expected, !empty($elements));
190 * Provide test cases for ::testBuild().
193 * An array of tested data.
195 public function providerTestSlickBuild() {
206 'visible_items' => 6,
208 'overridables' => ['arrows' => FALSE, 'dots' => TRUE],
209 'skin_dots' => 'dots',
211 'cache_tags' => ['url.site'],
220 'visible_items' => 6,
231 'optionset_thumbnail' => 'test_nav',
232 'thumbnail_position' => 'top',
233 'thumbnail_style' => 'thumbnail',
234 'thumbnail_effect' => 'hover',
245 * Tests for \Drupal\slick_ui\Form\SlickForm.
247 * @covers \Drupal\slick_ui\Form\SlickForm::getFormElements
248 * @covers \Drupal\slick_ui\Form\SlickForm::cleanFormElements
249 * @covers \Drupal\slick_ui\Form\SlickForm::getResponsiveFormElements
250 * @covers \Drupal\slick_ui\Form\SlickForm::getLazyloadOptions
251 * @covers \Drupal\slick_ui\Form\SlickForm::typecastOptionset
252 * @covers \Drupal\slick_ui\Form\SlickForm::getJsEasingOptions
253 * @covers \Drupal\slick_ui\Form\SlickForm::getCssEasingOptions
254 * @covers \Drupal\slick_ui\Form\SlickForm::getOptionsRequiredByTemplate
255 * @covers \Drupal\slick_ui\Form\SlickForm::getBezier
257 public function testSlickForm() {
258 $elements = $this->slickForm->getFormElements();
259 $this->assertArrayHasKey('mobileFirst', $elements);
261 $elements = $this->slickForm->cleanFormElements();
262 $this->assertArrayNotHasKey('appendArrows', $elements);
264 $elements = $this->slickForm->getResponsiveFormElements(2);
265 $this->assertArrayHasKey('breakpoint', $elements[0]);
267 $options = $this->slickForm->getLazyloadOptions();
268 $this->assertArrayHasKey('ondemand', $options);
271 $this->slickForm->typecastOptionset($settings);
272 $this->assertEmpty($settings);
274 $settings['mobileFirst'] = 1;
275 $settings['edgeFriction'] = 0.27;
276 $this->slickForm->typecastOptionset($settings);
277 $this->assertEquals(TRUE, $settings['mobileFirst']);
279 $options = $this->slickForm->getJsEasingOptions();
280 $this->assertArrayHasKey('easeInQuad', $options);
282 $options = $this->slickForm->getCssEasingOptions();
283 $this->assertArrayHasKey('easeInQuad', $options);
285 $options = $this->slickForm->getOptionsRequiredByTemplate();
286 $this->assertArrayHasKey('lazyLoad', $options);
288 $bezier = $this->slickForm->getBezier('easeInQuad');
289 $this->assertEquals('cubic-bezier(0.550, 0.085, 0.680, 0.530)', $bezier);