mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 09:17:35 +00:00
293 lines
9.9 KiB
PHP
293 lines
9.9 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\Widget\Test\Unit\Model;
|
|
|
|
use Magento\CatalogWidget\Block\Product\ProductsList;
|
|
use Magento\CatalogWidget\Model\Rule\Condition\Combine;
|
|
use Magento\Cms\Block\Widget\Page\Link;
|
|
use Magento\Framework\DataObject;
|
|
use Magento\Framework\Escaper;
|
|
use Magento\Framework\Math\Random;
|
|
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
|
|
use Magento\Widget\Helper\Conditions;
|
|
use Magento\Widget\Model\Config\Data;
|
|
use Magento\Widget\Model\Widget;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* Test class for \Magento\Widget\Model\Widget
|
|
*/
|
|
class WidgetTest extends TestCase
|
|
{
|
|
/**
|
|
* @var Data|MockObject
|
|
*/
|
|
protected $dataStorageMock;
|
|
|
|
/**
|
|
* @var Escaper|MockObject
|
|
*/
|
|
private $escaperMock;
|
|
|
|
/**
|
|
* @var Widget
|
|
*/
|
|
protected $widget;
|
|
|
|
/**
|
|
* @var Conditions
|
|
*/
|
|
private $conditionsHelper;
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
$this->dataStorageMock = $this->getMockBuilder(Data::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->conditionsHelper = $this->getMockBuilder(Conditions::class)
|
|
->setMethods(['encode'])
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$this->escaperMock = $this->getMockBuilder(Escaper::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
$objectManagerHelper = new ObjectManager($this);
|
|
$this->widget = $objectManagerHelper->getObject(
|
|
Widget::class,
|
|
[
|
|
'dataStorage' => $this->dataStorageMock,
|
|
'conditionsHelper' => $this->conditionsHelper,
|
|
'escaper' => $this->escaperMock,
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Unit test for getWidget
|
|
*/
|
|
public function testGetWidgets()
|
|
{
|
|
$expected = ['val1', 'val2'];
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn($expected);
|
|
$result = $this->widget->getWidgets();
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
/**
|
|
* Unit test for getWidgetsWithFilter
|
|
*/
|
|
public function testGetWidgetsWithFilter()
|
|
{
|
|
$configFile = __DIR__ . '/_files/mappedConfigArrayAll.php';
|
|
$widgets = include $configFile;
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn($widgets);
|
|
$result = $this->widget->getWidgets(['name' => 'CMS Page Link', 'description' => 'Link to a CMS Page']);
|
|
$configFileOne = __DIR__ . '/_files/mappedConfigArray1.php';
|
|
$expected = ['cms_page_link' => include $configFileOne];
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
/**
|
|
* Unit test for getWidgetsWithUnknownFilter
|
|
*/
|
|
public function testGetWidgetsWithUnknownFilter()
|
|
{
|
|
$configFile = __DIR__ . '/_files/mappedConfigArrayAll.php';
|
|
$widgets = include $configFile;
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn($widgets);
|
|
$result = $this->widget->getWidgets(['name' => 'unknown', 'description' => 'unknown']);
|
|
$expected = [];
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
/**
|
|
* Unit test for getWidgetByClassType
|
|
*/
|
|
public function testGetWidgetByClassType()
|
|
{
|
|
$widgetOne = ['@' => ['type' => 'type1']];
|
|
$widgets = ['widget1' => $widgetOne];
|
|
$this->dataStorageMock->expects($this->any())
|
|
->method('get')
|
|
->willReturn($widgets);
|
|
$this->assertEquals($widgetOne, $this->widget->getWidgetByClassType('type1'));
|
|
$this->assertNull($this->widget->getWidgetByClassType('type2'));
|
|
}
|
|
|
|
/**
|
|
* Unit test for getConfigAsObject
|
|
*/
|
|
public function testGetConfigAsObject()
|
|
{
|
|
$configFile = __DIR__ . '/_files/mappedConfigArrayAll.php';
|
|
$widgets = include $configFile;
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn($widgets);
|
|
|
|
$resultObject = $this->widget->getConfigAsObject(Link::class);
|
|
$this->assertInstanceOf(DataObject::class, $resultObject);
|
|
|
|
$this->assertSame('CMS Page Link', $resultObject->getName());
|
|
$this->assertSame('Link to a CMS Page', $resultObject->getDescription());
|
|
$this->assertSame('1', $resultObject->getIsEmailCompatible());
|
|
$this->assertSame('Magento_Cms::images/widget_page_link.png', $resultObject->getPlaceholderImage());
|
|
|
|
$resultParameters = $resultObject->getParameters();
|
|
$this->assertInstanceOf(DataObject::class, $resultParameters['page_id']);
|
|
$this->assertInstanceOf(DataObject::class, $resultParameters['anchor_text']);
|
|
$this->assertInstanceOf(DataObject::class, $resultParameters['template']);
|
|
|
|
$supportedContainersExpected = [
|
|
'0' => [
|
|
'container_name' => 'left',
|
|
'template' => ['default' => 'default', 'names_only' => 'link_inline'],
|
|
],
|
|
'1' => [
|
|
'container_name' => 'content',
|
|
'template' => ['grid' => 'default', 'list' => 'list']
|
|
],
|
|
];
|
|
$this->assertSame($supportedContainersExpected, $resultObject->getSupportedContainers());
|
|
}
|
|
|
|
/**
|
|
* Unit test for getConfigAsObjectWidgetNoFound
|
|
*/
|
|
public function testGetConfigAsObjectWidgetNoFound()
|
|
{
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn([]);
|
|
|
|
$resultObject = $this->widget->getConfigAsObject(Link::class);
|
|
$this->assertInstanceOf(DataObject::class, $resultObject);
|
|
$this->assertSame([], $resultObject->getData());
|
|
}
|
|
|
|
/**
|
|
* Unit test for getWidgetDeclaration
|
|
*/
|
|
public function testGetWidgetDeclaration()
|
|
{
|
|
$mathRandomMock = $this->createPartialMock(Random::class, ['getRandomString']);
|
|
$mathRandomMock->expects($this->any())->method('getRandomString')->willReturn('asdf');
|
|
$reflection = new \ReflectionClass(get_class($this->widget));
|
|
$reflectionProperty = $reflection->getProperty('mathRandom');
|
|
$reflectionProperty->setAccessible(true);
|
|
$reflectionProperty->setValue($this->widget, $mathRandomMock);
|
|
|
|
$conditions = [
|
|
[
|
|
'type' => Combine::class,
|
|
'aggregator' => 'all',
|
|
'value' => '1',
|
|
'new_child' => ''
|
|
]
|
|
];
|
|
$params = [
|
|
'title' => 'my "widget"',
|
|
'show_pager' => '1',
|
|
'products_per_page' => '5',
|
|
'products_count' => '10',
|
|
'template' => 'Magento_CatalogWidget::product/widget/content/grid.phtml',
|
|
'conditions' => $conditions
|
|
];
|
|
|
|
$this->conditionsHelper->expects($this->once())->method('encode')->with($conditions)
|
|
->willReturn('encoded-conditions-string');
|
|
$this->escaperMock->expects($this->atLeastOnce())
|
|
->method('escapeHtmlAttr')
|
|
->willReturnMap([
|
|
['my "widget"', false, 'my "widget"'],
|
|
['1', false, '1'],
|
|
['5', false, '5'],
|
|
['10', false, '10'],
|
|
['Magento_CatalogWidget::product/widget/content/grid.phtml',
|
|
false,
|
|
'Magento_CatalogWidget::product/widget/content/grid.phtml'
|
|
],
|
|
['encoded-conditions-string', false, 'encoded-conditions-string'],
|
|
]);
|
|
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn([]);
|
|
|
|
$result = $this->widget->getWidgetDeclaration(
|
|
ProductsList::class,
|
|
$params
|
|
);
|
|
$this->assertStringContainsString('{{widget type="Magento\CatalogWidget\Block\Product\ProductsList"', $result);
|
|
$this->assertStringContainsString('title="my "widget""', $result);
|
|
$this->assertStringContainsString('conditions_encoded="encoded-conditions-string"', $result);
|
|
$this->assertStringContainsString('page_var_name="pasdf"', $result);
|
|
}
|
|
|
|
/**
|
|
* Unit test for getWidgetDeclarationWithZeroValueParam
|
|
*/
|
|
public function testGetWidgetDeclarationWithZeroValueParam()
|
|
{
|
|
$mathRandomMock = $this->createPartialMock(Random::class, ['getRandomString']);
|
|
$mathRandomMock->expects($this->any())
|
|
->method('getRandomString')
|
|
->willReturn('asdf');
|
|
|
|
(new ObjectManager($this))->setBackwardCompatibleProperty(
|
|
$this->widget,
|
|
'mathRandom',
|
|
$mathRandomMock
|
|
);
|
|
|
|
$conditions = [
|
|
[
|
|
'type' => Combine::class,
|
|
'aggregator' => 'all',
|
|
'value' => '1',
|
|
'new_child' => ''
|
|
]
|
|
];
|
|
$params = [
|
|
'title' => 'my widget',
|
|
'show_pager' => '1',
|
|
'products_per_page' => '5',
|
|
'products_count' => '0',
|
|
'template' => 'Magento_CatalogWidget::product/widget/content/grid.phtml',
|
|
'conditions' => $conditions
|
|
];
|
|
|
|
$this->conditionsHelper->expects($this->once())
|
|
->method('encode')
|
|
->with($conditions)
|
|
->willReturn('encoded-conditions-string');
|
|
|
|
$this->dataStorageMock->expects($this->once())
|
|
->method('get')
|
|
->willReturn([]);
|
|
|
|
$result = $this->widget->getWidgetDeclaration(
|
|
ProductsList::class,
|
|
$params
|
|
);
|
|
$this->assertStringContainsString('{{widget type="Magento\CatalogWidget\Block\Product\ProductsList"', $result);
|
|
$this->assertStringContainsString('page_var_name="pasdf"', $result);
|
|
$this->assertStringContainsString('products_count=""', $result);
|
|
}
|
|
}
|