60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace Tests\Exports;
 | 
						|
 | 
						|
use BookStack\Exports\Import;
 | 
						|
use Illuminate\Http\UploadedFile;
 | 
						|
use ZipArchive;
 | 
						|
 | 
						|
class ZipTestHelper
 | 
						|
{
 | 
						|
    public static function importFromData(array $importData, array $zipData, array $files = []): Import
 | 
						|
    {
 | 
						|
        if (isset($zipData['book'])) {
 | 
						|
            $importData['type'] = 'book';
 | 
						|
        } else if (isset($zipData['chapter'])) {
 | 
						|
            $importData['type'] = 'chapter';
 | 
						|
        } else if (isset($zipData['page'])) {
 | 
						|
            $importData['type'] = 'page';
 | 
						|
        }
 | 
						|
 | 
						|
        $import = Import::factory()->create($importData);
 | 
						|
        $zip = static::zipUploadFromData($zipData, $files);
 | 
						|
        $targetPath = storage_path($import->path);
 | 
						|
        $targetDir = dirname($targetPath);
 | 
						|
 | 
						|
        if (!file_exists($targetDir)) {
 | 
						|
            mkdir($targetDir);
 | 
						|
        }
 | 
						|
 | 
						|
        rename($zip->getRealPath(), $targetPath);
 | 
						|
 | 
						|
        return $import;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function deleteZipForImport(Import $import): void
 | 
						|
    {
 | 
						|
        $path = storage_path($import->path);
 | 
						|
        if (file_exists($path)) {
 | 
						|
            unlink($path);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public static function zipUploadFromData(array $data, array $files = []): UploadedFile
 | 
						|
    {
 | 
						|
        $zipFile = tempnam(sys_get_temp_dir(), 'bstest-');
 | 
						|
 | 
						|
        $zip = new ZipArchive();
 | 
						|
        $zip->open($zipFile, ZipArchive::CREATE);
 | 
						|
        $zip->addFromString('data.json', json_encode($data));
 | 
						|
 | 
						|
        foreach ($files as $name => $file) {
 | 
						|
            $zip->addFile($file, "files/$name");
 | 
						|
        }
 | 
						|
 | 
						|
        $zip->close();
 | 
						|
 | 
						|
        return new UploadedFile($zipFile, 'upload.zip', 'application/zip', null, true);
 | 
						|
    }
 | 
						|
}
 |