[ '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'); } }