container = new ContainerBuilder(); $this->fileManager = new FileManager([ "document.product" => "Thelia\\Model\\ProductDocument", "image.product" => "Thelia\\Model\\ProductImage", "document.category" => "Thelia\\Model\\CategoryDocument", "image.category" => "Thelia\\Model\\CategoryImage", "document.content" => "Thelia\\Model\\ContentDocument", "image.content" => "Thelia\\Model\\ContentImage", "document.folder" => "Thelia\\Model\\FolderDocument", "image.folder" => "Thelia\\Model\\FolderImage", "document.brand" => "Thelia\\Model\\BrandDocument", "image.brand" => "Thelia\\Model\\BrandImage", ]); $this->container->set("thelia.file_manager", $this->fileManager); } public function testGetFileTypeIdentifier() { $obj = $this->fileManager->getModelInstance('document', 'product'); $this->assertInstanceOf("Thelia\\Model\\ProductDocument", $obj); $obj = $this->fileManager->getModelInstance('image', 'product'); $this->assertInstanceOf("Thelia\\Model\\ProductImage", $obj); $obj = $this->fileManager->getModelInstance('document', 'category'); $this->assertInstanceOf("Thelia\\Model\\CategoryDocument", $obj); $obj = $this->fileManager->getModelInstance('image', 'category'); $this->assertInstanceOf("Thelia\\Model\\CategoryImage", $obj); $obj = $this->fileManager->getModelInstance('document', 'content'); $this->assertInstanceOf("Thelia\\Model\\ContentDocument", $obj); $obj = $this->fileManager->getModelInstance('image', 'content'); $this->assertInstanceOf("Thelia\\Model\\ContentImage", $obj); $obj = $this->fileManager->getModelInstance('document', 'folder'); $this->assertInstanceOf("Thelia\\Model\\FolderDocument", $obj); $obj = $this->fileManager->getModelInstance('image', 'folder'); $this->assertInstanceOf("Thelia\\Model\\FolderImage", $obj); $obj = $this->fileManager->getModelInstance('document', 'brand'); $this->assertInstanceOf("Thelia\\Model\\BrandDocument", $obj); $obj = $this->fileManager->getModelInstance('image', 'brand'); $this->assertInstanceOf("Thelia\\Model\\BrandImage", $obj); } /** * @expectedException \Thelia\Exception\FileException */ public function testGetFileTypeIdentifierWrongType() { $obj = $this->fileManager->getModelInstance('docment', 'product'); } /** * @expectedException \Thelia\Exception\FileException */ public function testGetFileTypeIdentifierWrongObject() { $obj = $this->fileManager->getModelInstance('document', 'poney'); } /** * @expectedException \Thelia\Exception\FileException */ public function testGetFileTypeIdentifierWrongTypeAndObject() { $obj = $this->fileManager->getModelInstance('licorne', 'poney'); } public function testAddFileModel() { $this->fileManager->addFileModel("licorne", "poney", "Thelia\\Model\\ProductDocument"); $obj = $this->fileManager->getModelInstance('licorne', 'poney'); $this->assertInstanceOf("Thelia\\Model\\ProductDocument", $obj); } /** * @expectedException \Thelia\Exception\FileException */ public function addFileModelWrongClassTest() { $this->fileManager->addFileModel("licorne", "poney", "Thelia\\Model\\Product"); $obj = $this->fileManager->getModelInstance('licorne', 'poney'); } public function dotTestImageUpload($model, $type) { $old_file = $model->getFile(); $model->setFile(null)->save(); $testFile = __DIR__ .DS. 'fixtures' .DS. 'move-test.gif'; $targetFile = THELIA_LOCAL_DIR . 'media'.DS.'images'.DS.$type.DS."original-".$model->getId().".gif"; @unlink($testFile); @unlink($targetFile); copy(__DIR__ .DS. 'fixtures' .DS. 'test.gif', $testFile); $uploadedFile = new UploadedFile( $testFile, 'original.gif', 'image/gif', filesize($testFile), UPLOAD_ERR_OK, true ); $file = $this->fileManager->copyUploadedFile($model, $uploadedFile); $this->assertEquals("".$file, $targetFile); $this->assertEquals(basename($targetFile), $model->getFile()); $this->assertFileExists($targetFile); @unlink($targetFile); @unlink($testFile); $model->setFile($old_file)->save(); } public function dotTestDocumentUpload($model, $type) { $old_file = $model->getFile(); $model->setFile(null)->save(); $testFile = __DIR__ .DS. 'fixtures' .DS. 'move-test.txt'; $targetFile = THELIA_LOCAL_DIR . 'media'.DS.'documents'.DS.$type.DS."original-".$model->getId().".txt"; @unlink($testFile); @unlink($targetFile); copy(__DIR__ .DS. 'fixtures' .DS. 'test.txt', $testFile); $uploadedFile = new UploadedFile( $testFile, 'original.txt', 'plain/text', filesize($testFile), UPLOAD_ERR_OK, true ); $file = $this->fileManager->copyUploadedFile($model, $uploadedFile); $this->assertEquals("".$file, $targetFile); $this->assertEquals(basename($targetFile), $model->getFile()); $this->assertFileExists($targetFile); @unlink($targetFile); @unlink($testFile); $model->setFile($old_file)->save(); } public function testCopyUploadedFileProductImage() { $this->dotTestImageUpload( ProductImageQuery::create()->findOne(), 'product' ); } public function testCopyUploadedFileCategoryImage() { $this->dotTestImageUpload( CategoryImageQuery::create()->findOne(), 'category' ); } public function testCopyUploadedFileContentImage() { $this->dotTestImageUpload( ContentImageQuery::create()->findOne(), 'content' ); } public function testCopyUploadedFileFolderImage() { $this->dotTestImageUpload( FolderImageQuery::create()->findOne(), 'folder' ); } public function testCopyUploadedFileBrandImage() { $this->dotTestImageUpload( BrandImageQuery::create()->findOne(), 'brand' ); } public function testCopyUploadedFileProductDocument() { $this->dotTestDocumentUpload( ProductDocumentQuery::create()->findOne(), 'product' ); } public function testCopyUploadedFileCategoryDocument() { $this->dotTestDocumentUpload( CategoryDocumentQuery::create()->findOne(), 'category' ); } public function testCopyUploadedFileContentDocument() { $this->dotTestDocumentUpload( ContentDocumentQuery::create()->findOne(), 'content' ); } public function testCopyUploadedFileFolderDocument() { $this->dotTestDocumentUpload( FolderDocumentQuery::create()->findOne(), 'folder' ); } public function testCopyUploadedFileBrandDocument() { $this->dotTestDocumentUpload( BrandDocumentQuery::create()->findOne(), 'brand' ); } public function testSanitizeFileName() { $file = $this->fileManager->sanitizeFileName("C:\\../test/\\..file/%ù^name \t\n\r²&²:.txt"); $this->assertEquals("c..test..filename.txt", $file); $file = $this->fileManager->sanitizeFileName("/etc/passwd"); $this->assertEquals("etcpasswd", $file); } public function doTestDeleteFile($model, $modelParent, $type, $obj) { $targetFile = THELIA_LOCAL_DIR . 'media'.DS.$type.DS.$obj.DS."original-".$model->getId().".txt"; $model->setParentId($modelParent->getId())->setFile(basename($targetFile))->save(); @unlink($targetFile); copy(__DIR__ .DS. 'fixtures' .DS. 'test.txt', $targetFile); $this->assertFileExists($targetFile); $this->fileManager->deleteFile($model); $this->assertFileNotExists($targetFile); } public function testDeleteFileProductDocument() { $this->doTestDeleteFile( new ProductDocument(), ProductQuery::create()->findOne(), 'documents', 'product' ); } public function testDeleteFileProductImage() { $this->doTestDeleteFile( new ProductImage(), ProductQuery::create()->findOne(), 'images', 'product' ); } public function testDeleteFileCategoryDocument() { $this->doTestDeleteFile( new CategoryDocument(), CategoryQuery::create()->findOne(), 'documents', 'category' ); } public function testDeleteFileCategoryImage() { $this->doTestDeleteFile( new CategoryImage(), CategoryQuery::create()->findOne(), 'images', 'category' ); } public function testDeleteFileFolderDocument() { $this->doTestDeleteFile( new FolderDocument(), FolderQuery::create()->findOne(), 'documents', 'folder' ); } public function testDeleteFileFolderImage() { $this->doTestDeleteFile( new FolderImage(), FolderQuery::create()->findOne(), 'images', 'folder' ); } public function testDeleteFileContentDocument() { $this->doTestDeleteFile( new ContentDocument(), ContentQuery::create()->findOne(), 'documents', 'content' ); } public function testDeleteFileContentImage() { $this->doTestDeleteFile( new ContentImage(), ContentQuery::create()->findOne(), 'images', 'content' ); } public function testDeleteFileBrandDocument() { $this->doTestDeleteFile( new BrandDocument(), BrandQuery::create()->findOne(), 'documents', 'brand' ); } public function testDeleteFileBrandImage() { $this->doTestDeleteFile( new BrandImage(), BrandQuery::create()->findOne(), 'images', 'brand' ); } }