79 lines
2.7 KiB
PHP
79 lines
2.7 KiB
PHP
<?php
|
|
|
|
use App\Services\System\BackupManagementService;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use League\Flysystem\UnableToCreateDirectory;
|
|
|
|
beforeEach(function () {
|
|
Cache::flush();
|
|
$this->service = app(BackupManagementService::class);
|
|
});
|
|
|
|
test('checkRequirements returns ok shape with binary status', function () {
|
|
$result = $this->service->checkRequirements();
|
|
|
|
expect($result)->toHaveKey('status');
|
|
expect($result['status'])->toBeBool();
|
|
|
|
if (isset($result['binary'])) {
|
|
expect($result['binary'])->toBeIn(['pg_dump', 'mysqldump']);
|
|
}
|
|
});
|
|
|
|
test('testConnection on local disk succeeds', function () {
|
|
// Storage::fake may fail in Docker containers with restricted permissions
|
|
try {
|
|
Storage::fake('local');
|
|
} catch (UnableToCreateDirectory $e) {
|
|
$this->markTestSkipped('Cannot create fake disk in this environment: '.$e->getMessage());
|
|
}
|
|
Config::set('backup.backup.destination.disks', ['local']);
|
|
|
|
$result = $this->service->testConnection();
|
|
|
|
expect($result['success'])->toBeTrue();
|
|
expect($result['message'])->toContain('Successfully');
|
|
});
|
|
|
|
test('parseBytes round-trips through formatBytes for whole units', function () {
|
|
$ref = new ReflectionMethod(BackupManagementService::class, 'parseBytes');
|
|
$ref->setAccessible(true);
|
|
|
|
expect($ref->invoke($this->service, '1 KB'))->toBe(1024.0);
|
|
expect($ref->invoke($this->service, '1 MB'))->toBe(1048576.0);
|
|
expect($ref->invoke($this->service, '2 GB'))->toBe(2.0 * 1024 * 1024 * 1024);
|
|
expect($ref->invoke($this->service, '512 B'))->toBe(512.0);
|
|
});
|
|
|
|
test('parseBytes returns raw float when no unit suffix', function () {
|
|
$ref = new ReflectionMethod(BackupManagementService::class, 'parseBytes');
|
|
$ref->setAccessible(true);
|
|
|
|
expect($ref->invoke($this->service, '4096'))->toBe(4096.0);
|
|
});
|
|
|
|
test('parseBytes ignores unknown units', function () {
|
|
$ref = new ReflectionMethod(BackupManagementService::class, 'parseBytes');
|
|
$ref->setAccessible(true);
|
|
|
|
expect($ref->invoke($this->service, '10 XB'))->toBe(10.0);
|
|
});
|
|
|
|
test('parseBytes handles fractional values', function () {
|
|
$ref = new ReflectionMethod(BackupManagementService::class, 'parseBytes');
|
|
$ref->setAccessible(true);
|
|
|
|
expect($ref->invoke($this->service, '1.5 KB'))->toBe(1536.0);
|
|
});
|
|
|
|
test('formatBytes private helper renders KB/MB/GB units', function () {
|
|
$ref = new ReflectionMethod(BackupManagementService::class, 'formatBytes');
|
|
$ref->setAccessible(true);
|
|
|
|
expect($ref->invoke($this->service, 1024))->toBe('1 KB');
|
|
expect($ref->invoke($this->service, 1024 * 1024))->toBe('1 MB');
|
|
expect($ref->invoke($this->service, 1024 * 1024 * 1024))->toBe('1 GB');
|
|
});
|