Files
iTop/tests/php-unit-tests/unitary-tests/core/ormCaseLogServiceTest.php
2023-05-11 09:49:15 +02:00

141 lines
4.7 KiB
PHP

<?php
/*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Test\UnitTest\Core;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
/**
* Tests of the ormCaseLog class
*
* @covers \ormCaseLog
*
* @runTestsInSeparateProcesses
* @preserveGlobalState disabled
* @backupGlobals disabled
*/
class ormCaseLogServiceTest extends ItopDataTestCase
{
public function setUp() :void{
parent::setUp(); // TODO: Change the autogenerated stub
require_once __DIR__ . "/OrmCaseLogExtensionForTest.php";
require_once APPROOT . "core/ormcaselogservice.inc.php";
}
public function LoadCaseLogExtensionsProvider() {
$sNamespace = 'Combodo\\iTop\\Test\\';
$sExtensionClass1 = $sNamespace . \FakeOrmCaseLogExtension1::class;
$sExtensionClass2 = $sNamespace . \FakeOrmCaseLogExtension2::class;
$sExtensionClass3 = $sNamespace . \FakeOrmCaseLogExtension3::class;
return [
'default conf' => [
'aClassesForInterfaceOrmCaseLog' => [],
'ormcaselog_extension_classes' => null,
'aExpectedOrmCaseLogExtensions' => [],
],
'default conf with extension implemented' => [
'aClassesForInterfaceOrmCaseLog' => [$sExtensionClass1],
'ormcaselog_extension_classes' => null,
'aExpectedOrmCaseLogExtensions' => [],
],
'conf but not extension implemented' => [
'aClassesForInterfaceOrmCaseLog' => [],
'ormcaselog_extension_classes' => [ $sExtensionClass1 ],
'aExpectedOrmCaseLogExtensions' => [],
],
'one extension configured/implemented' => [
'aClassesForInterfaceOrmCaseLog' => [$sExtensionClass1],
'ormcaselog_extension_classes' => [ $sExtensionClass1 ],
'aExpectedOrmCaseLogExtensions' => [$sExtensionClass1],
],
'one extension configured' => [
'aClassesForInterfaceOrmCaseLog' => [
$sExtensionClass3,
$sExtensionClass1,
$sExtensionClass2,
],
'ormcaselog_extension_classes' => [ $sExtensionClass1 ],
'aExpectedOrmCaseLogExtensions' => [$sExtensionClass1],
],
'3 sorted extensions' => [
'aClassesForInterfaceOrmCaseLog' => [
$sExtensionClass3,
$sExtensionClass1,
$sExtensionClass2,
],
'ormcaselog_extension_classes' => [
$sExtensionClass1,
$sExtensionClass2,
$sExtensionClass3
],
'aExpectedOrmCaseLogExtensions' => [
$sExtensionClass1,
$sExtensionClass2,
$sExtensionClass3
],
],
];
}
/**
* @dataProvider LoadCaseLogExtensionsProvider
*/
public function testLoadCaseLogExtensions($aClassesForInterfaceOrmCaseLog, $aDedicatedParamConf, $aExpectedOrmCaseLogExtensions) {
if (!is_null($aDedicatedParamConf)){
\MetaModel::GetConfig()->Set('ormcaselog_extension_classes', $aDedicatedParamConf);
var_dump($aDedicatedParamConf);
}
$oOrmCaseLogService = new \ormCaseLogService();
$aRes = $this->InvokeNonPublicMethod(\ormCaseLogService::class, "LoadCaseLogExtensions", $oOrmCaseLogService,
[$aClassesForInterfaceOrmCaseLog]);
$this->assertEquals(sizeof($aExpectedOrmCaseLogExtensions), sizeof($aRes));
foreach ($aRes as $i => $aExtensionObject){
$sExpectedClass = $aExpectedOrmCaseLogExtensions[$i];
$this->assertEquals($sExpectedClass, get_class($aExtensionObject));
}
}
public function testDefaultLoadCaseLogExtensions() {
$oOrmCaseLogService = new \ormCaseLogService();
$aRes = $this->InvokeNonPublicMethod(\ormCaseLogService::class, "LoadCaseLogExtensions", $oOrmCaseLogService,
[]);
$this->assertEquals(0, sizeof($aRes), 'no extension running by default on iTop');
}
public function testLoadCaseLogExtensions_Memorize() {
$sNamespace = 'Combodo\\iTop\\Test\\';
$sExtensionClass1 = $sNamespace . \FakeOrmCaseLogExtension1::class;
$sExtensionClass2 = $sNamespace . \FakeOrmCaseLogExtension2::class;
$aExtensions = [$sExtensionClass1];
\MetaModel::GetConfig()->Set('ormcaselog_extension_classes', $aExtensions);
$oOrmCaseLogService = new \ormCaseLogService();
$aRes = $this->InvokeNonPublicMethod(\ormCaseLogService::class, "LoadCaseLogExtensions", $oOrmCaseLogService,
[$aExtensions]);
//load first time
$this->assertEquals(sizeof($aExtensions), sizeof($aRes));
$aMoreExtensions = [$sExtensionClass1, $sExtensionClass2];
\MetaModel::GetConfig()->Set('ormcaselog_extension_classes', $aMoreExtensions);
$aRes = $this->InvokeNonPublicMethod(\ormCaseLogService::class, "LoadCaseLogExtensions", $oOrmCaseLogService,
[$aMoreExtensions]);
$this->assertEquals(sizeof($aExtensions), sizeof($aRes), 'should still have one extension (memorized)');
$oOrmCaseLogService = new \ormCaseLogService();
$aRes = $this->InvokeNonPublicMethod(\ormCaseLogService::class, "LoadCaseLogExtensions", $oOrmCaseLogService,
[$aMoreExtensions]);
$this->assertEquals(sizeof($aMoreExtensions), sizeof($aRes), 'first time load');
}
}