]> BookStack Code Mirror - system-cli/blobdiff - tests/Commands/BackupCommandTest.php
Improved symlink support for backup/restore
[system-cli] / tests / Commands / BackupCommandTest.php
index 58b0446ee7ecc0e8325034f7a81f395eef918687..db5f116cf5f723c97fb0b05a4bafd26f880c813a 100644 (file)
@@ -20,7 +20,7 @@ class BackupCommandTest extends TestCase
     public function test_command_does_full_backup_of_cwd_instance_by_default()
     {
         chdir('/var/www/bookstack');
-        $this->assertCount(0, glob('bookstack-backup-*.zip'));
+        $this->assertCount(0, glob('storage/backups/bookstack-backup-*.zip'));
 
         file_put_contents('/var/www/bookstack/themes/test.txt', static::$uniqueUserEmail . '-themes');
         file_put_contents('/var/www/bookstack/public/uploads/test.txt', static::$uniqueUserEmail . '-public-uploads');
@@ -30,8 +30,8 @@ class BackupCommandTest extends TestCase
         $result->assertSuccessfulExit();
         $result->assertStdoutContains("Backup finished.");
 
-        $this->assertCount(1, glob('bookstack-backup-*.zip'));
-        $zipFile = glob('bookstack-backup-*.zip')[0];
+        $this->assertCount(1, glob('storage/backups/bookstack-backup-*.zip'));
+        $zipFile = glob('storage/backups/bookstack-backup-*.zip')[0];
 
         $zip = new \ZipArchive();
         $zip->open($zipFile);
@@ -58,7 +58,7 @@ class BackupCommandTest extends TestCase
         ]);
         $result->assertSuccessfulExit();
 
-        $zipFile = glob('bookstack-backup-*.zip')[0];
+        $zipFile = glob('storage/backups/bookstack-backup-*.zip')[0];
 
         $zip = new \ZipArchive();
         $zip->open($zipFile);
@@ -80,7 +80,8 @@ class BackupCommandTest extends TestCase
             '--no-database' => true,
             '--no-uploads' => true,
             '--no-themes' => true,
-            '--app-directory' => '/var/www/bookstack'
+            '--app-directory' => '/var/www/bookstack',
+            'backup-path' => './'
         ]);
         $result->assertSuccessfulExit();
 
@@ -118,4 +119,42 @@ class BackupCommandTest extends TestCase
         unlink($zipFile);
     }
 
+    public function test_command_resolves_nested_symlinks()
+    {
+        $symDirs = ['storage/uploads/files', 'storage/uploads/images'];
+        exec('cp -r /var/www/bookstack /var/www/bookstack-symlink-backup');
+        mkdir('/symlinks');
+        foreach ($symDirs as $dir) {
+            $targetFile = str_replace('/', '-', $dir);
+            $code = 0;
+            $output = null;
+            exec("mkdir -p /var/www/bookstack-symlink-backup/{$dir}", $output, $code);
+            exec("mv /var/www/bookstack-symlink-backup/{$dir} /symlinks/{$targetFile}", $output, $code);
+            exec("ln -s /symlinks/{$targetFile} /var/www/bookstack-symlink-backup/{$dir}", $output, $code);
+            file_put_contents("/symlinks/{$targetFile}/test.txt", "Hello from $dir");
+            if ($code !== 0) {
+                $this->fail("Error when setting up symlinks");
+            }
+        }
+
+        chdir('/var/www/bookstack-symlink-backup');
+        $this->assertCount(0, glob('storage/backups/bookstack-backup-*.zip'));
+        $result = $this->runCommand('backup');
+        $result->assertSuccessfulExit();
+        $this->assertCount(1, glob('storage/backups/bookstack-backup-*.zip'));
+        $zipFile = glob('storage/backups/bookstack-backup-*.zip')[0];
+
+        $zip = new \ZipArchive();
+        $zip->open($zipFile);
+        foreach ($symDirs as $dir) {
+            $fileData = $zip->getFromName("{$dir}/test.txt");
+            $this->assertNotFalse($fileData);
+            $this->assertStringContainsString("Hello from {$dir}", $fileData);
+        }
+        $zip->close();
+
+        exec('rm -rf /symlinks');
+        exec('rm -rf /var/www/bookstack-symlink-backup');
+    }
+
 }
\ No newline at end of file