/**
  * @param FormEvent $event
  *
  * @throws FormException
  */
 public function initAttachmentEntity(FormEvent $event)
 {
     /** @var AttachmentModel $attachment */
     $attachment = $event->getData();
     // this check is necessary due to inability to capture file input dialog cancel event
     if (!$attachment) {
         return;
     }
     if (!$attachment->getEmailAttachment()) {
         switch ($attachment->getType()) {
             case AttachmentModel::TYPE_ATTACHMENT:
                 $repo = $this->em->getRepository('OroAttachmentBundle:Attachment');
                 $oroAttachment = $repo->find($attachment->getId());
                 $emailAttachment = $this->emailAttachmentTransformer->oroToEntity($oroAttachment);
                 break;
             case AttachmentModel::TYPE_EMAIL_ATTACHMENT:
                 $repo = $this->em->getRepository('OroEmailBundle:EmailAttachment');
                 $emailAttachment = $repo->find($attachment->getId());
                 break;
             case AttachmentModel::TYPE_UPLOADED:
                 $emailAttachment = $this->emailAttachmentTransformer->entityFromUploadedFile($attachment->getFile());
                 break;
             default:
                 throw new FormException(sprintf('Invalid attachment type: %s', $attachment->getType()));
         }
         $attachment->setEmailAttachment($emailAttachment);
     }
     $event->setData($attachment);
 }
 public function testOroToEntity()
 {
     $attachmentOro = $this->getMock('Oro\\Bundle\\AttachmentBundle\\Entity\\Attachment');
     $file = $this->getMock('Oro\\Bundle\\AttachmentBundle\\Entity\\File');
     $file->expects($this->once())->method('getOriginalFilename')->willReturn('filename.txt');
     $file->expects($this->exactly(2))->method('getFilename')->willReturn('filename');
     $file->expects($this->once())->method('getMimeType')->willReturn('text/plain');
     $attachmentOro->expects($this->exactly(5))->method('getFile')->willReturn($file);
     $fileContent = $this->getMockBuilder('Gaufrette\\File')->disableOriginalConstructor()->getMock();
     $fileContent->expects($this->once())->method('getContent')->willReturn('content');
     $this->filesystem->expects($this->once())->method('get')->with('filename')->willReturn($fileContent);
     $attachmentEntity = $this->emailAttachmentTransformer->oroToEntity($attachmentOro);
     $this->assertInstanceOf('Oro\\Bundle\\EmailBundle\\Entity\\EmailAttachment', $attachmentEntity);
     $this->assertEquals($attachmentEntity->getId(), null);
     $this->assertInstanceOf('Oro\\Bundle\\EmailBundle\\Entity\\EmailAttachmentContent', $attachmentEntity->getContent());
     $this->assertEquals(base64_encode('content'), $attachmentEntity->getContent()->getContent());
     $this->assertEquals('base64', $attachmentEntity->getContent()->getContentTransferEncoding());
     $this->assertEquals($attachmentEntity, $attachmentEntity->getContent()->getEmailAttachment());
     $this->assertEquals('text/plain', $attachmentEntity->getContentType());
     $this->assertEquals('filename.txt', $attachmentEntity->getFileName());
 }