/** * @covers \Thelia\Action\File::cloneFile * @depends testCloneAccessories * @param ProductCloneEvent $event * @return ProductCloneEvent */ public function testCloneFile(ProductCloneEvent $event) { $action = new File(); $action->cloneFile($event); $originalProductId = $event->getOriginalProduct()->getId(); $cloneProduct = $event->getClonedProduct(); // For each type, check files foreach ($event->getTypes() as $type) { switch ($type) { case 'images': $originalProductFiles = ProductImageQuery::create()->findByProductId($originalProductId); $cloneProductFiles = ProductImageQuery::create()->filterByProductId($cloneProduct->getId())->count(); $this->assertEquals(count($originalProductFiles), $cloneProductFiles, 'There must be the same quantity of images'); break; case 'documents': $originalProductFiles = ProductDocumentQuery::create()->findByProductId($originalProductId); $cloneProductFiles = ProductDocumentQuery::create()->filterByProductId($cloneProduct->getId())->count(); $this->assertEquals(count($originalProductFiles), $cloneProductFiles, 'There must be the same quantity of documents'); break; } // Check each file foreach ($originalProductFiles as $originalProductFile) { $srcPath = $originalProductFile->getUploadDir() . DS . $originalProductFile->getFile(); // Check if original file exists $this->assertFileExists($srcPath, 'Original file doesn\'t exist'); // Get original file mimeType $finfo = new \finfo(); $fileMimeType = $finfo->file($srcPath, FILEINFO_MIME_TYPE); // Check files depending on the type switch ($type) { case 'images': // Get cloned ProductImage $cloneProductFile = ProductImageQuery::create()->filterByProductId($cloneProduct->getId())->filterByVisible($originalProductFile->getVisible())->findOneByPosition($originalProductFile->getPosition()); // Check if the cloned file exists and ProductImage info $this->assertFileExists($cloneProductFile->getUploadDir() . DS . $cloneProductFile->getFile(), 'Cloned image doesn\'t exist'); $this->assertEquals($fileMimeType, $finfo->file($cloneProductFile->getUploadDir() . DS . $cloneProductFile->getFile(), FILEINFO_MIME_TYPE), 'ProductImage\'s mime type must be equal'); $this->assertInstanceOf('Thelia\\Model\\ProductImage', $cloneProductFile, 'Instance of clone product image must be Thelia\\Model\\ProductImage'); $this->assertEquals($cloneProduct->getId(), $cloneProductFile->getProductId(), 'ProductImage\'s productID must be equal'); $this->assertEquals($originalProductFile->getVisible(), $cloneProductFile->getVisible(), 'ProductImage\'s visible must be equal'); $this->assertEquals($originalProductFile->getPosition(), $cloneProductFile->getPosition(), 'ProductImage\'s position must be equal'); break; case 'documents': // Get cloned ProductDocument $cloneProductFile = ProductDocumentQuery::create()->filterByProductId($cloneProduct->getId())->filterByVisible($originalProductFile->getVisible())->findOneByPosition($originalProductFile->getPosition()); // Check if the cloned file exists and ProductDocument info $this->assertFileExists($cloneProductFile->getUploadDir() . DS . $cloneProductFile->getFile(), 'Cloned document doesn\'t exist'); $this->assertEquals($fileMimeType, $finfo->file($cloneProductFile->getUploadDir() . DS . $cloneProductFile->getFile(), FILEINFO_MIME_TYPE), 'ProductDocument\'s mime type must be equal'); $this->assertInstanceOf('Thelia\\Model\\ProductDocument', $cloneProductFile, 'Instance of clone product document must be Thelia\\Model\\ProductDocument'); $this->assertEquals($cloneProduct->getId(), $cloneProductFile->getProductId(), 'ProductDocument\'s productID must be equal'); $this->assertEquals($originalProductFile->getVisible(), $cloneProductFile->getVisible(), 'ProductDocument\'s visible must be equal'); $this->assertEquals($originalProductFile->getPosition(), $cloneProductFile->getPosition(), 'ProductDocument\'s position must be equal'); break; } } } return $event; }