Add extensive controller and model tests
This commit is contained in:
81
tests/Unit/UserControllerUnitTest.php
Normal file
81
tests/Unit/UserControllerUnitTest.php
Normal file
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\UserController;
|
||||
use App\Models\Role;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
it('returns unauthenticated for me when no user', function (): void {
|
||||
$controller = new UserController();
|
||||
$request = Request::create('/api/user/me', 'GET');
|
||||
$request->setUserResolver(fn () => null);
|
||||
|
||||
$response = $controller->me($request);
|
||||
|
||||
expect($response->getStatusCode())->toBe(401);
|
||||
});
|
||||
|
||||
it('returns unauthenticated for updateMe when no user', function (): void {
|
||||
$controller = new UserController();
|
||||
$request = Request::create('/api/user/me', 'PATCH', [
|
||||
'location' => 'Test',
|
||||
]);
|
||||
$request->setUserResolver(fn () => null);
|
||||
|
||||
$response = $controller->updateMe($request);
|
||||
|
||||
expect($response->getStatusCode())->toBe(401);
|
||||
});
|
||||
|
||||
it('trims blank location to null in updateMe', function (): void {
|
||||
$controller = new UserController();
|
||||
$user = User::factory()->create(['location' => 'Somewhere']);
|
||||
|
||||
$request = Request::create('/api/user/me', 'PATCH', [
|
||||
'location' => ' ',
|
||||
]);
|
||||
$request->setUserResolver(fn () => $user);
|
||||
|
||||
$response = $controller->updateMe($request);
|
||||
|
||||
expect($response->getStatusCode())->toBe(200);
|
||||
$user->refresh();
|
||||
expect($user->location)->toBeNull();
|
||||
});
|
||||
|
||||
it('resolves avatar urls when present', function (): void {
|
||||
Storage::fake('public');
|
||||
|
||||
$controller = new UserController();
|
||||
$user = User::factory()->create([
|
||||
'avatar_path' => 'avatars/test.png',
|
||||
]);
|
||||
|
||||
$response = $controller->profile($user);
|
||||
|
||||
expect($response->getStatusCode())->toBe(200);
|
||||
expect($response->getData(true)['avatar_url'])->not->toBeNull();
|
||||
});
|
||||
|
||||
it('returns null group color when roles relation is null', function (): void {
|
||||
$controller = new UserController();
|
||||
$user = User::factory()->create();
|
||||
$user->setRelation('roles', null);
|
||||
|
||||
$ref = new ReflectionMethod($controller, 'resolveGroupColor');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
$result = $ref->invoke($controller, $user);
|
||||
|
||||
expect($result)->toBeNull();
|
||||
});
|
||||
|
||||
it('normalizes empty and raw role names', function (): void {
|
||||
$controller = new UserController();
|
||||
$ref = new ReflectionMethod($controller, 'normalizeRoleName');
|
||||
$ref->setAccessible(true);
|
||||
|
||||
expect($ref->invoke($controller, ''))->toBe('ROLE_');
|
||||
expect($ref->invoke($controller, 'moderator'))->toBe('ROLE_MODERATOR');
|
||||
});
|
||||
Reference in New Issue
Block a user