From dcc7ff09ba4cfba6fe200f4f686cca7a1853390c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
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 c7747fd38c1..f45d80b37ca 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 c6e076a21f8..67a6c2162de 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 e76550b127d..2124a8bf13b 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')));
+		}
+	}
 }
-- 
GitLab