![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-customer/Test/Unit/Model/ |
<?php declare(strict_types=1); /** * Unit test for session \Magento\Customer\Model\Session * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Test\Unit\Model; use Magento\Customer\Api\CustomerRepositoryInterface; use Magento\Customer\Api\Data\CustomerInterface; use Magento\Customer\Model\Customer; use Magento\Customer\Model\CustomerFactory; use Magento\Customer\Model\ResourceModel\Customer as ResourceCustomer; use Magento\Customer\Model\Session; use Magento\Customer\Model\Session\Storage; use Magento\Framework\App\Http\Context; use Magento\Framework\App\Response\Http; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Framework\Url; use Magento\Framework\UrlFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class SessionTest extends TestCase { /** * @var ResourceCustomer|MockObject */ protected $_customerResourceMock; /** * @var Storage|MockObject */ protected $_storageMock; /** * @var ManagerInterface|MockObject */ protected $_eventManagerMock; /** * @var Context|MockObject */ protected $_httpContextMock; /** * @var UrlFactory|MockObject */ protected $urlFactoryMock; /** * @var CustomerFactory|MockObject */ protected $customerFactoryMock; /** * @var CustomerRepositoryInterface|MockObject */ protected $customerRepositoryMock; /** * @var Http|MockObject */ protected $responseMock; /** * @var Session */ protected $_model; /** * @inheritdoc */ protected function setUp(): void { $this->_storageMock = $this->getMockBuilder(Storage::class) ->addMethods(['getIsCustomerEmulated', 'unsIsCustomerEmulated']) ->onlyMethods(['getData']) ->disableOriginalConstructor() ->getMock(); $this->_eventManagerMock = $this->getMockForAbstractClass(ManagerInterface::class); $this->_httpContextMock = $this->createMock(Context::class); $this->urlFactoryMock = $this->createMock(UrlFactory::class); $this->customerFactoryMock = $this->getMockBuilder(CustomerFactory::class)->disableOriginalConstructor() ->onlyMethods(['create']) ->addMethods(['save']) ->getMock(); $this->_customerResourceMock = $this->getMockBuilder(ResourceCustomer::class)->disableOriginalConstructor() ->onlyMethods(['load', 'save']) ->getMock(); $this->customerRepositoryMock = $this->getMockForAbstractClass(CustomerRepositoryInterface::class); $helper = new ObjectManagerHelper($this); $this->responseMock = $this->createMock(Http::class); $this->_model = $helper->getObject( Session::class, [ 'customerFactory' => $this->customerFactoryMock, 'storage' => $this->_storageMock, 'eventManager' => $this->_eventManagerMock, 'httpContext' => $this->_httpContextMock, 'urlFactory' => $this->urlFactoryMock, 'customerRepository' => $this->customerRepositoryMock, 'response' => $this->responseMock, '_customerResource' => $this->_customerResourceMock ] ); } /** * @return void */ public function testSetCustomerAsLoggedIn(): void { $customer = $this->createMock(Customer::class); $customerDto = $this->getMockForAbstractClass(CustomerInterface::class); $customer->expects($this->any()) ->method('getDataModel') ->willReturn($customerDto); $this->_eventManagerMock ->method('dispatch') ->withConsecutive( ['customer_login', ['customer' => $customer]], ['customer_data_object_login', ['customer' => $customerDto]] ); $_SESSION = []; $this->_model->setCustomerAsLoggedIn($customer); $this->assertSame($customer, $this->_model->getCustomer()); } /** * @return void */ public function testSetCustomerDataAsLoggedIn(): void { $customer = $this->createMock(Customer::class); $customerDto = $this->getMockForAbstractClass(CustomerInterface::class); $this->customerFactoryMock->expects($this->once()) ->method('create') ->willReturn($customer); $customer->expects($this->once()) ->method('updateData') ->with($customerDto) ->willReturnSelf(); $this->_eventManagerMock ->method('dispatch') ->withConsecutive( ['customer_login', ['customer' => $customer]], ['customer_data_object_login', ['customer' => $customerDto]] ); $this->_model->setCustomerDataAsLoggedIn($customerDto); $this->assertSame($customer, $this->_model->getCustomer()); } /** * @return void */ public function testAuthenticate(): void { $urlMock = $this->createMock(Url::class); $urlMock->expects($this->exactly(2)) ->method('getUrl') ->willReturn(''); $urlMock->expects($this->once()) ->method('getRebuiltUrl') ->willReturn(''); $this->urlFactoryMock->expects($this->exactly(3)) ->method('create') ->willReturn($urlMock); $urlMock->expects($this->never()) ->method('getUseSession') ->willReturn(false); $this->responseMock->expects($this->once()) ->method('setRedirect') ->with('') ->willReturn(''); $this->assertFalse($this->_model->authenticate()); } /** * @return void */ public function testLoginById(): void { $customerId = 1; $customerDataMock = $this->prepareLoginDataMock($customerId); $this->customerRepositoryMock->expects($this->once()) ->method('getById') ->with($customerId) ->willReturn($customerDataMock); $this->assertTrue($this->_model->loginById($customerId)); } /** * @param int $customerId * * @return MockObject */ protected function prepareLoginDataMock(int $customerId): MockObject { $customerDataMock = $this->getMockForAbstractClass(CustomerInterface::class); $customerDataMock->expects($this->once()) ->method('getId') ->willReturn($customerId); $customerMock = $this->getMockBuilder(Customer::class) ->addMethods(['getConfirmation']) ->onlyMethods(['getId', 'updateData', 'getGroupId']) ->disableOriginalConstructor() ->getMock(); $customerMock->expects($this->exactly(3)) ->method('getId') ->willReturn($customerId); $customerMock->expects($this->once()) ->method('getConfirmation') ->willReturn($customerId); $this->customerFactoryMock->expects($this->once()) ->method('create') ->willReturn($customerMock); $customerMock->expects($this->once()) ->method('updateData') ->with($customerDataMock) ->willReturnSelf(); $this->_httpContextMock->expects($this->exactly(3)) ->method('setValue'); return $customerDataMock; } /** * @param bool $expectedResult * @param bool $isCustomerIdValid * @param bool $isCustomerEmulated * * @return void * @dataProvider getIsLoggedInDataProvider */ public function testIsLoggedIn( bool $expectedResult, bool $isCustomerIdValid, bool $isCustomerEmulated ): void { $customerId = 1; $this->_storageMock->expects($this->any())->method('getData')->with('customer_id') ->willReturn($customerId); if ($isCustomerIdValid) { $this->customerRepositoryMock->expects($this->once()) ->method('getById') ->with($customerId); } else { $this->customerRepositoryMock->expects($this->once()) ->method('getById') ->with($customerId) ->willThrowException(new \Exception('Customer ID is invalid.')); } $this->_storageMock->expects($this->any())->method('getIsCustomerEmulated') ->willReturn($isCustomerEmulated); $this->assertEquals($expectedResult, $this->_model->isLoggedIn()); } /** * @return array */ public function getIsLoggedInDataProvider(): array { return [ ['expectedResult' => true, 'isCustomerIdValid' => true, 'isCustomerEmulated' => false], ['expectedResult' => false, 'isCustomerIdValid' => true, 'isCustomerEmulated' => true], ['expectedResult' => false, 'isCustomerIdValid' => false, 'isCustomerEmulated' => false], ['expectedResult' => false, 'isCustomerIdValid' => false, 'isCustomerEmulated' => true] ]; } /** * @return void */ public function testSetCustomerRemovesFlagThatShowsIfCustomerIsEmulated(): void { $customerMock = $this->createMock(Customer::class); $this->_storageMock->expects($this->once())->method('unsIsCustomerEmulated'); $this->_model->setCustomer($customerMock); } /** * Test "getCustomer()" for guest user * * @return void */ public function testGetCustomerForGuestUser(): void { $customerMock = $this->getMockBuilder(Customer::class) ->disableOriginalConstructor() ->getMock(); $this->customerFactoryMock ->expects($this->once()) ->method('create') ->willReturn($customerMock); $this->assertSame($customerMock, $this->_model->getCustomer()); } /** * Test "getCustomer()" for registered user * * @return void */ public function testGetCustomerForRegisteredUser(): void { $customerId = 1; $customerMock = $this->getMockBuilder(Customer::class) ->disableOriginalConstructor() ->getMock(); $this->customerFactoryMock ->expects($this->once()) ->method('create') ->willReturn($customerMock); $this->_storageMock ->expects($this->exactly(4)) ->method('getData') ->with('customer_id') ->willReturn($customerId); $this->_customerResourceMock ->expects($this->once()) ->method('load') ->with($customerMock, $customerId) ->willReturn($customerMock); $this->assertSame($customerMock, $this->_model->getCustomer()); } }