function it_can_be_transformed(EngineInterface $templating, FilterChainInterface $filterChain, MailUserInterface $recipient1, MailUserInterface $recipient2, Attachment $attachment)
 {
     $html = '<html><head></head><body>Test</body></html>';
     $templating->render(Argument::type('string'), Argument::type('array'))->willReturn($html);
     $filterChain->apply(Argument::type('string'), Argument::any())->willReturn($html);
     $recipient1->getFullName()->willReturn('Test recipient 1');
     $recipient1->getEmail()->willReturn('*****@*****.**');
     $recipient2->getFullName()->willReturn('Test recipient 2');
     $recipient2->getEmail()->willReturn('*****@*****.**');
     $attachmentFileName = 'test.txt';
     $attachment->getData()->willReturn('test');
     $attachment->getFilename()->willReturn($attachmentFileName);
     $attachment->getContentType()->willReturn('text');
     $this->addRecipients([$recipient1, $recipient2]);
     $this->addBccRecipients([$recipient1, $recipient2]);
     $this->addAttachment($attachment);
     $message = $this->transform($templating, $filterChain, array(array('view' => 'default', 'contentType' => 'text/html')));
     $message->shouldHaveType('\\Swift_Message');
     $message->getSubject()->shouldBeLike(self::SUBJECT);
     $message->getBody()->shouldBeLike($html);
     $message->getFrom()->shouldBeLike(array(self::SENDER_EMAIL => self::SENDER_NAME));
     $message->getTo()->shouldHaveCount(2);
     $message->getBcc()->shouldHaveCount(2);
     $message->getChildren()->shouldHaveCount(1);
     // 1 attachment
     $attachment = $message->getChildren()[0];
     $attachment->shouldHaveType('Swift_Mime_Attachment');
     $attachment->getFileName()->shouldBeLike($attachmentFileName);
 }
 function let(MailUserInterface $sender, MailUserInterface $recipient)
 {
     $sender->getEmail()->willReturn(self::SENDER_EMAIL);
     $sender->getFullName()->willReturn(self::SENDER_NAME);
     $recipient->getEmail()->willReturn(self::RECIPIENT_EMAIL);
     $recipient->getFullName()->willReturn(self::RECIPIENT_NAME);
     $this->beConstructedWith($sender, $recipient, self::SUBJECT, self::TEMPLATE, self::PRIORITY);
 }
 /**
  * {@inheritdoc}
  */
 public function transform(EngineInterface $templating, FilterChainInterface $filterChain, array $templates)
 {
     $message = $this->createSwiftMessage();
     $message->setTo($this->recipient->getEmail(), $this->recipient->getFullName());
     $body = $templating->render($templates[0]['view'], $this->parameters);
     $body = $filterChain->apply($body, $message);
     $message->setBody($body, $templates[0]['contentType']);
     for ($i = 1; $i < count($templates); $i++) {
         $part = $templating->render($templates[$i]['view'], $this->parameters);
         $part = $filterChain->apply($part, $message);
         $message->addPart($part, $templates[$i]['contentType']);
     }
     return $message;
 }
 /**
  * Get user model
  * MailUserInterface might have additional data which is not needed, so it should be transformed to a minimal model
  * Besides if anything inside user gets changed, the changes will not be visible in the new User object, which is desirable behavior.
  * @param MailUserInterface $user
  * @return User
  */
 protected function getUserModel(MailUserInterface $user)
 {
     return new User($user->getEmail(), $user->getFullName());
 }
 function let(MailUserInterface $user)
 {
     $user->getEmail()->willReturn(UserSpec::EMAIL);
     $user->getFullName()->willReturn(UserSpec::NAME);
     $this->beConstructedWith(self::TEMPLATE_DEFAULT);
 }