magento2-docker/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandlerTest.php

127 lines
4.3 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Session;
use Magento\Framework\App\DeploymentConfig;
use Magento\Framework\Exception\SessionException;
use Magento\Framework\Phrase;
use Magento\Framework\Session\Config\ConfigInterface;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\ObjectManager;
/**
* Tests \Magento\Framework\Session\SaveHandler functionality.
*
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class SaveHandlerTest extends \PHPUnit\Framework\TestCase
{
/**
* @var ObjectManager
*/
private $objectManager;
/**
* @var DeploymentConfig|\PHPUnit\Framework\MockObject\MockObject
*/
private $deploymentConfigMock;
/**
* @var SaveHandlerFactory|\PHPUnit\Framework\MockObject\MockObject
*/
private $saveHandlerFactoryMock;
/**
* @inheritdoc
*/
protected function setUp(): void
{
$this->objectManager = Bootstrap::getObjectManager();
$this->deploymentConfigMock = $this->createMock(DeploymentConfig::class);
$this->objectManager->addSharedInstance($this->deploymentConfigMock, DeploymentConfig::class);
$this->saveHandlerFactoryMock = $this->createMock(SaveHandlerFactory::class);
$this->objectManager->addSharedInstance($this->saveHandlerFactoryMock, SaveHandlerFactory::class);
}
/**
* @inheritdoc
*/
protected function tearDown(): void
{
$this->objectManager->removeSharedInstance(DeploymentConfig::class);
$this->objectManager->removeSharedInstance(SaveHandlerFactory::class);
}
/**
* @return void
*/
public function testRedisSaveHandler(): void
{
$this->deploymentConfigMock->method('get')
->willReturnMap(
[
[Config::PARAM_SESSION_SAVE_METHOD, null, 'redis'],
[Config::PARAM_SESSION_SAVE_PATH, null, 'explicit_save_path'],
]
);
$redisHandlerMock = $this->getMockBuilder(SaveHandler\Redis::class)
->disableOriginalConstructor()
->getMock();
$redisHandlerMock->method('open')
->with('explicit_save_path', 'test_session_id')
->willReturn(true);
$this->saveHandlerFactoryMock->expects($this->exactly(1))
->method('create')
->with('redis')
->willReturn($redisHandlerMock);
$sessionConfig = $this->objectManager->create(ConfigInterface::class);
/** @var SaveHandler $saveHandler */
$saveHandler = $this->objectManager->create(SaveHandler::class, ['sessionConfig' => $sessionConfig]);
$result = $saveHandler->open('explicit_save_path', 'test_session_id');
$this->assertTrue($result);
}
/**
* @return void
*/
public function testRedisSaveHandlerFallbackToDefaultOnSessionException(): void
{
$this->deploymentConfigMock->method('get')
->willReturnMap(
[
[Config::PARAM_SESSION_SAVE_METHOD, null, 'redis'],
[Config::PARAM_SESSION_SAVE_PATH, null, 'explicit_save_path'],
]
);
$redisHandlerMock = $this->getMockBuilder(SaveHandler\Redis::class)
->disableOriginalConstructor()
->getMock();
$redisHandlerMock->method('open')
->with('explicit_save_path', 'test_session_id')
->willThrowException(new SessionException(new Phrase('Session Exception')));
$defaultHandlerMock = $this->getMockBuilder(SaveHandler\Native::class)
->disableOriginalConstructor()
->getMock();
$defaultHandlerMock->expects($this->once())->method('open')->with('explicit_save_path', 'test_session_id');
$this->saveHandlerFactoryMock
->method('create')
->withConsecutive(['redis'], [SaveHandlerInterface::DEFAULT_HANDLER])
->willReturnOnConsecutiveCalls($redisHandlerMock, $defaultHandlerMock);
$sessionConfig = $this->objectManager->create(ConfigInterface::class);
/** @var SaveHandler $saveHandler */
$saveHandler = $this->objectManager->create(SaveHandler::class, ['sessionConfig' => $sessionConfig]);
$saveHandler->open('explicit_save_path', 'test_session_id');
}
}