first commit
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use app\adminapi\logic\auth\AdminLogic;
|
||||
use app\common\cache\AdminAuthCache;
|
||||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
function adminMultiRoleExpect(bool $condition, string $message): void
|
||||
{
|
||||
if (!$condition) {
|
||||
throw new RuntimeException($message);
|
||||
}
|
||||
}
|
||||
|
||||
$adminReflection = new ReflectionClass(AdminLogic::class);
|
||||
$normalizeRoleIds = $adminReflection->getMethod('normalizeRoleIds');
|
||||
$roleIdsChanged = $adminReflection->getMethod('roleIdsChanged');
|
||||
$normalizeRoleIds->setAccessible(true);
|
||||
$roleIdsChanged->setAccessible(true);
|
||||
|
||||
adminMultiRoleExpect(
|
||||
$normalizeRoleIds->invoke(null, ['7', 2, 7, 0, -1]) === [2, 7],
|
||||
'Role ids must be normalized, deduplicated and sorted'
|
||||
);
|
||||
adminMultiRoleExpect(
|
||||
$roleIdsChanged->invoke(null, [2], [2, 7]) === true,
|
||||
'Adding a role must invalidate the existing token'
|
||||
);
|
||||
adminMultiRoleExpect(
|
||||
$roleIdsChanged->invoke(null, [2, 7], [2]) === true,
|
||||
'Removing a role must invalidate the existing token'
|
||||
);
|
||||
adminMultiRoleExpect(
|
||||
$roleIdsChanged->invoke(null, [2, 7], [7, 2]) === false,
|
||||
'Changing only role order must not invalidate the token'
|
||||
);
|
||||
|
||||
$cacheMethod = new ReflectionMethod(AdminAuthCache::class, 'clearAuthCache');
|
||||
$sourceLines = file($cacheMethod->getFileName());
|
||||
$methodSource = implode('', array_slice(
|
||||
$sourceLines,
|
||||
$cacheMethod->getStartLine() - 1,
|
||||
$cacheMethod->getEndLine() - $cacheMethod->getStartLine() + 1
|
||||
));
|
||||
adminMultiRoleExpect(
|
||||
str_contains($methodSource, 'delete($this->cacheUrlKey)'),
|
||||
'Single-admin permission cache must delete its concrete cache key'
|
||||
);
|
||||
adminMultiRoleExpect(
|
||||
!str_contains($methodSource, 'tag($this->cacheUrlKey)'),
|
||||
'Single-admin permission cache must not clear a tag that was never assigned'
|
||||
);
|
||||
|
||||
echo "AdminMultiRoleRegressionTest passed\n";
|
||||
Reference in New Issue
Block a user