actingAs(User::factory()->create(['must_change_password' => false])); } public function test_help_route_loads_for_an_authenticated_admin(): void { $this->actAsAdmin(); $this->get('/help')->assertOk(); } public function test_default_topic_is_overview(): void { $this->actAsAdmin(); Livewire::test(Index::class) ->assertSet('topic', 'overview') ->assertSee(__('help.topic_overview')); } public function test_unknown_topic_falls_back_to_overview(): void { $this->actAsAdmin(); Livewire::test(Index::class, ['topic' => 'bogus'])->assertSet('topic', 'overview'); } public function test_domain_tls_topic_has_the_reverse_proxy_guide(): void { $this->actAsAdmin(); Livewire::test(Index::class) ->set('topic', 'domain-tls') ->assertSee('X-Forwarded-Proto') ->assertSee('TRUSTED_PROXY_CIDR') ->assertDontSee('Zoraxy'); // generic — no product names } public function test_security_topic_explains_the_2fa_access_paths(): void { $this->actAsAdmin(); Livewire::test(Index::class) ->set('topic', 'security') ->assertSee('Backup-Code') ->assertSee('TOTP'); } #[DataProvider('topicProvider')] public function test_each_topic_renders_its_own_partial(string $topic, string $marker): void { $this->actAsAdmin(); Livewire::test(Index::class)->set('topic', $topic)->assertSee($marker); } public static function topicProvider(): array { return [ ['updates', 'update.sh'], ['servers', 'SSH'], ['sessions', 'Sitzung'], ['email', 'SMTP'], ['audit', 'Audit'], ['recovery', 'clusev:reset-admin'], ]; } }