161 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			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());
 | 
						|
    }
 | 
						|
}
 |