2024-11-18 23:53:21 +08:00
< ? php
namespace Tests\Exports ;
use BookStack\Entities\Models\Book ;
use BookStack\Entities\Models\Chapter ;
use BookStack\Entities\Models\Page ;
use BookStack\Exports\ZipExports\ZipExportReader ;
use BookStack\Exports\ZipExports\ZipExportValidator ;
use BookStack\Exports\ZipExports\ZipImportRunner ;
use BookStack\Uploads\Image ;
use Tests\TestCase ;
2024-11-19 01:42:49 +08:00
class ZipExportValidatorTest extends TestCase
2024-11-18 23:53:21 +08:00
{
protected array $filesToRemove = [];
protected function tearDown () : void
{
foreach ( $this -> filesToRemove as $file ) {
unlink ( $file );
}
parent :: tearDown ();
}
protected function getValidatorForData ( array $zipData , array $files = []) : ZipExportValidator
{
$upload = ZipTestHelper :: zipUploadFromData ( $zipData , $files );
$path = $upload -> getRealPath ();
$this -> filesToRemove [] = $path ;
$reader = new ZipExportReader ( $path );
return new ZipExportValidator ( $reader );
}
public function test_ids_have_to_be_unique ()
{
$validator = $this -> getValidatorForData ([
'book' => [
'id' => 4 ,
'name' => 'My book' ,
'pages' => [
[
'id' => 4 ,
'name' => 'My page' ,
'markdown' => 'hello' ,
'attachments' => [
[ 'id' => 4 , 'name' => 'Attachment A' , 'link' => 'https://example.com' ],
[ 'id' => 4 , 'name' => 'Attachment B' , 'link' => 'https://example.com' ]
],
'images' => [
[ 'id' => 4 , 'name' => 'Image A' , 'type' => 'gallery' , 'file' => 'cat' ],
[ 'id' => 4 , 'name' => 'Image b' , 'type' => 'gallery' , 'file' => 'cat' ],
],
],
[ 'id' => 4 , 'name' => 'My page' , 'markdown' => 'hello' ],
],
'chapters' => [
[ 'id' => 4 , 'name' => 'Chapter 1' ],
[ 'id' => 4 , 'name' => 'Chapter 2' ]
]
]
], [ 'cat' => $this -> files -> testFilePath ( 'test-image.png' )]);
$results = $validator -> validate ();
$this -> assertCount ( 4 , $results );
$expectedMessage = 'The id must be unique for the object type within the ZIP.' ;
$this -> assertEquals ( $expectedMessage , $results [ 'book.pages.0.attachments.1.id' ]);
$this -> assertEquals ( $expectedMessage , $results [ 'book.pages.0.images.1.id' ]);
$this -> assertEquals ( $expectedMessage , $results [ 'book.pages.1.id' ]);
$this -> assertEquals ( $expectedMessage , $results [ 'book.chapters.1.id' ]);
}
2024-11-19 01:42:49 +08:00
public function test_image_files_need_to_be_a_valid_detected_image_file ()
{
$validator = $this -> getValidatorForData ([
'page' => [
'id' => 4 ,
'name' => 'My page' ,
'markdown' => 'hello' ,
'images' => [
[ 'id' => 4 , 'name' => 'Image A' , 'type' => 'gallery' , 'file' => 'cat' ],
],
]
], [ 'cat' => $this -> files -> testFilePath ( 'test-file.txt' )]);
$results = $validator -> validate ();
$this -> assertCount ( 1 , $results );
$this -> assertEquals ( 'The file needs to reference a file of type image/png,image/jpeg,image/gif,image/webp, found text/plain.' , $results [ 'page.images.0.file' ]);
}
2024-11-18 23:53:21 +08:00
}