]> BookStack Code Mirror - system-cli/blob - tests/Commands/BackupCommandTest.php
Started testing of backup command
[system-cli] / tests / Commands / BackupCommandTest.php
1 <?php declare(strict_types=1);
2
3 namespace Tests\Commands;
4
5 use Tests\TestCase;
6
7 class BackupCommandTest extends TestCase
8 {
9     static string $uniqueUserEmail = '';
10
11     public static function setUpBeforeClass(): void
12     {
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"');
18     }
19     public function test_command_does_full_backup_of_cwd_instance_by_default()
20     {
21         chdir('/var/www/bookstack');
22
23         $this->assertCount(0, glob('bookstack-backup-*.zip'));
24
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');
28
29         $result = $this->runCommand('backup');
30         $result->dumpError();
31         $result->assertSuccessfulExit();
32         $result->assertStdoutContains("Backup finished.");
33
34         $this->assertCount(1, glob('bookstack-backup-*.zip'));
35         $zipFile = glob('bookstack-backup-*.zip')[0];
36
37         $zip = new \ZipArchive();
38         $zip->open($zipFile);
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'));
46     }
47 }