postJson('/api/user/avatar', [ 'file' => UploadedFile::fake()->image('avatar.jpg', 100, 100), ]); $response->assertStatus(401); }); it('uploads avatars for authenticated users', function (): void { Storage::fake('public'); $user = User::factory()->create(); Sanctum::actingAs($user); $response = $this->postJson('/api/user/avatar', [ 'file' => UploadedFile::fake()->image('avatar.jpg', 100, 100), ]); $response->assertOk(); $path = $response->json('path'); Storage::disk('public')->assertExists($path); }); it('replaces existing avatar when uploading a new one', function (): void { Storage::fake('public'); $user = User::factory()->create([ 'avatar_path' => 'avatars/old.png', ]); Storage::disk('public')->put('avatars/old.png', 'old'); Sanctum::actingAs($user); $response = $this->postJson('/api/user/avatar', [ 'file' => UploadedFile::fake()->image('avatar.jpg', 100, 100), ]); $response->assertOk(); Storage::disk('public')->assertMissing('avatars/old.png'); }); it('forbids logo uploads for non-admins', function (): void { Storage::fake('public'); $user = User::factory()->create(); Sanctum::actingAs($user); $response = $this->postJson('/api/uploads/logo', [ 'file' => UploadedFile::fake()->image('logo.png', 200, 200), ]); $response->assertStatus(403); }); it('forbids favicon uploads for non-admins', function (): void { Storage::fake('public'); $user = User::factory()->create(); Sanctum::actingAs($user); $response = $this->postJson('/api/uploads/favicon', [ 'file' => UploadedFile::fake()->image('favicon.png', 32, 32), ]); $response->assertStatus(403); }); it('uploads logos and favicons as admin', function (): void { Storage::fake('public'); $admin = User::factory()->create(); $role = Role::firstOrCreate(['name' => 'ROLE_ADMIN'], ['color' => '#111111']); $admin->roles()->attach($role); Sanctum::actingAs($admin); $logo = $this->postJson('/api/uploads/logo', [ 'file' => UploadedFile::fake()->image('logo.png', 200, 200), ]); $logo->assertOk(); Storage::disk('public')->assertExists($logo->json('path')); $favicon = $this->postJson('/api/uploads/favicon', [ 'file' => UploadedFile::fake()->image('favicon.png', 32, 32), ]); $favicon->assertOk(); Storage::disk('public')->assertExists($favicon->json('path')); });