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');
$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);
]);
$result->assertSuccessfulExit();
- $zipFile = glob('bookstack-backup-*.zip')[0];
+ $zipFile = glob('storage/backups/bookstack-backup-*.zip')[0];
$zip = new \ZipArchive();
$zip->open($zipFile);
'--no-database' => true,
'--no-uploads' => true,
'--no-themes' => true,
- '--app-directory' => '/var/www/bookstack'
+ '--app-directory' => '/var/www/bookstack',
+ 'backup-path' => './'
]);
$result->assertSuccessfulExit();
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