Files
minicrm/tests/Feature/ExportBackupTest.php

56 lines
1.8 KiB
PHP

<?php
use App\Models\User;
use App\Models\Product;
use Illuminate\Support\Facades\File;
uses(\Illuminate\Foundation\Testing\RefreshDatabase::class);
test('export backup command exports database tables to json and writes manifest', function () {
// Create some data
User::factory()->count(3)->create();
Product::create(['name' => 'Sunrise Suite A1', 'status' => 'active']);
Product::create(['name' => 'Sunset Suite A2', 'status' => 'active']);
$backupPath = base_path('tests/Feature/backups_test');
// Clean backup directory if it exists
if (File::isDirectory($backupPath)) {
File::deleteDirectory($backupPath);
}
// Run backup command
$this->artisan('app:export-backup', [
'--path' => $backupPath,
'--tables' => 'users,products',
'--pretty' => true
])
->assertExitCode(0);
// Verify backup folder created
$directories = File::directories($backupPath);
expect($directories)->toHaveCount(1);
$backupDir = $directories[0];
// Verify files created
expect(File::exists("{$backupDir}/manifest.json"))->toBeTrue();
expect(File::exists("{$backupDir}/users.json"))->toBeTrue();
expect(File::exists("{$backupDir}/products.json"))->toBeTrue();
// Verify manifest contents
$manifest = json_decode(File::get("{$backupDir}/manifest.json"), true);
expect($manifest['tables']['users'])->toBe(3);
expect($manifest['tables']['products'])->toBe(2);
expect($manifest['total_rows'])->toBe(5);
// Verify products contents
$productsJson = json_decode(File::get("{$backupDir}/products.json"), true);
expect($productsJson)->toHaveCount(2);
expect($productsJson[0]['name'])->toBe('Sunrise Suite A1');
expect($productsJson[1]['name'])->toBe('Sunset Suite A2');
// Clean up backup directory
File::deleteDirectory($backupPath);
});