public function testNotifyWithEmptyAuthor()
 {
     $ticketUniqueId = UniqueId::generate();
     $reporter = new UserAdapter(1, UserAdapter::TYPE_DIAMANTE);
     $assignee = new User();
     $assignee->setId(2);
     $assignee->setEmail('*****@*****.**');
     $author = null;
     $branch = new Branch('KEY', 'Name', 'Description');
     $ticket = new Ticket($ticketUniqueId, new TicketSequenceNumber(1), 'Subject', 'Description', $branch, $reporter, $assignee, new Source(Source::WEB), new Priority(Priority::PRIORITY_MEDIUM), new Status(Status::NEW_ONE));
     $notification = new TicketNotification((string) $ticketUniqueId, $author, 'Header', 'Subject', new \ArrayIterator(array('key' => 'value')), array('file.ext'));
     $message = new \Swift_Message();
     $this->watchersService->expects($this->once())->method('getWatchers')->will($this->returnValue([new WatcherList($ticket, 'diamante_1')]));
     $this->diamanteUserRepository->expects($this->exactly(2))->method('get')->with(1)->will($this->returnValue($this->diamanteUser));
     $this->configManager->expects($this->once())->method('get')->will($this->returnValue('*****@*****.**'));
     $this->nameFormatter->expects($this->once())->method('format')->with($this->diamanteUser)->will($this->returnValue('First Last'));
     $this->mailer->expects($this->once())->method('createMessage')->will($this->returnValue($message));
     $this->ticketRepository->expects($this->once())->method('getByUniqueId')->with($ticketUniqueId)->will($this->returnValue($ticket));
     $this->templateResolver->expects($this->any())->method('resolve')->will($this->returnValueMap(array(array($notification, TemplateResolver::TYPE_TXT, 'txt.template.html'), array($notification, TemplateResolver::TYPE_HTML, 'html.template.html'))));
     $optionsConstraint = $this->logicalAnd($this->arrayHasKey('changes'), $this->arrayHasKey('attachments'), $this->arrayHasKey('user'), $this->arrayHasKey('header'), $this->contains($notification->getChangeList()), $this->contains($notification->getAttachments()), $this->contains('First Last'), $this->contains($notification->getHeaderText()));
     $this->twig->expects($this->at(0))->method('render')->with('txt.template.html', $optionsConstraint)->will($this->returnValue('Rendered TXT template'));
     $this->twig->expects($this->at(1))->method('render')->with('html.template.html', $optionsConstraint)->will($this->returnValue('Rendered HTML template'));
     $this->mailer->expects($this->once())->method('send')->with($this->logicalAnd($this->isInstanceOf('\\Swift_Message'), $this->callback(function (\Swift_Message $other) use($notification) {
         $to = $other->getTo();
         return false !== strpos($other->getSubject(), $notification->getSubject()) && false !== strpos($other->getSubject(), 'KEY-1') && false !== strpos($other->getBody(), 'Rendered TXT template') && array_key_exists('*****@*****.**', $to) && $other->getHeaders()->has('References') && false !== strpos($other->getHeaders()->get('References'), '*****@*****.**') && false !== strpos($other->getHeaders()->get('References'), '*****@*****.**');
     })));
     $this->messageReferenceRepository->expects($this->once())->method('findAllByTicket')->with($ticket)->will($this->returnValue(array(new MessageReference('*****@*****.**', $ticket), new MessageReference('*****@*****.**', $ticket))));
     $this->messageReferenceRepository->expects($this->once())->method('store')->with($this->logicalAnd($this->isInstanceOf('\\Diamante\\DeskBundle\\Model\\Ticket\\EmailProcessing\\MessageReference')));
     $notifier = new EmailNotifier($this->container, $this->twig, $this->mailer, $this->templateResolver, $this->ticketRepository, $this->messageReferenceRepository, $this->userService, $this->nameFormatter, $this->diamanteUserRepository, $this->configManager, $this->oroUserManager, $this->watchersService, $this->senderHost);
     $notifier->notify($notification);
 }
 /**
  * @param Notification $notification
  *
  * @return \Swift_Message
  */
 private function message(Notification $notification)
 {
     /** @var \Swift_Message $message */
     $message = $this->mailer->createMessage();
     $message->setSubject(ucfirst($notification->getHeaderText()));
     $senderName = $this->configManager->get('oro_notification.email_notification_sender_name');
     $message->setFrom($this->senderEmail, $senderName);
     $mail = $notification->getAuthor()->getEmail();
     $message->setTo($mail);
     $options = array('user' => $this->getFormattedUserName($notification), 'header' => $notification->getHeaderText());
     $txtTemplate = $this->templateResolver->resolve($notification, TemplateResolver::TYPE_TXT);
     $htmlTemplate = $this->templateResolver->resolve($notification, TemplateResolver::TYPE_HTML);
     $message->setBody($this->twig->render($txtTemplate, $options), 'text/plain');
     $message->addPart($this->twig->render($htmlTemplate, $options), 'text/html');
     return $message;
 }
 /**
  * @param Notification $notification
  * @param Ticket       $ticket
  * @param bool         $isOroUser
  * @param string       $recipientEmail
  * @param              $changeList
  *
  * @return \Swift_Message
  */
 private function message(Notification $notification, Ticket $ticket, $isOroUser, $recipientEmail, $changeList)
 {
     $senderEmail = $this->configManager->get(self::EMAIL_NOTIFIER_CONFIG_PATH);
     $userFormattedName = $this->getFormattedUserName($notification, $ticket);
     /** @var \Swift_Message $message */
     $message = $this->mailer->createMessage();
     $message->setSubject($this->decorateMessageSubject($notification->getSubject(), $ticket));
     $message->setFrom($senderEmail, $userFormattedName);
     $message->setTo($recipientEmail);
     $message->setReplyTo($senderEmail);
     $headers = $message->getHeaders();
     $headers->addTextHeader('In-Reply-To', $this->inReplyToHeader($notification));
     $headers->addIdHeader('References', $this->referencesHeader($ticket));
     $options = array('changes' => $changeList, 'attachments' => $notification->getAttachments(), 'user' => $userFormattedName, 'header' => $notification->getHeaderText(), 'delimiter' => MessageReferenceServiceImpl::DELIMITER_LINE, 'isOroUser' => $isOroUser, 'ticketKey' => $ticket->getKey());
     $txtTemplate = $this->templateResolver->resolve($notification, TemplateResolver::TYPE_TXT);
     $htmlTemplate = $this->templateResolver->resolve($notification, TemplateResolver::TYPE_HTML);
     $message->setBody($this->twig->render($txtTemplate, $options), 'text/plain');
     $message->addPart($this->twig->render($htmlTemplate, $options), 'text/html');
     return $message;
 }
 public function testNotify()
 {
     $author = new ApiUser('*****@*****.**', 'password');
     $notification = new UserNotification($author, 'Header');
     $format = '%prefix% %first_name% %middle_name% %last_name% %suffix%';
     $message = new \Swift_Message();
     $this->mailer->expects($this->once())->method('createMessage')->will($this->returnValue($message));
     $this->configManager->expects($this->once())->method('get')->will($this->returnValue('Mike The Bot'));
     $this->nameFormatter->expects($this->any())->method('format')->with($this->diamanteUser)->will($this->returnValue('First Last'));
     $this->userService->expects($this->once())->method('verifyDiamanteUserExists')->with($this->equalTo($author->getEmail()))->will($this->returnValue(1));
     $this->userService->expects($this->once())->method('getByUser')->with($this->equalTo(new UserAdapter(1, UserAdapter::TYPE_DIAMANTE)))->will($this->returnValue($this->diamanteUser));
     $this->nameFormatter->expects($this->once())->method('getNameFormat')->will($this->returnValue($format));
     $this->templateResolver->expects($this->any())->method('resolve')->will($this->returnValueMap(array(array($notification, TemplateResolver::TYPE_TXT, 'txt.template.html'), array($notification, TemplateResolver::TYPE_HTML, 'html.template.html'))));
     $optionsConstraint = $this->logicalAnd($this->arrayHasKey('user'), $this->arrayHasKey('header'), $this->contains('First  Last'), $this->contains($notification->getHeaderText()));
     $this->twig->expects($this->at(0))->method('render')->with('txt.template.html', $optionsConstraint)->will($this->returnValue('Rendered TXT template'));
     $this->twig->expects($this->at(1))->method('render')->with('html.template.html', $optionsConstraint)->will($this->returnValue('Rendered HTML template'));
     $this->mailer->expects($this->once())->method('send')->with($this->logicalAnd($this->isInstanceOf('\\Swift_Message'), $this->callback(function (\Swift_Message $other) use($notification) {
         $to = $other->getTo();
         return false !== strpos($other->getBody(), 'Rendered TXT template') && array_key_exists('*****@*****.**', $to);
     })));
     $notifier = new EmailNotifier($this->twig, $this->mailer, $this->templateResolver, $this->userService, $this->nameFormatter, $this->configManager, $this->senderEmail);
     $notifier->notify($notification);
 }