get(route('upload.index'))->assertRedirect(route('login')); } public function test_upload_index_can_be_rendered(): void { $user = User::factory()->create(); $this->actingAs($user) ->get(route('upload.index')) ->assertOk(); } public function test_upload_store_requires_authentication(): void { $this->post(route('upload.store'))->assertRedirect(route('login')); } public function test_upload_store_validates_console_id(): void { $user = User::factory()->create(); $this->actingAs($user) ->post(route('upload.store'), []) ->assertSessionHasErrors('console_id'); } public function test_upload_store_validates_rom_files(): void { $user = User::factory()->create(); $console = Console::factory()->create(); $this->actingAs($user) ->post(route('upload.store'), [ 'console_id' => $console->id, ]) ->assertSessionHasErrors('rom_files'); } public function test_upload_store_rejects_invalid_extensions(): void { Storage::fake('local'); $user = User::factory()->create(); $console = Console::factory()->create(['rom_extensions' => ['nes']]); $file = UploadedFile::fake()->create('game.exe', 100, 'application/octet-stream'); $this->actingAs($user) ->post(route('upload.store'), [ 'console_id' => $console->id, 'rom_files' => [$file], ]) ->assertRedirect(); Storage::disk('local')->assertMissing("roms/{$console->slug}/game.nes"); } public function test_upload_store_accepts_valid_rom_files(): void { Storage::fake('local'); $user = User::factory()->create(); $console = Console::factory()->create(['rom_extensions' => ['nes']]); $file = UploadedFile::fake()->createWithContent('game.nes', str_repeat('x', 1024)); $this->actingAs($user) ->post(route('upload.store'), [ 'console_id' => $console->id, 'rom_files' => [$file], ]) ->assertRedirect(); Storage::disk('local')->assertExists("roms/{$console->slug}/game.nes"); } }