feat: add support for selecting additional SSH keys from Hetzner in server creation form

This commit is contained in:
Andras Bacsai committed 2025-10-10 12:17:05 +02:00
1 parent ee211526ea
commit ac3af8a882
7 files changed
+413 -34

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
<?php
use App\View\Components\Forms\Datalist;
it('renders with default properties', function () {
$component = new Datalist;
expect($component->required)->toBeFalse()
->and($component->disabled)->toBeFalse()
->and($component->readonly)->toBeFalse()
->and($component->multiple)->toBeFalse()
->and($component->instantSave)->toBeFalse()
->and($component->defaultClass)->toBe('input');
});
it('uses provided id', function () {
$component = new Datalist(id: 'test-datalist');
expect($component->id)->toBe('test-datalist');
});
it('accepts multiple selection mode', function () {
$component = new Datalist(multiple: true);
expect($component->multiple)->toBeTrue();
});
it('accepts instantSave parameter', function () {
$component = new Datalist(instantSave: 'customSave');
expect($component->instantSave)->toBe('customSave');
});
it('accepts placeholder', function () {
$component = new Datalist(placeholder: 'Select an option...');
expect($component->placeholder)->toBe('Select an option...');
});
it('accepts autofocus', function () {
$component = new Datalist(autofocus: true);
expect($component->autofocus)->toBeTrue();
});
it('accepts disabled state', function () {
$component = new Datalist(disabled: true);
expect($component->disabled)->toBeTrue();
});
it('accepts readonly state', function () {
$component = new Datalist(readonly: true);
expect($component->readonly)->toBeTrue();
});
it('accepts authorization properties', function () {
$component = new Datalist(
canGate: 'update',
canResource: 'resource',
autoDisable: false
);
expect($component->canGate)->toBe('update')
->and($component->canResource)->toBe('resource')
->and($component->autoDisable)->toBeFalse();
});
+53
View File
@@ -0,0 +1,53 @@
<?php
it('merges Coolify key with selected Hetzner keys', function () {
$coolifyKeyId = 123;
$selectedHetznerKeys = [456, 789];
// Simulate the merge logic from createHetznerServer
$sshKeys = array_merge(
[$coolifyKeyId],
$selectedHetznerKeys
);
expect($sshKeys)->toBe([123, 456, 789])
->and(count($sshKeys))->toBe(3);
});
it('removes duplicate SSH key IDs', function () {
$coolifyKeyId = 123;
$selectedHetznerKeys = [123, 456, 789]; // User also selected Coolify key
// Simulate the merge and deduplication logic
$sshKeys = array_merge(
[$coolifyKeyId],
$selectedHetznerKeys
);
$sshKeys = array_unique($sshKeys);
$sshKeys = array_values($sshKeys);
expect($sshKeys)->toBe([123, 456, 789])
->and(count($sshKeys))->toBe(3);
});
it('works with no selected Hetzner keys', function () {
$coolifyKeyId = 123;
$selectedHetznerKeys = [];
// Simulate the merge logic
$sshKeys = array_merge(
[$coolifyKeyId],
$selectedHetznerKeys
);
expect($sshKeys)->toBe([123])
->and(count($sshKeys))->toBe(1);
});
it('validates SSH key IDs are integers', function () {
$selectedHetznerKeys = [456, 789, 1011];
foreach ($selectedHetznerKeys as $keyId) {
expect($keyId)->toBeInt();
}
});