Example #1
0
 /**
  * @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;
 }