magento2-docker/dev/tests/integration/testsuite/Magento/Backend/Block/Widget/GridTest.php

161 lines
5.2 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Backend\Block\Widget;
use Magento\Backend\Block\Widget\Grid\ColumnSet;
use Magento\Backend\Block\Widget\Grid\Extended;
use Magento\Backend\Model\Widget\Grid\Row\UrlGeneratorFactory;
use Magento\Backend\Model\Widget\Grid\SubTotals;
use Magento\Backend\Model\Widget\Grid\Totals;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Filesystem;
use Magento\Framework\Json\Helper\Data;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Layout;
use Magento\Framework\View\LayoutInterface;
use Magento\TestFramework\Helper\Bootstrap;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
/**
* @magentoAppArea adminhtml
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class GridTest extends TestCase
{
/**
* @var ColumnSet
*/
private $block;
/**
* @var LayoutInterface|MockObject
*/
private $layoutMock;
/**
* @var ColumnSet|MockObject
*/
private $columnSetMock;
/**
* @inheritdoc
*/
protected function setUp(): void
{
$this->layoutMock = $this->getMockBuilder(Layout::class)
->disableOriginalConstructor()
->disableOriginalClone()
->disableArgumentCloning()
->disallowMockingUnknownTypes()
->onlyMethods(['getChildName', 'getBlock', 'createBlock', 'renameElement', 'unsetChild', 'setChild'])
->addMethods(['helper'])
->getMock();
$this->columnSetMock = $this->getColumnSetMock();
$returnValueMap = [
['grid', 'grid.columnSet', 'grid.columnSet'],
['grid', 'reset_filter_button', 'reset_filter_button'],
['grid', 'search_button', 'search_button'],
];
$this->layoutMock->expects($this->any())
->method('getChildName')
->willReturnMap($returnValueMap);
$this->layoutMock->expects($this->any())
->method('getBlock')
->with('grid.columnSet')
->willReturn($this->columnSetMock);
$this->layoutMock->expects($this->any())
->method('createBlock')
->with(Button::class)
->willReturn(Bootstrap::getObjectManager()->get(LayoutInterface::class)->createBlock(Button::class));
$this->layoutMock->expects($this->any())
->method('helper')->with(Data::class)
->willReturn(Bootstrap::getObjectManager()->get(Data::class));
$this->block = Bootstrap::getObjectManager()
->get(LayoutInterface::class)
->createBlock(Grid::class);
$this->block->setLayout($this->layoutMock);
$this->block->setNameInLayout('grid');
}
/**
* Retrieve the mocked column set block instance
*
* @return ColumnSet|MockObject
*/
private function getColumnSetMock()
{
$objectManager = Bootstrap::getObjectManager();
$directoryList = $objectManager->create(
DirectoryList::class,
['root' => __DIR__]
);
return $this->getMockBuilder(ColumnSet::class)
->setConstructorArgs(
[
$objectManager->create(
\Magento\Framework\View\Element\Template\Context::class,
[
'filesystem' => $objectManager->create(
Filesystem::class,
['directoryList' => $directoryList]
)
]
),
$objectManager->create(UrlGeneratorFactory::class),
$objectManager->create(SubTotals::class),
$objectManager->create(Totals::class)
]
)
->getMock();
}
/**
* @return void
*/
public function testToHtmlPreparesColumns(): void
{
$this->columnSetMock->expects($this->once())->method('setRendererType');
$this->columnSetMock->expects($this->once())->method('setFilterType');
$this->columnSetMock->expects($this->once())->method('setSortable');
$this->block->setColumnRenderers(['filter' => 'Filter_Class']);
$this->block->setColumnFilters(['filter' => 'Filter_Class']);
$this->block->setSortable(false);
$this->block->toHtml();
}
/**
* @return void
*/
public function testGetMainButtonsHtmlReturnsEmptyStringIfFiltersArentVisible(): void
{
$this->columnSetMock->expects($this->once())->method('isFilterVisible')->willReturn(false);
$this->block->getMainButtonsHtml();
}
/**
* @return void
*/
public function testGetMassactionBlock(): void
{
/** @var $layout Layout */
$layout = Bootstrap::getObjectManager()->get(
LayoutInterface::class
);
/** @var $block Grid */
$block = $layout->createBlock(Extended::class, 'block');
$child = $layout->addBlock(Template::class, 'massaction', 'block');
$this->assertSame($child, $block->getMassactionBlock());
}
}