2025-12-03 09:29:39 +00:00
|
|
|
<?php
|
|
|
|
|
|
2026-02-25 14:37:04 +00:00
|
|
|
use App\Models\InstanceSettings;
|
2025-12-03 09:29:39 +00:00
|
|
|
use App\Models\Server;
|
|
|
|
|
use App\Models\Team;
|
|
|
|
|
use App\Models\User;
|
|
|
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
|
use Livewire\Livewire;
|
|
|
|
|
|
2026-02-25 14:37:04 +00:00
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
|
|
|
|
|
|
beforeEach(function () {
|
|
|
|
|
InstanceSettings::create(['id' => 0]);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function setupProxyUser(string $role): array
|
2025-12-03 09:29:39 +00:00
|
|
|
{
|
2026-02-25 14:37:04 +00:00
|
|
|
$team = Team::factory()->create();
|
|
|
|
|
$user = User::factory()->create();
|
|
|
|
|
$user->teams()->attach($team, ['role' => $role]);
|
2025-12-03 09:29:39 +00:00
|
|
|
|
2026-02-25 14:37:04 +00:00
|
|
|
$server = Server::factory()->create([
|
|
|
|
|
'team_id' => $team->id,
|
|
|
|
|
'name' => 'Test Server',
|
|
|
|
|
'ip' => '192.168.1.100',
|
|
|
|
|
]);
|
2025-12-03 09:29:39 +00:00
|
|
|
|
2026-02-25 14:37:04 +00:00
|
|
|
return [$user, $team, $server];
|
|
|
|
|
}
|
2025-12-03 09:29:39 +00:00
|
|
|
|
2026-02-25 14:37:04 +00:00
|
|
|
function makeServerProxyRunning(Server $server): void
|
|
|
|
|
{
|
|
|
|
|
$server->settings()->update([
|
|
|
|
|
'is_reachable' => true,
|
|
|
|
|
'is_usable' => true,
|
|
|
|
|
]);
|
|
|
|
|
$server->proxy->status = 'running';
|
|
|
|
|
$server->proxy->type = \App\Enums\ProxyTypes::TRAEFIK->value;
|
|
|
|
|
$server->save();
|
|
|
|
|
$server->refresh();
|
2025-12-03 09:29:39 +00:00
|
|
|
}
|
2026-02-25 14:37:04 +00:00
|
|
|
|
|
|
|
|
test('member cannot see proxy restart and stop buttons', function () {
|
|
|
|
|
[$user, $team, $server] = setupProxyUser('member');
|
|
|
|
|
makeServerProxyRunning($server);
|
|
|
|
|
|
|
|
|
|
// Mock proxySet to bypass SQLite boolean casting issue with force_disabled
|
|
|
|
|
$mock = Mockery::mock($server)->makePartial();
|
|
|
|
|
$mock->shouldReceive('proxySet')->andReturn(true);
|
|
|
|
|
|
|
|
|
|
$this->actingAs($user);
|
|
|
|
|
session(['currentTeam' => $team]);
|
|
|
|
|
|
|
|
|
|
Livewire::test('server.navbar', ['server' => $mock])
|
|
|
|
|
->assertDontSee('Restart Proxy')
|
|
|
|
|
->assertDontSee('Stop Proxy');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('admin can see proxy restart and stop buttons', function () {
|
|
|
|
|
[$user, $team, $server] = setupProxyUser('admin');
|
|
|
|
|
makeServerProxyRunning($server);
|
|
|
|
|
|
|
|
|
|
$mock = Mockery::mock($server)->makePartial();
|
|
|
|
|
$mock->shouldReceive('proxySet')->andReturn(true);
|
|
|
|
|
|
|
|
|
|
$this->actingAs($user);
|
|
|
|
|
session(['currentTeam' => $team]);
|
|
|
|
|
|
|
|
|
|
Livewire::test('server.navbar', ['server' => $mock])
|
|
|
|
|
->assertSee('Restart Proxy')
|
|
|
|
|
->assertSee('Stop Proxy');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('member cannot see start proxy button', function () {
|
|
|
|
|
[$user, $team, $server] = setupProxyUser('member');
|
|
|
|
|
|
|
|
|
|
$server->proxy->status = 'exited';
|
|
|
|
|
$server->proxy->type = \App\Enums\ProxyTypes::TRAEFIK->value;
|
|
|
|
|
$server->save();
|
|
|
|
|
$server->refresh();
|
|
|
|
|
|
|
|
|
|
$mock = Mockery::mock($server)->makePartial();
|
|
|
|
|
$mock->shouldReceive('proxySet')->andReturn(true);
|
|
|
|
|
|
|
|
|
|
$this->actingAs($user);
|
|
|
|
|
session(['currentTeam' => $team]);
|
|
|
|
|
|
|
|
|
|
Livewire::test('server.navbar', ['server' => $mock])
|
|
|
|
|
->assertDontSee('Start Proxy');
|
|
|
|
|
});
|