Files
iTop/tests/php-unit-tests/unitary-tests/sources/Users/ITopUserCountingRepositoryTest.php
jf-cbd b2329939b6 WIP
2026-06-17 17:03:42 +02:00

115 lines
3.8 KiB
PHP

<?php
namespace Users;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
use Combodo\iTop\Users\ITopUserCountingRepository;
use User;
class ITopUserCountingRepositoryTest extends ItopDataTestCase
{
protected function setUp(): void
{
parent::setUp();
$this->CreateReadOnlyUsers();
}
private function CreateReadOnlyUsers()
{
$this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Configuration ReadOnly']);
$this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Ticket ReadOnly']);
$this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Service Catalog ReadOnly']);
$this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Configuration ReadOnly', 'Ticket ReadOnly']);
$this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Ticket ReadOnly', 'Service Catalog ReadOnly']);
$this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Configuration ReadOnly', 'Ticket ReadOnly', 'Service Catalog ReadOnly']);
}
private function CreateDisabledUser()
{
$sUser = $this->GivenUserInDB('qpf_z17H3232*"ré$"é', ['Configuration Manager']);
// get user by login
$oUser = \MetaModel::GetObjectByName('User', $sUser);
$oUser->Set('status', 'disabled');
$oUser->DBUpdate();
}
/**
* @throws \CoreUnexpectedValue
* @throws \DictExceptionMissingString
* @throws \CoreException
* @throws \MySQLException
* @throws \Exception
*/
public function testNotDuplicateInDifferentCountsCategories(): void
{
$oITopUserRepository = new ITopUserCountingRepository();
$aCountedUsers = [
'console' => $oITopUserRepository->GetConsoleUsers(),
'portal' => $oITopUserRepository->GetPortalUsers(),
'disabled' => $oITopUserRepository->GetDisabledUsers(),
'readonly' => $oITopUserRepository->GetReadOnlyUsers(),
'application' => $oITopUserRepository->GetApplicationUsers(),
];
$aCountedUserFormated = [];
foreach ($aCountedUsers as $sCountedCategory => $aUsers) {
foreach ($aUsers as $oUser) {
$sUserId = (string) $oUser->GetKey();
$aCountedUserFormated[$sUserId][$sCountedCategory] = true;
}
}
$aDuplicates = [];
foreach ($aCountedUserFormated as $sUserId => $aCountedCategory) {
$aCountedCategoryName = array_keys($aCountedCategory);
if (count($aCountedCategoryName) > 1) {
sort($aCountedCategoryName);
$aDuplicates[] = sprintf('User #%s appears in: %s', $sUserId, implode(', ', $aCountedCategoryName));
}
}
$this->assertEmpty(
$aDuplicates,
"Some users are counted in multiple categories:\n- ".implode("\n- ", $aDuplicates)
);
}
public function testAllUsersAreCounted()
{
$oITopUserRepository = new ITopUserCountingRepository();
$aConsoleUsers = $oITopUserRepository->GetConsoleUsers();
$aPortalUsers = $oITopUserRepository->GetPortalUsers();
$aDisabledUsers = $oITopUserRepository->GetDisabledUsers();
$aReadOnlyUsers = $oITopUserRepository->GetReadOnlyUsers();
$aApplicationUsers = $oITopUserRepository->GetApplicationUsers();
$aAllUsersFromMergedCounts = array_merge($aConsoleUsers, $aPortalUsers, $aDisabledUsers, $aReadOnlyUsers, $aApplicationUsers);
$aAllUsersFromOQL = $oITopUserRepository->GetAllUsers();
$this->assertEmpty(array_merge(array_diff($aAllUsersFromMergedCounts, $aAllUsersFromOQL), array_diff($aAllUsersFromOQL, $aAllUsersFromMergedCounts)));
}
public function testAllCountedUsersAreUsersObjects()
{
$oITopUserRepository = new ITopUserCountingRepository();
$aConsoleUsers = $oITopUserRepository->GetConsoleUsers();
$aPortalUsers = $oITopUserRepository->GetPortalUsers();
$aDisabledUsers = $oITopUserRepository->GetDisabledUsers();
$aReadOnlyUsers = $oITopUserRepository->GetReadOnlyUsers();
$aApplicationUsers = $oITopUserRepository->GetApplicationUsers();
$aCountedUsers = array_merge($aConsoleUsers, $aPortalUsers, $aDisabledUsers, $aReadOnlyUsers, $aApplicationUsers);
foreach ($aCountedUsers as $oUser) {
$this->assertInstanceOf(User::class, $oUser);
}
}
}