From dcc7ff09ba4cfba6fe200f4f686cca7a1853390c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 2 Dec 2015 14:04:27 +0100 Subject: [PATCH] Adding unit test for MailNotifications::sendInternalShareMail() --- lib/private/share/mailnotifications.php | 10 +-- lib/public/il10n.php | 2 +- tests/lib/share/MailNotificationsTest.php | 101 +++++++++++++++------- 3 files changed, 76 insertions(+), 37 deletions(-) diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php index c7747fd38c..f45d80b37c 100644 --- a/lib/private/share/mailnotifications.php +++ b/lib/private/share/mailnotifications.php @@ -99,7 +99,7 @@ class MailNotifications { continue; } - $items = \OCP\Share::getItemSharedWithUser($itemType, $itemSource, $recipient); + $items = $this->getItemSharedWithUser($itemSource, $itemType, $recipient); $filename = trim($items[0]['file_target'], '/'); $subject = (string) $this->l->t('%s shared »%s« with you', array($this->senderDisplayName, $filename)); $expiration = null; @@ -130,7 +130,7 @@ class MailNotifications { ); } - $link = \OCP\Util::linkToAbsolute('files', 'index.php', $args); + $link = Util::linkToAbsolute('files', 'index.php', $args); list($htmlBody, $textBody) = $this->createMailBody($filename, $link, $expiration, 'internal'); @@ -142,7 +142,7 @@ class MailNotifications { $message->setHtmlBody($htmlBody); $message->setPlainBody($textBody); $message->setFrom([ - \OCP\Util::getDefaultEmailAddress('sharing-noreply') => + Util::getDefaultEmailAddress('sharing-noreply') => (string)$this->l->t('%s via %s', [ $this->senderDisplayName, $this->defaults->getName() @@ -183,7 +183,7 @@ class MailNotifications { $message->setHtmlBody($htmlBody); $message->setPlainBody($textBody); $message->setFrom([ - \OCP\Util::getDefaultEmailAddress('sharing-noreply') => + Util::getDefaultEmailAddress('sharing-noreply') => (string)$this->l->t('%s via %s', [ $this->senderDisplayName, $this->defaults->getName() @@ -206,7 +206,7 @@ class MailNotifications { * @param string $filename the shared file * @param string $link link to the shared file * @param int $expiration expiration date (timestamp) - * @param bool $prefix prefix of mail template files + * @param string $prefix prefix of mail template files * @return array an array of the html mail body and the plain text mail body */ private function createMailBody($filename, $link, $expiration, $prefix = '') { diff --git a/lib/public/il10n.php b/lib/public/il10n.php index c6e076a21f..67a6c2162d 100644 --- a/lib/public/il10n.php +++ b/lib/public/il10n.php @@ -74,7 +74,7 @@ interface IL10N { /** * Localization * @param string $type Type of localization - * @param array $data parameters for this localization + * @param int|string $data parameters for this localization * @param array $options currently supports following options: * - 'width': handed into \Punic\Calendar::formatDate as second parameter * @return string|false diff --git a/tests/lib/share/MailNotificationsTest.php b/tests/lib/share/MailNotificationsTest.php index e76550b127..2124a8bf13 100644 --- a/tests/lib/share/MailNotificationsTest.php +++ b/tests/lib/share/MailNotificationsTest.php @@ -171,37 +171,7 @@ class MailNotificationsTest extends \Test\TestCase { } public function testSendLinkShareMailException() { - $message = $this->getMockBuilder('\OC\Mail\Message') - ->disableOriginalConstructor()->getMock(); - - $message - ->expects($this->once()) - ->method('setSubject') - ->with('TestUser shared »MyFile« with you'); - $message - ->expects($this->once()) - ->method('setTo') - ->with(['lukas@owncloud.com']); - $message - ->expects($this->once()) - ->method('setHtmlBody'); - $message - ->expects($this->once()) - ->method('setPlainBody'); - $message - ->expects($this->once()) - ->method('setFrom') - ->with([\OCP\Util::getDefaultEmailAddress('sharing-noreply') => 'TestUser via UnitTestCloud']); - - $this->mailer - ->expects($this->once()) - ->method('createMessage') - ->will($this->returnValue($message)); - $this->mailer - ->expects($this->once()) - ->method('send') - ->with($message) - ->will($this->throwException(new Exception('Some Exception Message'))); + $this->setupMailerMock('TestUser shared »MyFile« with you', ['lukas@owncloud.com']); $mailNotifications = new MailNotifications( $this->user, @@ -214,4 +184,73 @@ class MailNotificationsTest extends \Test\TestCase { $this->assertSame(['lukas@owncloud.com'], $mailNotifications->sendLinkShareMail('lukas@owncloud.com', 'MyFile', 'https://owncloud.com/file/?foo=bar', 3600)); } + public function testSendInternalShareMail() { + $this->setupMailerMock('TestUser shared »welcome.txt« with you', ['recipient@owncloud.com' => 'Recipient'], false); + + /** @var MailNotifications | PHPUnit_Framework_MockObject_MockObject $mailNotifications */ + $mailNotifications = $this->getMock('OC\Share\MailNotifications',['getItemSharedWithUser'], [ + $this->user, + $this->l10n, + $this->mailer, + $this->logger, + $this->defaults]); + + $mailNotifications->method('getItemSharedWithUser') + ->withAnyParameters() + ->willReturn([ + ['file_target' => '/welcome.txt'] + ]); + + $recipient = $this->getMockBuilder('\OCP\IUser') + ->disableOriginalConstructor()->getMock(); + $recipient + ->expects($this->once()) + ->method('getEMailAddress') + ->willReturn('recipient@owncloud.com'); + $recipient + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Recipient'); + + $recipientList = [$recipient]; + $result = $mailNotifications->sendInternalShareMail($recipientList, '3', 'file'); + $this->assertSame([], $result); + + } + + protected function setupMailerMock($subject, $to, $exceptionOnSend = true) { + $message = $this->getMockBuilder('\OC\Mail\Message') + ->disableOriginalConstructor()->getMock(); + + $message + ->expects($this->once()) + ->method('setSubject') + ->with($subject); + $message + ->expects($this->once()) + ->method('setTo') + ->with($to); + $message + ->expects($this->once()) + ->method('setHtmlBody'); + $message + ->expects($this->once()) + ->method('setPlainBody'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([\OCP\Util::getDefaultEmailAddress('sharing-noreply') => 'TestUser via UnitTestCloud']); + + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->will($this->returnValue($message)); + if ($exceptionOnSend) { + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message) + ->will($this->throwException(new Exception('Some Exception Message'))); + } + } }