file = $dir.'/wg-status.json'; @unlink($this->file); $this->actingAs(User::factory()->create(['must_change_password' => false])); } protected function tearDown(): void { @unlink($this->file); parent::tearDown(); } public function test_renders_unconfigured_state(): void { Livewire::test(Index::class) ->assertOk() ->assertViewHas('status', fn ($s) => $s['configured'] === false) ->assertSee(__('wireguard.not_configured_title')); } public function test_renders_peers_when_configured(): void { file_put_contents($this->file, json_encode([ 'at' => time(), 'configured' => true, 'gate' => ['marker' => true, 'chain' => true], 'wg_quick' => 'active', 'server' => ['subnet' => '10.99.0.0/24', 'server_ip' => '10.99.0.1', 'port' => 51820, 'endpoint' => '1.2.3.4:51820', 'pubkey' => 'srvpub'], 'peers' => [['name' => 'laptop', 'pubkey' => 'p1', 'endpoint' => '5.6.7.8:41820', 'latest_handshake' => time(), 'rx' => 100, 'tx' => 200]], ])); Livewire::test(Index::class) ->assertOk() ->assertViewHas('status', fn ($s) => $s['configured'] === true && count($s['peers']) === 1) ->assertSee('laptop') ->assertSee('10.99.0.0/24'); } public function test_window_selector_switches_and_passes_traffic(): void { \App\Models\WgTrafficSample::create(['peer_pubkey' => 'p1', 'peer_name' => 'a', 'rx' => 0, 'tx' => 0, 'sampled_at' => now()->subMinutes(10)]); \App\Models\WgTrafficSample::create(['peer_pubkey' => 'p1', 'peer_name' => 'a', 'rx' => 500, 'tx' => 100, 'sampled_at' => now()->subMinutes(1)]); \Livewire\Livewire::test(\App\Livewire\Wireguard\Index::class) ->assertViewHas('traffic', fn ($t) => $t['total_down'] === 500) ->call('setWindow', 86400) ->assertSet('window', 86400) ->assertViewHas('traffic', fn ($t) => $t['window'] === 86400); } public function test_window_clamps_to_allowed_values(): void { \Livewire\Livewire::test(\App\Livewire\Wireguard\Index::class) ->call('setWindow', 999) ->assertSet('window', 3600); } }