<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Test\Unit\Controller\Adminhtml\Index; use Magento\Framework\App\Action\Context; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; /** * Class MassAssignGroupTest * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class MassAssignGroupTest extends \PHPUnit\Framework\TestCase { /** * @var \Magento\Customer\Controller\Adminhtml\Index\MassAssignGroup */ protected $massAction; /** * @var Context|\PHPUnit_Framework_MockObject_MockObject */ protected $contextMock; /** * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject */ protected $resultRedirectMock; /** * @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject */ protected $requestMock; /** * @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $responseMock; /** * @var \Magento\Framework\Message\Manager|\PHPUnit_Framework_MockObject_MockObject */ protected $messageManagerMock; /** * @var \Magento\Framework\ObjectManager\ObjectManager|\PHPUnit_Framework_MockObject_MockObject */ protected $objectManagerMock; /** * @var \Magento\Customer\Model\ResourceModel\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject */ protected $customerCollectionMock; /** * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */ protected $customerCollectionFactoryMock; /** * @var \Magento\Ui\Component\MassAction\Filter|\PHPUnit_Framework_MockObject_MockObject */ protected $filterMock; /** * @var \Magento\Customer\Api\CustomerRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */ protected $customerRepositoryMock; /** * @inheritdoc */ protected function setUp() { $objectManagerHelper = new ObjectManagerHelper($this); $this->contextMock = $this->createMock(\Magento\Backend\App\Action\Context::class); $resultRedirectFactory = $this->createMock( \Magento\Backend\Model\View\Result\RedirectFactory::class ); $this->responseMock = $this->createMock(\Magento\Framework\App\ResponseInterface::class); $this->requestMock = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class) ->disableOriginalConstructor()->getMock(); $this->objectManagerMock = $this->createPartialMock( \Magento\Framework\ObjectManager\ObjectManager::class, ['create'] ); $this->messageManagerMock = $this->createMock(\Magento\Framework\Message\Manager::class); $this->customerCollectionMock = $this->getMockBuilder(\Magento\Customer\Model\ResourceModel\Customer\Collection::class) ->disableOriginalConstructor() ->getMock(); $this->customerCollectionFactoryMock = $this->getMockBuilder(\Magento\Customer\Model\ResourceModel\Customer\CollectionFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $redirectMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class) ->disableOriginalConstructor() ->getMock(); $resultFactoryMock = $this->getMockBuilder(\Magento\Framework\Controller\ResultFactory::class) ->disableOriginalConstructor() ->getMock(); $resultFactoryMock->expects($this->any()) ->method('create') ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT) ->willReturn($redirectMock); $this->resultRedirectMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class) ->disableOriginalConstructor() ->getMock(); $resultRedirectFactory->expects($this->any())->method('create')->willReturn($this->resultRedirectMock); $this->contextMock->expects($this->once())->method('getMessageManager')->willReturn($this->messageManagerMock); $this->contextMock->expects($this->once())->method('getRequest')->willReturn($this->requestMock); $this->contextMock->expects($this->once())->method('getResponse')->willReturn($this->responseMock); $this->contextMock->expects($this->once())->method('getObjectManager')->willReturn($this->objectManagerMock); $this->contextMock->expects($this->any()) ->method('getResultRedirectFactory') ->willReturn($resultRedirectFactory); $this->contextMock->expects($this->any()) ->method('getResultFactory') ->willReturn($resultFactoryMock); $this->filterMock = $this->createMock(\Magento\Ui\Component\MassAction\Filter::class); $this->filterMock->expects($this->once()) ->method('getCollection') ->with($this->customerCollectionMock) ->willReturnArgument(0); $this->customerCollectionFactoryMock->expects($this->once()) ->method('create') ->willReturn($this->customerCollectionMock); $this->customerRepositoryMock = $this ->getMockBuilder(\Magento\Customer\Api\CustomerRepositoryInterface::class) ->getMockForAbstractClass(); $this->massAction = $objectManagerHelper->getObject( \Magento\Customer\Controller\Adminhtml\Index\MassAssignGroup::class, [ 'context' => $this->contextMock, 'filter' => $this->filterMock, 'collectionFactory' => $this->customerCollectionFactoryMock, 'customerRepository' => $this->customerRepositoryMock, ] ); } /** * Unit test to verify mass customer group assignment use case * * @throws \Magento\Framework\Exception\LocalizedException */ public function testExecute() { $customersIds = [10, 11, 12]; $customerMock = $this->getMockBuilder(\Magento\Customer\Api\Data\CustomerInterface::class) ->setMethods(['setData']) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->customerCollectionMock->expects($this->any()) ->method('getAllIds') ->willReturn($customersIds); $this->customerRepositoryMock->expects($this->any()) ->method('getById') ->willReturnMap([[10, $customerMock], [11, $customerMock], [12, $customerMock]]); $this->messageManagerMock->expects($this->once()) ->method('addSuccess') ->with(__('A total of %1 record(s) were updated.', count($customersIds))); $this->resultRedirectMock->expects($this->any()) ->method('setPath') ->with('customer/*/index') ->willReturnSelf(); $this->massAction->execute(); } /** * Unit test to verify expected error during mass customer group assignment use case * * @throws \Magento\Framework\Exception\LocalizedException */ public function testExecuteWithException() { $customersIds = [10, 11, 12]; $this->customerCollectionMock->expects($this->any()) ->method('getAllIds') ->willReturn($customersIds); $this->customerRepositoryMock->expects($this->any()) ->method('getById') ->willThrowException(new \Exception('Some message.')); $this->messageManagerMock->expects($this->once()) ->method('addError') ->with('Some message.'); $this->massAction->execute(); } }