76 lines
2.7 KiB
PHP
76 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Livewire\Wireguard\Index;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
|
|
class WireguardPageTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
private string $file;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$dir = storage_path('app/restart-signal');
|
|
@mkdir($dir, 0775, true);
|
|
$this->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);
|
|
}
|
|
}
|