1 <?php declare(strict_types=1);
3 namespace Tests\Commands;
7 class BackupCommandTest extends TestCase
9 static string $uniqueUserEmail = '';
11 public static function setUpBeforeClass(): void
13 static::$uniqueUserEmail = bin2hex(random_bytes(10)) . '@example.com';
14 chdir('/var/www/bookstack');
15 // Ensure the database is created and create an admin user we can look out for in the data.
16 exec('php artisan migrate --force');
17 exec('php artisan bookstack:create-admin --email="' . static::$uniqueUserEmail . '" --name="Bazza" --password="hunter200"');
19 public function test_command_does_full_backup_of_cwd_instance_by_default()
21 chdir('/var/www/bookstack');
23 $this->assertCount(0, glob('bookstack-backup-*.zip'));
25 file_put_contents('/var/www/bookstack/themes/test.txt', static::$uniqueUserEmail . '-themes');
26 file_put_contents('/var/www/bookstack/public/uploads/test.txt', static::$uniqueUserEmail . '-public-uploads');
27 file_put_contents('/var/www/bookstack/storage/uploads/test.txt', static::$uniqueUserEmail . '-storage-uploads');
29 $result = $this->runCommand('backup');
31 $result->assertSuccessfulExit();
32 $result->assertStdoutContains("Backup finished.");
34 $this->assertCount(1, glob('bookstack-backup-*.zip'));
35 $zipFile = glob('bookstack-backup-*.zip')[0];
37 $zip = new \ZipArchive();
39 $dbDump = $zip->getFromName('db.sql');
40 $this->assertStringContainsString('APP_KEY=', $zip->getFromName('.env'));
41 $this->assertStringContainsString(static::$uniqueUserEmail, $dbDump);
42 $this->assertStringContainsString('page_revisions', $dbDump);
43 $this->assertStringContainsString(static::$uniqueUserEmail . '-public-uploads', $zip->getFromName('public/uploads/test.txt'));
44 $this->assertStringContainsString(static::$uniqueUserEmail . '-storage-uploads', $zip->getFromName('storage/uploads/test.txt'));
45 $this->assertStringContainsString(static::$uniqueUserEmail . '-themes', $zip->getFromName('themes/test.txt'));