![]() 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/cartforge.co/vendor/magento/module-store/Test/Unit/Controller/Store/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Store\Test\Unit\Controller\Store; use Magento\Framework\App\Action\Context; use Magento\Framework\App\ActionInterface; use Magento\Framework\App\RequestInterface; use Magento\Framework\App\Response\RedirectInterface; use Magento\Framework\App\ResponseInterface; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Framework\Message\ManagerInterface; use Magento\Framework\Session\SidResolverInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Store\Api\StoreRepositoryInterface; use Magento\Store\Api\StoreResolverInterface; use Magento\Store\Controller\Store\Redirect; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManagerInterface; use Magento\Store\Model\StoreResolver; use Magento\Store\Model\StoreSwitcher\ContextInterface; use Magento\Store\Model\StoreSwitcher\ContextInterfaceFactory; use Magento\Store\Model\StoreSwitcher\HashGenerator; use Magento\Store\Model\StoreSwitcher\RedirectDataGenerator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test class for redirect controller * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class RedirectTest extends TestCase { /** * Stub for default store view code */ private const STUB_DEFAULT_STORE_VIEW_CODE = 'default'; /** * Stub for default store code */ private const STUB_STORE_CODE = 'sv1'; /** * @var StoreManagerInterface|MockObject */ private $storeManagerMock; /** * @var StoreRepositoryInterface|MockObject */ private $storeRepositoryMock; /** * @var RequestInterface|MockObject */ private $requestMock; /** * @var StoreResolverInterface|MockObject */ private $storeResolverMock; /** * @var RedirectInterface|MockObject */ private $redirectMock; /** * @var ResponseInterface|MockObject */ private $responseMock; /** * @var ManagerInterface|MockObject */ private $messageManagerMock; /** * @var Store|MockObject */ private $fromStoreMock; /** * @var Store|MockObject */ private $targetStoreMock; /** * @var Store|MockObject */ private $currentStoreMock; /** * @var SidResolverInterface|MockObject */ private $sidResolverMock; /** * @var HashGenerator|MockObject */ private $hashGeneratorMock; /** * @var Redirect */ private $model; /** * @inheritDoc */ protected function setUp(): void { $this->storeManagerMock = $this->getMockForAbstractClass(StoreManagerInterface::class); $this->requestMock = $this->getMockBuilder(RequestInterface::class) ->disableOriginalConstructor() ->setMethods(['getParam']) ->getMockForAbstractClass(); $this->redirectMock = $this->getMockBuilder(RedirectInterface::class) ->disableOriginalConstructor() ->setMethods(['redirect']) ->getMockForAbstractClass(); $this->storeResolverMock = $this->getMockBuilder(StoreResolverInterface::class) ->disableOriginalConstructor() ->setMethods(['getCurrentStoreId']) ->getMockForAbstractClass(); $this->storeRepositoryMock = $this->getMockBuilder(StoreRepositoryInterface::class) ->disableOriginalConstructor() ->setMethods(['getById', 'get']) ->getMockForAbstractClass(); $this->messageManagerMock = $this->getMockBuilder(ManagerInterface::class) ->disableOriginalConstructor() ->setMethods(['addErrorMessage']) ->getMockForAbstractClass(); $this->responseMock = $this->getMockBuilder(ResponseInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->fromStoreMock = $this->getMockBuilder(Store::class) ->disableOriginalConstructor() ->setMethods(['getCode']) ->getMockForAbstractClass(); $this->targetStoreMock = $this->getMockBuilder(Store::class) ->disableOriginalConstructor() ->setMethods(['getCode']) ->getMockForAbstractClass(); $this->sidResolverMock = $this->getMockBuilder(SidResolverInterface::class) ->disableOriginalConstructor() ->setMethods(['getUseSessionInUrl']) ->getMockForAbstractClass(); $this->hashGeneratorMock = $this->createMock(HashGenerator::class); $this->currentStoreMock = $this->getMockBuilder(Store::class) ->disableOriginalConstructor() ->setMethods(['getBaseUrl']) ->getMock(); $this->storeRepositoryMock ->expects($this->once()) ->method('getById') ->willReturn($this->currentStoreMock); $this->storeResolverMock ->expects($this->once()) ->method('getCurrentStoreId') ->willReturnSelf(); $redirectDataGenerator = $this->createMock(RedirectDataGenerator::class); $contextFactory = $this->createMock(ContextInterfaceFactory::class); $contextFactory->method('create') ->willReturn($this->createMock(ContextInterface::class)); $objectManager = new ObjectManagerHelper($this); $context = $objectManager->getObject( Context::class, [ '_request' => $this->requestMock, '_redirect' => $this->redirectMock, '_response' => $this->responseMock, 'messageManager' => $this->messageManagerMock, ] ); $this->model = $objectManager->getObject( Redirect::class, [ 'storeManager' => $this->storeManagerMock, 'storeRepository' => $this->storeRepositoryMock, 'storeResolver' => $this->storeResolverMock, 'sidResolver' => $this->sidResolverMock, 'hashGenerator' => $this->hashGeneratorMock, 'context' => $context, 'redirectDataGenerator' => $redirectDataGenerator, 'contextFactory' => $contextFactory, ] ); } /** * Verify redirect controller * * @param string $defaultStoreViewCode * @param string $storeCode * * @dataProvider getConfigDataProvider * @return void */ public function testRedirect(string $defaultStoreViewCode, string $storeCode): void { $this->requestMock ->expects($this->exactly(3)) ->method('getParam') ->withConsecutive( [StoreResolver::PARAM_NAME], ['___from_store'], [ActionInterface::PARAM_NAME_URL_ENCODED] )->willReturnOnConsecutiveCalls( $storeCode, $defaultStoreViewCode, $defaultStoreViewCode ); $this->storeRepositoryMock ->expects($this->exactly(2)) ->method('get') ->willReturnMap([ [$defaultStoreViewCode, $this->fromStoreMock], [$storeCode, $this->targetStoreMock], ]); $this->fromStoreMock ->expects($this->once()) ->method('getCode') ->willReturn($defaultStoreViewCode); $this->storeManagerMock ->expects($this->once()) ->method('setCurrentStore') ->with($this->targetStoreMock); $this->redirectMock ->expects($this->once()) ->method('redirect') ->with( $this->responseMock, 'stores/store/switch', ['_nosid' => true, '_query' => [ 'uenc' => $defaultStoreViewCode, '___from_store' => $defaultStoreViewCode, '___store' => $storeCode, 'data' => '', 'time_stamp' => 0, 'signature' => '', ] ] ); $this->assertNull($this->model->execute()); } /** * Verify execute with exception * * @param string $defaultStoreViewCode * @param string $storeCode * @return void * @dataProvider getConfigDataProvider */ public function testRedirectWithThrowsException(string $defaultStoreViewCode, string $storeCode): void { $this->requestMock ->expects($this->exactly(2)) ->method('getParam') ->withConsecutive( [StoreResolver::PARAM_NAME], ['___from_store'] )->willReturnOnConsecutiveCalls( $storeCode, $defaultStoreViewCode ); $this->storeRepositoryMock ->expects($this->once()) ->method('get') ->with($defaultStoreViewCode) ->willThrowException(new NoSuchEntityException()); $this->messageManagerMock ->expects($this->once()) ->method('addErrorMessage') ->with("Requested store is not found ({$defaultStoreViewCode})") ->willReturnSelf(); $this->currentStoreMock ->expects($this->once()) ->method('getBaseUrl') ->willReturnSelf(); $this->redirectMock ->expects($this->once()) ->method('redirect') ->with($this->responseMock, $this->currentStoreMock) ->willReturnSelf(); $this->assertNull($this->model->execute()); } /** * Verify redirect target is null * * @return void */ public function testRedirectTargetIsNull(): void { $this->requestMock ->expects($this->exactly(2)) ->method('getParam') ->withConsecutive( [StoreResolver::PARAM_NAME], ['___from_store'] )->willReturnOnConsecutiveCalls( null, null ); $this->storeRepositoryMock ->expects($this->never()) ->method('get'); $this->assertEquals($this->responseMock, $this->model->execute()); } /** * Data provider * * @return array */ public function getConfigDataProvider(): array { return [ [self::STUB_DEFAULT_STORE_VIEW_CODE, self::STUB_STORE_CODE] ]; } }