95a2bb85474006777aba0b42c46148d9d2390f49
[yaffs-website] / web / modules / contrib / slick / tests / src / Kernel / SlickManagerTest.php
1 <?php
2
3 namespace Drupal\Tests\slick\Kernel;
4
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;
9
10 /**
11  * Tests the Slick manager methods.
12  *
13  * @coversDefaultClass \Drupal\slick\SlickManager
14  *
15  * @group slick
16  */
17 class SlickManagerTest extends BlazyKernelTestBase {
18
19   use SlickUnitTestTrait;
20
21   /**
22    * {@inheritdoc}
23    */
24   public static $modules = [
25     'system',
26     'user',
27     'field',
28     'file',
29     'filter',
30     'image',
31     'node',
32     'text',
33     'blazy',
34     'slick',
35     'slick_ui',
36     'slick_test',
37   ];
38
39   /**
40    * {@inheritdoc}
41    */
42   protected function setUp() {
43     parent::setUp();
44
45     $bundle = $this->bundle;
46
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');
51
52     $this->slickForm = new SlickForm(
53       $this->slickAdmin,
54       $this->slickManager
55     );
56
57     $this->testPluginId  = 'slick_image';
58     $this->testFieldName = 'field_slick_image';
59     $this->maxItems      = 7;
60     $this->maxParagraphs = 2;
61
62     $settings['fields']['field_text_multiple'] = 'text';
63     $this->setUpContentTypeTest($bundle, $settings);
64     $this->setUpContentWithItems($bundle);
65     $this->setUpRealImage();
66
67     $this->display = $this->setUpFormatterDisplay($bundle);
68     $this->formatterInstance = $this->getFormatterInstance();
69   }
70
71   /**
72    * Tests cases for various methods.
73    *
74    * @covers ::attach
75    * @covers ::attachSkin
76    * @covers ::getSkins
77    * @covers ::getConstantSkins
78    * @covers ::getSkinsByGroup
79    * @covers ::libraryInfoBuild
80    */
81   public function testSlickManagerMethods() {
82     $manager = $this->slickManager;
83     $settings = [
84       'media_switch'     => 'media',
85       'lazy'             => 'ondemand',
86       'mousewheel'       => TRUE,
87       'skin'             => 'classic',
88       'down_arrow'       => TRUE,
89       'thumbnail_effect' => 'hover',
90       'slick_css'        => TRUE,
91       'module_css'       => TRUE,
92     ] + $this->getFormatterSettings();
93
94     $attachments = $manager->attach($settings);
95     $this->assertArrayHasKey('slick', $attachments['drupalSettings']);
96
97     // Tests for skins.
98     $skins = $manager->getSkins();
99     $this->assertArrayHasKey('skins', $skins);
100     $this->assertArrayHasKey('arrows', $skins);
101     $this->assertArrayHasKey('dots', $skins);
102
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);
108
109     // Verify skins has thumbnail constant.
110     $defined_skins = $manager::getConstantSkins();
111     $this->assertTrue(in_array('thumbnail', $defined_skins));
112
113     // Verify libraries.
114     $libraries = $manager->libraryInfoBuild();
115     $this->assertArrayHasKey('slick.main.default', $libraries);
116
117     $skins = $manager->getSkinsByGroup('dots');
118     $this->assertArrayHasKey('dots', $skins);
119   }
120
121   /**
122    * Tests for Slick build.
123    *
124    * @param bool $items
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.
132    *
133    * @covers ::slick
134    * @covers ::preRenderSlick
135    * @covers ::buildGrid
136    * @covers ::build
137    * @covers ::preRenderSlickWrapper
138    * @dataProvider providerTestSlickBuild
139    */
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);
144
145     $settings['optionset'] = 'test';
146
147     $build = $this->display->build($this->entity);
148
149     $items = !$items ? [] : $build[$this->testFieldName]['#build']['items'];
150     $build = [
151       'items'     => $items,
152       'settings'  => $settings,
153       'options'   => $options,
154       'optionset' => Slick::load($settings['optionset']),
155     ];
156
157     $slick = $manager::slick($build);
158     $this->assertEquals($expected, !empty($slick));
159
160     $slick['#build']['settings'] = $settings;
161     $slick['#build']['items'] = $items;
162
163     $element = $manager::preRenderSlick($slick);
164     $this->assertEquals($expected, !empty($element));
165
166     if (!empty($settings['optionset_thumbnail'])) {
167       $build['thumb'] = [
168         'items'    => $items,
169         'settings' => $settings,
170         'options'  => $options,
171       ];
172     }
173
174     $slicks = $manager->build($build);
175     $this->assertEquals($expected, !empty($slicks));
176
177     $slicks['#build']['items'] = $items;
178     $slicks['#build']['settings'] = $settings;
179
180     if (!empty($settings['optionset_thumbnail'])) {
181       $slicks['#build']['thumb']['items'] = $build['thumb']['items'];
182       $slicks['#build']['thumb']['settings'] = $build['thumb']['settings'];
183     }
184
185     $elements = $manager->preRenderSlickWrapper($slicks);
186     $this->assertEquals($expected, !empty($elements));
187   }
188
189   /**
190    * Provide test cases for ::testBuild().
191    *
192    * @return array
193    *   An array of tested data.
194    */
195   public function providerTestSlickBuild() {
196     $data[] = [
197       FALSE,
198       [],
199       [],
200       FALSE,
201     ];
202     $data[] = [
203       TRUE,
204       [
205         'grid' => 3,
206         'visible_items' => 6,
207         'override' => TRUE,
208         'overridables' => ['arrows' => FALSE, 'dots' => TRUE],
209         'skin_dots' => 'dots',
210         'cache' => -1,
211         'cache_tags' => ['url.site'],
212       ],
213       ['dots' => TRUE],
214       TRUE,
215     ];
216     $data[] = [
217       TRUE,
218       [
219         'grid' => 3,
220         'visible_items' => 6,
221         'unslick' => TRUE,
222       ],
223       [],
224       TRUE,
225     ];
226     $data[] = [
227       TRUE,
228       [
229         'skin' => 'test',
230         'nav' => TRUE,
231         'optionset_thumbnail' => 'test_nav',
232         'thumbnail_position' => 'top',
233         'thumbnail_style' => 'thumbnail',
234         'thumbnail_effect' => 'hover',
235
236       ],
237       [],
238       TRUE,
239     ];
240
241     return $data;
242   }
243
244   /**
245    * Tests for \Drupal\slick_ui\Form\SlickForm.
246    *
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
256    */
257   public function testSlickForm() {
258     $elements = $this->slickForm->getFormElements();
259     $this->assertArrayHasKey('mobileFirst', $elements);
260
261     $elements = $this->slickForm->cleanFormElements();
262     $this->assertArrayNotHasKey('appendArrows', $elements);
263
264     $elements = $this->slickForm->getResponsiveFormElements(2);
265     $this->assertArrayHasKey('breakpoint', $elements[0]);
266
267     $options = $this->slickForm->getLazyloadOptions();
268     $this->assertArrayHasKey('ondemand', $options);
269
270     $settings = [];
271     $this->slickForm->typecastOptionset($settings);
272     $this->assertEmpty($settings);
273
274     $settings['mobileFirst'] = 1;
275     $settings['edgeFriction'] = 0.27;
276     $this->slickForm->typecastOptionset($settings);
277     $this->assertEquals(TRUE, $settings['mobileFirst']);
278
279     $options = $this->slickForm->getJsEasingOptions();
280     $this->assertArrayHasKey('easeInQuad', $options);
281
282     $options = $this->slickForm->getCssEasingOptions();
283     $this->assertArrayHasKey('easeInQuad', $options);
284
285     $options = $this->slickForm->getOptionsRequiredByTemplate();
286     $this->assertArrayHasKey('lazyLoad', $options);
287
288     $bezier = $this->slickForm->getBezier('easeInQuad');
289     $this->assertEquals('cubic-bezier(0.550, 0.085, 0.680, 0.530)', $bezier);
290   }
291
292 }