diff --git a/tests/php-unit-tests/unitary-tests/core/DBObjectTest.php b/tests/php-unit-tests/unitary-tests/core/DBObjectTest.php index a06497704..bbd46d4a1 100644 --- a/tests/php-unit-tests/unitary-tests/core/DBObjectTest.php +++ b/tests/php-unit-tests/unitary-tests/core/DBObjectTest.php @@ -678,6 +678,143 @@ class DBObjectTest extends ItopDataTestCase $oPerson->Set('email', 'test1@combodo.com'); } + /** + * @covers \DBObject::EnumTransitions + * @dataProvider EnumTransitionsProvider + * @return void + */ + public function testEnumTransitions(string $sObjClass, array $aObjData, ?string $sObjCurrentState, string $sSortType, array $aExpectedSortedStimuli): void + { + // Create temp object + $oObject = MetaModel::NewObject($sObjClass, $aObjData); + + // Force current state if necessary + if (false === is_null($sObjCurrentState)) { + $oObject->Set('status', $sObjCurrentState); + } + + // Force sort type + $oConfig = MetaModel::GetConfig(); + $oConfig->Set('lifecycle.transitions_sort_type', $sSortType); + + // Retrieve sorted transitions + $aTestedSortedTransitions = $oObject->EnumTransitions(); + + // Compare arrays keys as they reflect the order and as arrays values are not scalars + $aTestedSortedStimuli = array_keys($aTestedSortedTransitions); + $this->assertEquals($aExpectedSortedStimuli, $aTestedSortedStimuli, 'Transitions are not ordered as expected'); + } + + public function EnumTransitionsProvider(): array + { + $sUserRequestClassName = 'UserRequest'; + $aUserRequestData = [ + 'org_id' => 3, + 'caller_id' => 3, + 'title' => 'Test for EnumTransitions method', + 'description' => 'Hello there!', + ]; + + return [ + 'UserRequest - XML sort' => [ + $sUserRequestClassName, + $aUserRequestData, + null, + 'xml', + [ + 'ev_assign', + 'ev_timeout', + 'ev_wait_for_approval', + 'ev_autoresolve', + ], + ], + 'UserRequest - XML sort when in specific state' => [ + $sUserRequestClassName, + $aUserRequestData, + 'assigned', + 'xml', + [ + 'ev_pending', + 'ev_resolve', + 'ev_reassign', + 'ev_timeout', + 'ev_autoresolve', + ], + ], + 'UserRequest - Alphabetical (labels not codes) sort' => [ + $sUserRequestClassName, + $aUserRequestData, + null, + 'alphabetical', + [ + 'ev_assign', + 'ev_autoresolve', + 'ev_timeout', + 'ev_wait_for_approval', + ], + ], + 'UserRequest - Alphabetical (labels not codes) sort when in specific state' => [ + $sUserRequestClassName, + $aUserRequestData, + 'assigned', + 'alphabetical', + [ + 'ev_autoresolve', + 'ev_resolve', + 'ev_pending', + 'ev_reassign', + 'ev_timeout', + ], + ], + 'UserRequest - Fixed sort' => [ + $sUserRequestClassName, + $aUserRequestData, + null, + 'fixed', + [ + 'ev_wait_for_approval', + 'ev_assign', + 'ev_timeout', + 'ev_autoresolve', + ], + ], + 'UserRequest - Fixed sort when in specific state' => [ + $sUserRequestClassName, + $aUserRequestData, + 'resolved', + 'fixed', + [ + 'ev_reopen', + 'ev_autoresolve', + 'ev_close', + ], + ], + 'UserRequest - Relative sort' => [ + $sUserRequestClassName, + $aUserRequestData, + null, + 'relative', + [ + 'ev_wait_for_approval', + 'ev_assign', + 'ev_timeout', + 'ev_autoresolve', + ], + ], + 'UserRequest - Relative sort when in specific state' => [ + $sUserRequestClassName, + $aUserRequestData, + 'resolved', + 'relative', + [ + 'ev_autoresolve', + 'ev_close', + 'ev_reopen', + ], + ], + ]; + } + /** * @throws \ArchivedObjectException * @throws \CoreException