This commit introduces functionality for integrating S3 storage into the import process. It allows users to select S3 storage, check for file existence, and download files directly from S3. This enhancement improves the flexibility of the import feature by enabling users to work with files stored in S3, addressing a common use case for teams that utilize cloud storage solutions.
75 lines
2.4 KiB
PHP
75 lines
2.4 KiB
PHP
<?php
|
|
|
|
test('S3 path is cleaned correctly', function () {
|
|
// Test that leading slashes are removed
|
|
$path = '/backups/database.gz';
|
|
$cleanPath = ltrim($path, '/');
|
|
|
|
expect($cleanPath)->toBe('backups/database.gz');
|
|
|
|
// Test path without leading slash remains unchanged
|
|
$path2 = 'backups/database.gz';
|
|
$cleanPath2 = ltrim($path2, '/');
|
|
|
|
expect($cleanPath2)->toBe('backups/database.gz');
|
|
});
|
|
|
|
test('S3 container name is generated correctly', function () {
|
|
$resourceUuid = 'test-database-uuid';
|
|
$containerName = "s3-restore-{$resourceUuid}";
|
|
|
|
expect($containerName)->toBe('s3-restore-test-database-uuid');
|
|
expect($containerName)->toStartWith('s3-restore-');
|
|
});
|
|
|
|
test('S3 download directory is created correctly', function () {
|
|
$resourceUuid = 'test-database-uuid';
|
|
$downloadDir = "/tmp/s3-restore-{$resourceUuid}";
|
|
|
|
expect($downloadDir)->toBe('/tmp/s3-restore-test-database-uuid');
|
|
expect($downloadDir)->toStartWith('/tmp/s3-restore-');
|
|
});
|
|
|
|
test('cancelS3Download cleans up correctly', function () {
|
|
// Test that cleanup directory path is correct
|
|
$resourceUuid = 'test-database-uuid';
|
|
$downloadDir = "/tmp/s3-restore-{$resourceUuid}";
|
|
$containerName = "s3-restore-{$resourceUuid}";
|
|
|
|
expect($downloadDir)->toContain($resourceUuid);
|
|
expect($containerName)->toContain($resourceUuid);
|
|
});
|
|
|
|
test('S3 file path formats are handled correctly', function () {
|
|
$paths = [
|
|
'/backups/db.gz',
|
|
'backups/db.gz',
|
|
'/nested/path/to/backup.sql.gz',
|
|
'backup-2025-01-15.gz',
|
|
];
|
|
|
|
foreach ($paths as $path) {
|
|
$cleanPath = ltrim($path, '/');
|
|
expect($cleanPath)->not->toStartWith('/');
|
|
}
|
|
});
|
|
|
|
test('formatBytes helper formats file sizes correctly', function () {
|
|
// Test various file sizes
|
|
expect(formatBytes(0))->toBe('0 B');
|
|
expect(formatBytes(null))->toBe('0 B');
|
|
expect(formatBytes(1024))->toBe('1 KB');
|
|
expect(formatBytes(1048576))->toBe('1 MB');
|
|
expect(formatBytes(1073741824))->toBe('1 GB');
|
|
expect(formatBytes(1099511627776))->toBe('1 TB');
|
|
|
|
// Test with different sizes
|
|
expect(formatBytes(512))->toBe('512 B');
|
|
expect(formatBytes(2048))->toBe('2 KB');
|
|
expect(formatBytes(5242880))->toBe('5 MB');
|
|
expect(formatBytes(10737418240))->toBe('10 GB');
|
|
|
|
// Test precision
|
|
expect(formatBytes(1536, 2))->toBe('1.5 KB');
|
|
expect(formatBytes(1572864, 1))->toBe('1.5 MB');
|
|
});
|