Viewing File: /home/maglabs/it/app/code/Magento/UrlRewrite/Test/Unit/Controller/Url/Rewrite/MassDeleteTest.php

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\UrlRewrite\Test\Unit\Controller\Url\Rewrite;

use Magento\Backend\App\Action\Context;
use Magento\Backend\Model\View\Result\Redirect;
use Magento\Framework\Controller\Result\RedirectFactory;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Message\ManagerInterface;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use Magento\Ui\Component\MassAction\Filter;
use Magento\UrlRewrite\Controller\Adminhtml\Url\Rewrite\MassDelete;
use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection as Collection;
use Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollectionFactory as CollectionFactory;
use Magento\UrlRewrite\Model\UrlRewrite;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

/**
 * Url rewrite mass delete action unit test class
 *
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class MassDeleteTest extends TestCase
{
    /**
     * @var ObjectManager
     */
    private $objectManager;

    /**
     * @var ManagerInterface|MockObject
     */
    private $messageManagerMock;

    /**
     * @var RedirectFactory|MockObject
     */
    private $resultRedirectMock;

    /**
     * @var Context|MockObject
     */
    private $contextMock;

    /**
     * @var Filter|MockObject
     */
    private $filterMock;

    /**
     * @var Collection|MockObject
     */
    private $urlRewriteCollectionMock;

    /**
     * @var CollectionFactory|MockObject
     */
    private $collectionFactoryMock;

    /**
     * @var MassDelete|object
     */
    private $massDeleteController;

    /**
     * @var RedirectFactory|MockObject
     */
    private $resultRedirectFactoryMock;

    /**
     * SetUp method
     */
    protected function setUp(): void
    {
        $this->objectManager = new ObjectManager($this);

        $this->messageManagerMock = $this->getMockForAbstractClass(ManagerInterface::class);

        $this->resultRedirectFactoryMock = $this->createPartialMock(
            RedirectFactory::class,
            ['create']
        );
        $this->resultRedirectMock = $this->createMock(Redirect::class);

        $this->contextMock = $this->createMock(Context::class);

        $this->filterMock = $this->getMockBuilder(Filter::class)
            ->disableOriginalConstructor()
            ->getMock();

        $this->contextMock->expects($this->any())
            ->method('getMessageManager')
            ->willReturn($this->messageManagerMock);
        $this->contextMock->expects($this->any())
            ->method('getResultRedirectFactory')
            ->willReturn($this->resultRedirectFactoryMock);

        $this->collectionFactoryMock = $this->createPartialMock(
            CollectionFactory::class,
            ['create']
        );
        $this->urlRewriteCollectionMock =
            $this->createMock(Collection::class);

        $this->massDeleteController = $this->objectManager->getObject(
            MassDelete::class,
            [
                'context' => $this->contextMock,
                'filter' => $this->filterMock,
                'collectionFactory' => $this->collectionFactoryMock
            ]
        );
    }

    /**
     * Test mass delete action
     *
     * @throws LocalizedException
     */
    public function testMassDeleteAction(): void
    {
        $collection = [
            $this->getUrlRewriteMock(),
            $this->getUrlRewriteMock(),
            $this->getUrlRewriteMock(true)
        ];

        $this->collectionFactoryMock->expects($this->once())
            ->method('create')
            ->willReturn($this->urlRewriteCollectionMock);

        $this->filterMock->expects($this->once())
            ->method('getCollection')
            ->with($this->urlRewriteCollectionMock)
            ->willReturn($this->urlRewriteCollectionMock);

        $this->urlRewriteCollectionMock->expects($this->once())
            ->method('getIterator')
            ->willReturn(new \ArrayIterator($collection));

        $this->messageManagerMock->expects($this->once())
            ->method('addSuccessMessage')
            ->with(__('A total of %1 record(s) have been deleted.', 2));
        $this->messageManagerMock->expects($this->once())
            ->method('addErrorMessage')
            ->with(__('A total of %1 record(s) haven\'t been deleted.', 1));

        $this->resultRedirectFactoryMock->expects($this->once())
            ->method('create')
            ->willReturn($this->resultRedirectMock);
        $this->resultRedirectMock->expects($this->once())
            ->method('setPath')
            ->with('*/*/')
            ->willReturnSelf();

        $this->assertSame($this->resultRedirectMock, $this->massDeleteController->execute());
    }

    /**
     * Create url rewrite model mock
     *
     * @param bool $exception
     * @return MockObject
     */
    private function getUrlRewriteMock($exception = false): MockObject
    {
        $urlRewrite = $this->createPartialMock(UrlRewrite::class, ['delete']);
        $urlRewriteInvocationMocker = $urlRewrite->expects($this->once())
            ->method('delete');
        if ($exception) {
            $urlRewriteInvocationMocker->willThrowException(
                new \Exception('Test delete exception')
            );
        } else {
            $urlRewriteInvocationMocker->willReturn(true);
        }

        return $urlRewrite;
    }
}
Back to Directory File Manager