tao-test/app/tao/test/unit/extensionManager/ExtensionManagerTest.php

174 lines
6.1 KiB
PHP

<?php
namespace oat\tao\test\unit\extensionManager;
use oat\generis\test\TestCase;
use oat\tao\model\service\ApplicationService;
use PHPUnit\Framework\ExpectationFailedException;
class ExtensionManagerTest extends TestCase
{
public function testIndexOnProductionMode()
{
$applicationServiceMock = $this->prophesize(ApplicationService::class);
$applicationServiceMock->isDebugMode()->willReturn(false);
$extensionManagerMock = $this->prophesize(\common_ext_ExtensionsManager::class);
$extensionManagerMock->getInstalledExtensions()->willReturn(['value1']);
$serviceLocatorMock = $this->getServiceLocatorMock([
ApplicationService::SERVICE_ID => $applicationServiceMock->reveal(),
\common_ext_ExtensionsManager::SERVICE_ID => $extensionManagerMock->reveal(),
]);
$controller = new ExtensionManagerFake();
$controller->setServiceLocator($serviceLocatorMock);
$controller->index();
$class = new \ReflectionClass(\Renderer::class);
$property = $class->getProperty('variables');
$property->setAccessible(true);
$variables = $property->getValue($controller->getRenderer());
$this->assertArrayHasKey('isProduction', $variables);
$this->assertEquals(true, $variables['isProduction']);
$this->assertArrayHasKey('installedExtArray', $variables);
$this->assertEquals(['value1'], $variables['installedExtArray']);
$this->assertArrayNotHasKey('availableExtArray', $variables);
}
public function testIndexOnDebugMode()
{
$applicationServiceMock = $this->prophesize(ApplicationService::class);
$applicationServiceMock->isDebugMode()->willReturn(true);
$extensionManagerMock = $this->prophesize(\common_ext_ExtensionsManager::class);
$extensionManagerMock->getInstalledExtensions()->willReturn(['value1']);
$extensionManagerMock->getAvailableExtensions()->willReturn(['value2']);
$serviceLocatorMock = $this->getServiceLocatorMock([
ApplicationService::SERVICE_ID => $applicationServiceMock->reveal(),
\common_ext_ExtensionsManager::SERVICE_ID => $extensionManagerMock->reveal(),
]);
$controller = new ExtensionManagerFake();
$controller->setServiceLocator($serviceLocatorMock);
$controller->index();
$class = new \ReflectionClass(\Renderer::class);
$property = $class->getProperty('variables');
$property->setAccessible(true);
$variables = $property->getValue($controller->getRenderer());
$this->assertArrayHasKey('isProduction', $variables);
$this->assertEquals(false, $variables['isProduction']);
$this->assertArrayHasKey('installedExtArray', $variables);
$this->assertEquals(['value1'], $variables['installedExtArray']);
$this->assertArrayHasKey('availableExtArray', $variables);
$this->assertEquals(['value2'], $variables['availableExtArray']);
}
/**
* @param $debugMode
* @return ExtensionManagerFake
*/
protected function getExtensionManagerWithDebugMode($debugMode)
{
$applicationServiceMock = $this->prophesize(ApplicationService::class);
$applicationServiceMock->isDebugMode()->willReturn($debugMode);
$serviceLocatorMock = $this->getServiceLocatorMock([
ApplicationService::SERVICE_ID => $applicationServiceMock->reveal(),
]);
$controller = new ExtensionManagerFake();
$controller->setServiceLocator($serviceLocatorMock);
return $controller;
}
public function testInstallOnDebugMode()
{
$controller = $this->getExtensionManagerWithDebugMode(true);
$this->expectException(ExpectationFailedException::class);
$controller->install();
}
public function testInstallOnProductionMode()
{
$controller = $this->getExtensionManagerWithDebugMode(false);
$this->expectException(\common_exception_BadRequest::class);
$controller->install();
}
public function testUnInstallOnDebugMode()
{
$controller = $this->getExtensionManagerWithDebugMode(true);
$this->expectException(ExpectationFailedException::class);
$controller->uninstall();
}
public function testUnInstallOnProductionMode()
{
$controller = $this->getExtensionManagerWithDebugMode(false);
$this->expectException(\common_exception_BadRequest::class);
$controller->uninstall();
}
public function testDisableOnDebugMode()
{
$controller = $this->getExtensionManagerWithDebugMode(true);
$this->expectException(ExpectationFailedException::class);
$controller->disable();
}
public function testDisableOnProductionMode()
{
$controller = $this->getExtensionManagerWithDebugMode(false);
$this->expectException(\common_exception_BadRequest::class);
$controller->disable();
}
public function testEnableOnDebugMode()
{
$controller = $this->getExtensionManagerWithDebugMode(true);
$this->expectException(ExpectationFailedException::class);
$controller->enable();
}
public function testEnableOnProductionMode()
{
$controller = $this->getExtensionManagerWithDebugMode(false);
$this->expectException(\common_exception_BadRequest::class);
$controller->enable();
}
}
class ExtensionManagerFake extends \tao_actions_ExtensionsManager
{
public function __construct()
{
// to avoid to set header because body is already sent
}
public function setView($path, $extensionID = null)
{
// avoid to call Template::getTemplate
}
public function hasRequestParameter($name)
{
// to intercept the flow and avoid to load common_request
throw new ExpectationFailedException('HTTP request cannot be handled by unit test');
}
public function getRequestParameter($name)
{
// to intercept the flow and avoid to load common_request
throw new ExpectationFailedException('HTTP request cannot be handled by unit test');
}
}