vlsuite-1.0.x-dev/modules/vlsuite_utility_classes/tests/src/Kernel/Utility/VlsuiteUtilityClassesHelperTest.php
modules/vlsuite_utility_classes/tests/src/Kernel/Utility/VlsuiteUtilityClassesHelperTest.php
<?php
namespace Drupal\Tests\vlsuite_utility_classes\Kernel\Utility;
use Drupal\KernelTests\KernelTestBase;
/**
* Tests.
*
* @group vlsuite_utility_classes
*/
class VlsuiteUtilityClassesHelperTest extends KernelTestBase {
/**
* Utility classes helper.
*
* @var \Drupal\vlsuite_utility_classes\VLSuiteUtilityClassesHelper
*/
protected $vlsuiteUtilityClassesHelper;
/**
* {@inheritdoc}
*/
protected static $modules = [
'vlsuite',
'vlsuite_utility_classes',
'vlsuite_utility_classes_test',
];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->installConfig('vlsuite_utility_classes');
// Define utility classes for block content.
$this->config('vlsuite_utility_classes.settings')->set('utilities', [
'existing-utility-not-applicable' => [
'apply_to' => [
'block_content:basic:body:item' => 'block_content:basic:body:item',
],
'visual_name' => 'Random',
'class_prefix' => 'random-',
'values' => [
'random' => [
'visual_name' => 'random',
'class_suffix' => 'random',
],
],
],
'text-align' => [
'apply_to' => [
'block_content:basic' => 'block_content:basic',
'block_content:basic:body' => 'block_content:basic:body',
'block_content:basic:body:item' => 'block_content:basic:body:item',
],
'visual_name' => 'Text color',
'class_prefix' => 'hello-world gazpacho text-',
'values' => [
'left' => [
'visual_name' => 'Left',
'class_suffix' => 'start',
],
'right' => [
'visual_name' => 'Right',
'class_suffix' => 'end chatgpt bitcoin',
],
],
],
'background-color' => [
'apply_to' => [
'block_content:basic' => 'block_content:basic',
'block_content:basic:body' => 'block_content:basic:body',
'block_content:basic:body:item' => 'block_content:basic:body:item',
],
'visual_name' => 'Background color',
'class_prefix' => 'bg-',
'values' => [
'primary' => [
'visual_name' => 'Primary',
'class_suffix' => 'primary',
],
'secondary' => [
'visual_name' => 'Secondary',
'class_suffix' => 'secondary',
],
],
],
'shadow' => [
'apply_to' => [
'block_content:basic:body:item' => 'block_content:basic:body:item',
],
"visual_name" => "Shadow",
"class_prefix" => "shadow",
"values" => [
"shadow" => [
"visual_name" => "Shadow",
"class_suffix" => "defined-by-prefix",
],
"small" => [
"visual_name" => "Small",
"class_suffix" => "shadow-sm",
],
"large" => [
"visual_name" => "Large",
"class_suffix" => "shadow-lg",
],
],
],
])->save();
}
/**
* Obtain utility classes' helper.
*
* @return \Drupal\vlsuite_utility_classes\VLSuiteUtilityClassesHelper
* VLSuite Utility Helper.
*/
protected function getVlsuiteUtilityClassesHelper() {
if (empty($this->vlsuiteUtilityClassesHelper)) {
$this->vlsuiteUtilityClassesHelper = $this->container->get('vlsuite_utility_classes.helper');
}
return $this->vlsuiteUtilityClassesHelper;
}
/**
* Tests hook vlsuite options alter.
*/
public function testUtilityClassesUtilityApplyToOptionsAlter() {
$utility_classes_helper = $this->getVlsuiteUtilityClassesHelper();
$this->assertEquals($utility_classes_helper->getUtilityApplyToOptions(), ['test' => 'test']);
}
/**
* Tests utilities valid list.
*/
public function testGetUtilitiesApplyToList() {
$utility_classes_helper = $this->getVlsuiteUtilityClassesHelper();
$utilities_to_apply = $utility_classes_helper->getUtilitiesApplyToList('block_content:basic');
$expected = [
'text-align' => [
'visual_name' => 'Text color',
'class_prefix' => 'hello-world gazpacho text-',
'values' => [
'left' => [
'visual_name' => 'Left',
'class_suffix' => 'start',
],
'right' => [
'visual_name' => 'Right',
'class_suffix' => 'end chatgpt bitcoin',
],
],
],
'background-color' => [
'visual_name' => 'Background color',
'class_prefix' => 'bg-',
'values' => [
'primary' => [
'visual_name' => 'Primary',
'class_suffix' => 'primary',
],
'secondary' => [
'visual_name' => 'Secondary',
'class_suffix' => 'secondary',
],
],
],
];
$this->assertEquals($expected, $utilities_to_apply);
$utilities_to_apply = $utility_classes_helper->getUtilitiesApplyToList('block_content:basic:body:item');
$expected += [
'shadow' => [
"visual_name" => "Shadow",
"class_prefix" => "shadow",
"values" => [
"shadow" => [
"visual_name" => "Shadow",
"class_suffix" => "defined-by-prefix",
],
"small" => [
"visual_name" => "Small",
"class_suffix" => "shadow-sm",
],
"large" => [
"visual_name" => "Large",
"class_suffix" => "shadow-lg",
],
],
],
'existing-utility-not-applicable' => [
'visual_name' => 'Random',
'class_prefix' => 'random-',
'values' => [
'random' => [
'visual_name' => 'random',
'class_suffix' => 'random',
],
],
],
];
$this->assertEquals($expected, $utilities_to_apply);
}
/**
* Tests the application of the utility classes to a build.
*/
public function testBuildApplyUtilityClasses() {
$utility_classes_helper = $this->getVlsuiteUtilityClassesHelper();
$build = ['body' => [['#attributes' => ['class' => ['test']]]]];
$apply_to_list = [
'block_content:basic' => [
'none-existing-utility' => 'primary',
'existing-utility-not-applicable' => 'random',
'text-align' => 'left',
'background-color' => 'primary',
],
'block_content:basic:body' => [
'none-existing-utility' => 'primary',
'text-align' => 'none-existing-utility-value',
'background-color' => 'primary',
],
'block_content:basic:body:item' => [
'text-align' => 'right',
'background-color' => 'primary',
'shadow' => 'shadow',
],
];
$utility_classes_helper->buildApplyUtilityClasses($apply_to_list, $build);
$expected = [
'#attributes' => [
'class' => [
'hello-world',
'gazpacho',
'text-start',
'bg-primary',
],
],
'body' => [
'#attributes' => ['class' => ['bg-primary']],
[
'#attributes' => [
'class' => [
'test',
'hello-world',
'gazpacho',
'text-end',
'chatgpt',
'bitcoin',
'bg-primary',
'shadow',
],
],
'#item_attributes' => [
'class' => [
'hello-world',
'gazpacho',
'text-end',
'chatgpt',
'bitcoin',
'bg-primary',
'shadow',
],
],
],
],
];
$this->assertEquals($expected, $build);
}
}
