Spamworldpro Mini Shell
Spamworldpro


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-store/Test/Unit/Model/StoreSwitcher/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //home/corals/old/vendor/magento/module-store/Test/Unit/Model/StoreSwitcher/HashProcessorTest.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\Store\Test\Unit\Model\StoreSwitcher;

use InvalidArgumentException;
use Magento\Framework\App\RequestInterface;
use Magento\Framework\Message\ManagerInterface;
use Magento\Store\Api\Data\StoreInterface;
use Magento\Store\Model\StoreSwitcher\ContextInterface;
use Magento\Store\Model\StoreSwitcher\ContextInterfaceFactory;
use Magento\Store\Model\StoreSwitcher\HashProcessor;
use Magento\Store\Model\StoreSwitcher\RedirectDataInterface;
use Magento\Store\Model\StoreSwitcher\RedirectDataInterfaceFactory;
use Magento\Store\Model\StoreSwitcher\RedirectDataPostprocessorInterface;
use Magento\Store\Model\StoreSwitcher\RedirectDataSerializerInterface;
use Magento\Store\Model\StoreSwitcher\RedirectDataValidator;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;

/**
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class HashProcessorTest extends TestCase
{
    /**
     * @var RequestInterface|MockObject
     */
    private $request;
    /**
     * @var RedirectDataPostprocessorInterface|MockObject
     */
    private $postprocessor;
    /**
     * @var RedirectDataSerializerInterface|MockObject
     */
    private $dataSerializer;
    /**
     * @var ManagerInterface|MockObject
     */
    private $messageManager;
    /**
     * @var RedirectDataValidator|MockObject
     */
    private $dataValidator;
    /**
     * @var StoreInterface|MockObject
     */
    private $store1;
    /**
     * @var StoreInterface|MockObject
     */
    private $store2;
    /**
     * @var HashProcessor
     */
    private $model;

    /**
     * @inheritDoc
     */
    protected function setUp(): void
    {
        parent::setUp();
        $this->request = $this->createMock(RequestInterface::class);
        $this->postprocessor = $this->createMock(RedirectDataPostprocessorInterface::class);
        $this->dataSerializer = $this->createMock(RedirectDataSerializerInterface::class);
        $this->messageManager = $this->createMock(ManagerInterface::class);
        $contextFactory = $this->createMock(ContextInterfaceFactory::class);
        $dataFactory = $this->createMock(RedirectDataInterfaceFactory::class);
        $this->dataValidator = $this->createMock(RedirectDataValidator::class);
        $logger = $this->createMock(LoggerInterface::class);
        $this->store1 = $this->createMock(StoreInterface::class);
        $this->store2 = $this->createMock(StoreInterface::class);
        $this->model = new HashProcessor(
            $this->request,
            $this->postprocessor,
            $this->dataSerializer,
            $this->messageManager,
            $contextFactory,
            $dataFactory,
            $this->dataValidator,
            $logger
        );

        $contextFactory->method('create')
            ->willReturn($this->createMock(ContextInterface::class));
        $dataFactory->method('create')
            ->willReturnCallback(
                function (array $data) {
                    return $this->createConfiguredMock(
                        RedirectDataInterface::class,
                        [
                            'getTimestamp' => $data['timestamp'],
                            'getData' => $data['data'],
                            'getSignature' => $data['signature'],
                        ]
                    );
                }
            );
    }

    public function testShouldProcessIfDataValidationPassed(): void
    {
        $redirectUrl = '/category-1/category-1.1.html';
        $this->request->method('getParam')
            ->willReturnMap(
                [
                    ['time_stamp', null, time() - 1],
                    ['data', null, '{"customer_id":1}'],
                    ['signature', null, 'randomstring'],
                ]
            );
        $this->dataValidator->method('validate')
            ->willReturn(true);
        $this->dataSerializer->method('unserialize')
            ->with('{"customer_id":1}')
            ->willReturnCallback(
                function ($arg) {
                    return json_decode($arg, true);
                }
            );
        $this->postprocessor->expects($this->once())
            ->method('process')
            ->with($this->isInstanceOf(ContextInterface::class), ['customer_id' => 1]);
        $this->messageManager->expects($this->never())
            ->method('addErrorMessage');
        $this->assertEquals($redirectUrl, $this->model->switch($this->store1, $this->store2, $redirectUrl));
    }

    public function testShouldNotProcessIfDataValidationFailed(): void
    {
        $redirectUrl = '/category-1/category-1.1.html';
        $this->request->method('getParam')
            ->willReturnMap(
                [
                    ['time_stamp', null, time() - 1],
                    ['data', null, '{"customer_id":1}'],
                    ['signature', null, 'randomstring'],
                ]
            );
        $this->dataValidator->method('validate')
            ->willReturn(false);
        $this->postprocessor->expects($this->never())
            ->method('process');
        $this->messageManager->expects($this->once())
            ->method('addErrorMessage')
            ->with('The requested store cannot be found. Please check the request and try again.');

        $this->assertEquals($redirectUrl, $this->model->switch($this->store1, $this->store2, $redirectUrl));
    }

    public function testShouldNotProcessIfDataUnserializationFailed(): void
    {
        $redirectUrl = '/category-1/category-1.1.html';
        $this->request->method('getParam')
            ->willReturnMap(
                [
                    ['time_stamp', null, time() - 1],
                    ['data', null, '{"customer_id":1}'],
                    ['signature', null, 'randomstring'],
                ]
            );
        $this->dataValidator->method('validate')
            ->willReturn(true);
        $this->dataSerializer->method('unserialize')
            ->willThrowException(new InvalidArgumentException('Invalid token supplied'));
        $this->postprocessor->expects($this->never())
            ->method('process');
        $this->messageManager->expects($this->once())
            ->method('addErrorMessage')
            ->with('Something went wrong.');

        $this->assertEquals($redirectUrl, $this->model->switch($this->store1, $this->store2, $redirectUrl));
    }

    public function testShouldNotProcessIfDataIsNotPresentInTheRequest(): void
    {
        $redirectUrl = '/category-1/category-1.1.html';
        $this->dataValidator->expects($this->never())
            ->method('validate');
        $this->postprocessor->expects($this->never())
            ->method('process');
        $this->messageManager->expects($this->never())
            ->method('addErrorMessage');
        $this->assertEquals($redirectUrl, $this->model->switch($this->store1, $this->store2, $redirectUrl));
    }
}

Spamworldpro Mini