Fix Vultr power controls for stopped instances
This commit is contained in:
parent
94abbe1590
commit
f7150a1d6c
4 changed files with 33 additions and 2 deletions
|
|
@ -31,7 +31,7 @@ private function request(string $method, string $endpoint, array $data = []): ar
|
|||
throw new \Exception('Vultr API error: '.$response->json('error', 'Unknown error'), $response->status());
|
||||
}
|
||||
|
||||
return $response->json();
|
||||
return $response->json() ?? [];
|
||||
}
|
||||
|
||||
private function requestPaginated(string $endpoint, string $resourceKey, array $data = []): array
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ class="mx-1 dark:hover:fill-white fill-black dark:fill-warning">
|
|||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
@if ($server->cloudProviderToken && !$server->isFunctional() && $vultrInstanceStatus === 'stopped')
|
||||
@if ($server->cloudProviderToken && $vultrInstanceStatus === 'stopped')
|
||||
<x-forms.button wire:click.prevent='startVultrInstance' isHighlighted canGate="update"
|
||||
:canResource="$server">
|
||||
Power On
|
||||
|
|
|
|||
|
|
@ -236,6 +236,23 @@ function vultrLifecycleTestPrivateKey(): string
|
|||
]);
|
||||
});
|
||||
|
||||
it('shows Vultr power on button when stopped even if server was previously functional', function () {
|
||||
$this->server->update([
|
||||
'ip' => '1.2.3.5',
|
||||
'vultr_instance_status' => 'stopped',
|
||||
]);
|
||||
$this->server->settings->update([
|
||||
'is_reachable' => true,
|
||||
'is_usable' => true,
|
||||
'force_disabled' => false,
|
||||
]);
|
||||
|
||||
expect($this->server->fresh()->isFunctional())->toBeTrue();
|
||||
|
||||
Livewire::test(Show::class, ['server_uuid' => $this->server->uuid])
|
||||
->assertSee('Power On');
|
||||
});
|
||||
|
||||
it('starts a Vultr instance', function () {
|
||||
Http::fake([
|
||||
'https://api.vultr.com/v2/instances/instance-1/start' => Http::response([], 204),
|
||||
|
|
|
|||
|
|
@ -136,3 +136,17 @@
|
|||
->and($service->findInstanceByIp('2001:db8::1')['id'])->toBe('instance-1')
|
||||
->and($service->findInstanceByIp('1.2.3.4'))->toBeNull();
|
||||
});
|
||||
|
||||
it('handles empty successful responses from Vultr API', function () {
|
||||
Http::fake([
|
||||
'https://api.vultr.com/v2/instances/instance-1/start' => Http::response(null, 204),
|
||||
'https://api.vultr.com/v2/instances/instance-1' => Http::response(null, 204),
|
||||
]);
|
||||
|
||||
$service = new VultrService('fake-token');
|
||||
|
||||
expect($service->startInstance('instance-1'))->toBe([]);
|
||||
$service->deleteInstance('instance-1');
|
||||
|
||||
Http::assertSentCount(2);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue