fix unittests issues
API CI/CD / Validate (composer + pint) (push) Successful in 3m6s
API CI/CD / Test (PHPUnit) (push) Failing after 4m53s
API CI/CD / Build frontend assets (push) Successful in 1m2s
API CI/CD / Security audit (push) Failing after 59s
API CI/CD / Deploy to shared hosting (PHP) (push) Has been skipped

This commit is contained in:
root
2026-07-07 20:56:32 -04:00
parent f83f21936f
commit e13df69885
118 changed files with 22138 additions and 1328 deletions
@@ -245,8 +245,23 @@ class RolePermissionController extends BaseApiController
public function updateRolePermissions(RolePermissionUpdateRequest $request, int $roleId): JsonResponse
{
$payload = $request->validated();
$permissions = $payload['permissions'] ?? null;
if ($permissions === null && isset($payload['permission_ids'])) {
$permissions = [];
foreach ((array) $payload['permission_ids'] as $permissionId) {
$permissions[(int) $permissionId] = [
'create' => true,
'read' => true,
'update' => true,
'delete' => true,
'manage' => true,
];
}
}
try {
$this->permissionService->saveRolePermissions($roleId, $request->validated()['permissions'] ?? []);
$this->permissionService->saveRolePermissions($roleId, $permissions ?? []);
} catch (\Throwable $e) {
Log::error('Role permissions update failed: '.$e->getMessage());
@@ -91,7 +91,7 @@ class PreferencesController extends BaseApiController
return $this->success([
'preferences' => new PreferencesResource($payload['preferences']),
], 'Preferences saved.', $saved->wasRecentlyCreated ? Response::HTTP_CREATED : Response::HTTP_OK);
], 'Preferences saved.');
}
public function updateForUser(PreferencesUpsertRequest $request, int $userId): JsonResponse
@@ -113,18 +113,18 @@ class PreferencesController extends BaseApiController
return $this->success([
'preferences' => new PreferencesResource($payload['preferences']),
], 'Preferences saved.', $saved->wasRecentlyCreated ? Response::HTTP_CREATED : Response::HTTP_OK);
], 'Preferences saved.');
}
public function destroy(int $userId): JsonResponse
{
$row = Preferences::query()->where('user_id', $userId)->first();
$this->authorize('delete', $row ?? new Preferences(['user_id' => $userId]));
if (! $row) {
return $this->error('Preferences not found.', Response::HTTP_NOT_FOUND);
}
$this->authorize('delete', $row);
try {
$deleted = $this->commandService->delete($row);
} catch (\Throwable $e) {
@@ -79,7 +79,15 @@ class NavBuilderController extends BaseApiController
$this->authorize('manage', NavItem::class);
try {
$this->builderService->reorder($request->validated()['orders']);
$payload = $request->validated();
$orders = $payload['orders'] ?? [];
if ($orders === [] && isset($payload['items'])) {
foreach ((array) $payload['items'] as $item) {
$orders[(int) $item['id']] = (int) $item['sort_order'];
}
}
$this->builderService->reorder($orders);
} catch (\Throwable $e) {
Log::error('Nav reorder failed: '.$e->getMessage());
@@ -33,13 +33,14 @@ class EnsureParentProgressAccess
->map(fn ($name) => strtolower((string) $name))
->toArray();
if (in_array('parent', $roles, true)) {
$userType = strtolower(trim((string) ($user->user_type ?? '')));
if (in_array('parent', $roles, true) || $userType === 'primary') {
$request->attributes->set('primary_parent_id', (int) $user->id);
return $next($request);
}
$userType = strtolower(trim((string) ($user->user_type ?? '')));
if (in_array($userType, ['secondary', 'tertiary'], true)) {
/** @var PrimaryParentUserResolver $resolver */
$resolver = app(PrimaryParentUserResolver::class);
@@ -14,13 +14,15 @@ class RolePermissionUpdateRequest extends ApiFormRequest
public function rules(): array
{
return [
'permissions' => ['required', 'array'],
'permissions' => ['required_without:permission_ids', 'array'],
'permissions.*' => ['array'],
'permissions.*.create' => ['nullable', 'boolean'],
'permissions.*.read' => ['nullable', 'boolean'],
'permissions.*.update' => ['nullable', 'boolean'],
'permissions.*.delete' => ['nullable', 'boolean'],
'permissions.*.manage' => ['nullable', 'boolean'],
'permission_ids' => ['required_without:permissions', 'array'],
'permission_ids.*' => ['integer', 'exists:permissions,id'],
];
}
}
@@ -14,8 +14,11 @@ class NavItemReorderRequest extends ApiFormRequest
public function rules(): array
{
return [
'orders' => ['required', 'array'],
'orders' => ['required_without:items', 'array'],
'orders.*' => ['integer'],
'items' => ['required_without:orders', 'array'],
'items.*.id' => ['required_with:items', 'integer', 'min:1'],
'items.*.sort_order' => ['required_with:items', 'integer'],
];
}
}