aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Ehrke <developer@georgehrke.com>2019-08-12 13:20:03 +0200
committerRoeland Jago Douma <roeland@famdouma.nl>2019-08-15 20:05:01 +0200
commit4d28a4544e1f85046e139146a1be9933e9ff6ae3 (patch)
tree6f00324fc14b419c0c6e9d8eb7c41c63ce9c9a6e
parent2d6473e79b7d9e2e7435020084061d79d707067c (diff)
downloadnextcloud-server-4d28a4544e1f85046e139146a1be9933e9ff6ae3.tar.gz
nextcloud-server-4d28a4544e1f85046e139146a1be9933e9ff6ae3.zip
Final fixes
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
m---------3rdparty0
-rw-r--r--apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php2
-rw-r--r--apps/dav/lib/CalDAV/Reminder/Backend.php2
-rw-r--r--apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php39
-rw-r--r--apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php77
-rw-r--r--apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php14
-rw-r--r--apps/dav/lib/CalDAV/Reminder/NotificationProviderManager.php36
-rw-r--r--apps/dav/lib/CalDAV/Reminder/Notifier.php12
-rw-r--r--apps/dav/lib/CalDAV/Reminder/ReminderService.php38
-rw-r--r--apps/dav/lib/Migration/Version1004Date20170825134824.php3
-rw-r--r--apps/dav/tests/unit/BackgroundJob/EventReminderJobTest.php35
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php596
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AbstractNotificationProviderTest.php (renamed from apps/dav/tests/unit/CalDAV/Reminder/AbstractNotificationProviderTest.php)50
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AudioProviderTest.php33
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/EmailProviderTest.php676
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php167
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotificationProviderManagerTest.php56
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php64
-rw-r--r--apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php627
19 files changed, 1659 insertions, 868 deletions
diff --git a/3rdparty b/3rdparty
-Subproject ef289bc27eae0cdfc3f74f419ace8dda8dd84ef
+Subproject 49ccfbb28661b9ef7743c1725cd257125921592
diff --git a/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php b/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php
index cf55f42440b..15c52cd8525 100644
--- a/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php
+++ b/apps/dav/lib/BackgroundJob/BuildReminderIndexBackgroundJob.php
@@ -23,7 +23,7 @@ declare(strict_types=1);
*/
namespace OCA\DAV\BackgroundJob;
-use OC\BackgroundJob\QueuedJob;
+use OCP\BackgroundJob\QueuedJob;
use OCA\DAV\CalDAV\Reminder\ReminderService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\IJobList;
diff --git a/apps/dav/lib/CalDAV/Reminder/Backend.php b/apps/dav/lib/CalDAV/Reminder/Backend.php
index be65c35da0f..b3cc013fb3e 100644
--- a/apps/dav/lib/CalDAV/Reminder/Backend.php
+++ b/apps/dav/lib/CalDAV/Reminder/Backend.php
@@ -63,7 +63,7 @@ class Backend {
$query = $this->db->getQueryBuilder();
$query->select(['cr.*', 'co.calendardata', 'c.displayname', 'c.principaluri'])
->from('calendar_reminders', 'cr')
-// ->where($query->expr()->lte('cr.notification_date', $query->createNamedParameter($this->timeFactory->getTime())))
+ ->where($query->expr()->lte('cr.notification_date', $query->createNamedParameter($this->timeFactory->getTime())))
->leftJoin('cr', 'calendarobjects', 'co', $query->expr()->eq('cr.object_id', 'co.id'))
->leftJoin('cr', 'calendars', 'c', $query->expr()->eq('cr.calendar_id', 'c.id'));
$stmt = $query->execute();
diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php
index 6b2364c8022..6e3a8eaddef 100644
--- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php
+++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/AbstractProvider.php
@@ -25,8 +25,6 @@ declare(strict_types=1);
*/
namespace OCA\DAV\CalDAV\Reminder\NotificationProvider;
-use \DateTime;
-use \DateTimeImmutable;
use OCA\DAV\CalDAV\Reminder\INotificationProvider;
use OCP\IConfig;
use OCP\IL10N;
@@ -36,7 +34,6 @@ use OCP\L10N\IFactory as L10NFactory;
use OCP\IUser;
use Sabre\VObject\Component\VEvent;
use Sabre\VObject\DateTimeParser;
-use Sabre\VObject\Parameter;
use Sabre\VObject\Property;
/**
@@ -49,22 +46,22 @@ abstract class AbstractProvider implements INotificationProvider {
/** @var string */
public const NOTIFICATION_TYPE = '';
- /** @var ILogger */
- protected $logger;
+ /** @var ILogger */
+ protected $logger;
- /** @var L10NFactory */
- private $l10nFactory;
+ /** @var L10NFactory */
+ private $l10nFactory;
- /** @var IL10N[] */
+ /** @var IL10N[] */
private $l10ns;
/** @var string */
private $fallbackLanguage;
- /** @var IURLGenerator */
- protected $urlGenerator;
+ /** @var IURLGenerator */
+ protected $urlGenerator;
- /** @var IConfig */
+ /** @var IConfig */
protected $config;
/**
@@ -79,9 +76,9 @@ abstract class AbstractProvider implements INotificationProvider {
IConfig $config) {
$this->logger = $logger;
$this->l10nFactory = $l10nFactory;
- $this->urlGenerator = $urlGenerator;
+ $this->urlGenerator = $urlGenerator;
$this->config = $config;
- }
+ }
/**
* Send notification
@@ -91,22 +88,22 @@ abstract class AbstractProvider implements INotificationProvider {
* @param IUser[] $users
* @return void
*/
- abstract public function send(VEvent $vevent,
+ abstract public function send(VEvent $vevent,
string $calendarDisplayName,
array $users=[]): void;
/**
* @return string
*/
- protected function getFallbackLanguage():string {
- if ($this->fallbackLanguage) {
- return $this->fallbackLanguage;
+ protected function getFallbackLanguage():string {
+ if ($this->fallbackLanguage) {
+ return $this->fallbackLanguage;
}
- $fallbackLanguage = $this->l10nFactory->findLanguage();
- $this->fallbackLanguage = $fallbackLanguage;
+ $fallbackLanguage = $this->l10nFactory->findLanguage();
+ $this->fallbackLanguage = $fallbackLanguage;
- return $fallbackLanguage;
+ return $fallbackLanguage;
}
/**
@@ -114,7 +111,7 @@ abstract class AbstractProvider implements INotificationProvider {
* @return bool
*/
protected function hasL10NForLang(string $lang):bool {
- return $this->l10nFactory->languageExists('dav', $lang);
+ return $this->l10nFactory->languageExists('dav', $lang);
}
/**
diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php
index cf79fad7ab8..f5932a87b3e 100644
--- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php
+++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/EmailProvider.php
@@ -25,8 +25,7 @@ declare(strict_types=1);
*/
namespace OCA\DAV\CalDAV\Reminder\NotificationProvider;
-use DateTime;
-use DateTimeImmutable;
+use \DateTime;
use OCP\IConfig;
use OCP\IL10N;
use OCP\ILogger;
@@ -97,36 +96,35 @@ class EmailProvider extends AbstractProvider {
$organizer = $this->getOrganizerEMailAndNameFromEvent($vevent);
foreach($sortedByLanguage as $lang => $emailAddresses) {
- if ($this->hasL10NForLang($lang)) {
+ if (!$this->hasL10NForLang($lang)) {
$lang = $fallbackLanguage;
}
$l10n = $this->getL10NForLang($lang);
$fromEMail = \OCP\Util::getDefaultEmailAddress('reminders-noreply');
- $message = $this->mailer->createMessage();
- $message->setFrom([$fromEMail]);
- if ($organizer) {
- $message->setReplyTo($organizer);
- }
- $message->setTo([])
- ->setBcc($emailAddresses);
-
$template = $this->mailer->createEMailTemplate('dav.calendarReminder');
$template->addHeader();
-
$this->addSubjectAndHeading($template, $l10n, $vevent);
$this->addBulletList($template, $l10n, $calendarDisplayName, $vevent);
-
$template->addFooter();
- $message->useTemplate($template);
- try {
- $failed = $this->mailer->send($message);
- if ($failed) {
- $this->logger->error('Unable to deliver message to {failed}', ['app' => 'dav', 'failed' => implode(', ', $failed)]);
+ foreach ($emailAddresses as $emailAddress) {
+ $message = $this->mailer->createMessage();
+ $message->setFrom([$fromEMail]);
+ if ($organizer) {
+ $message->setReplyTo($organizer);
+ }
+ $message->setTo([$emailAddress]);
+ $message->useTemplate($template);
+
+ try {
+ $failed = $this->mailer->send($message);
+ if ($failed) {
+ $this->logger->error('Unable to deliver message to {failed}', ['app' => 'dav', 'failed' => implode(', ', $failed)]);
+ }
+ } catch (\Exception $ex) {
+ $this->logger->logException($ex, ['app' => 'dav']);
}
- } catch (\Exception $ex) {
- $this->logger->logException($ex, ['app' => 'dav']);
}
}
}
@@ -165,9 +163,9 @@ class EmailProvider extends AbstractProvider {
$template->addBodyListItem((string) $vevent->DESCRIPTION, $l10n->t('Description:'),
$this->getAbsoluteImagePath('actions/more.svg'));
}
- }
+ }
- /**
+ /**
* @param string $path
* @return string
*/
@@ -202,35 +200,6 @@ class EmailProvider extends AbstractProvider {
}
/**
- * @param array $sortedByLanguage
- * @param IUser[] $users
- * @param string $defaultLanguage
- */
- private function sortUsersByLanguage(array &$sortedByLanguage,
- array $users,
- string $defaultLanguage):void {
- /**
- * @var array $sortedByLanguage
- * [
- * 'de' => ['a@b.com', 'c@d.com'],
- * ...
- * ]
- */
- foreach($users as $user) {
- /** @var IUser $user */
- $emailAddress = $user->getEMailAddress();
- $lang = $this->config->getUserValue($user->getUID(),
- 'core', 'lang', $defaultLanguage);
-
- if (!isset($sortedByLanguage[$lang])) {
- $sortedByLanguage[$lang] = [];
- }
-
- $sortedByLanguage[$lang][] = $emailAddress;
- }
- }
-
- /**
* @param array $emails
* @param string $defaultLanguage
* @return array
@@ -386,7 +355,7 @@ class EmailProvider extends AbstractProvider {
}
}
- return array_unique($emailAddresses);
+ return $emailAddresses;
}
/**
@@ -415,7 +384,9 @@ class EmailProvider extends AbstractProvider {
$diff = $dtstartDt->diff($dtendDt);
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
$dtstartDt = new \DateTime($dtstartDt->format(\DateTime::ATOM));
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
$dtendDt = new \DateTime($dtendDt->format(\DateTime::ATOM));
if ($isAllDay) {
@@ -432,7 +403,9 @@ class EmailProvider extends AbstractProvider {
$startTimezone = $endTimezone = null;
if (!$vevent->DTSTART->isFloating()) {
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
$startTimezone = $vevent->DTSTART->getDateTime()->getTimezone()->getName();
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
$endTimezone = $this->getDTEndFromEvent($vevent)->getDateTime()->getTimezone()->getName();
}
diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
index 2e580fd78a3..3872b67e596 100644
--- a/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
+++ b/apps/dav/lib/CalDAV/Reminder/NotificationProvider/PushProvider.php
@@ -47,7 +47,7 @@ class PushProvider extends AbstractProvider {
/** @var string */
public const NOTIFICATION_TYPE = 'DISPLAY';
- /** @var IManager */
+ /** @var IManager */
private $manager;
/** @var ITimeFactory */
@@ -70,7 +70,7 @@ class PushProvider extends AbstractProvider {
parent::__construct($logger, $l10nFactory, $urlGenerator, $config);
$this->manager = $manager;
$this->timeFactory = $timeFactory;
- }
+ }
/**
* Send push notification to all users.
@@ -80,13 +80,13 @@ class PushProvider extends AbstractProvider {
* @param IUser[] $users
* @throws \Exception
*/
- public function send(VEvent $vevent,
+ public function send(VEvent $vevent,
string $calendarDisplayName=null,
array $users=[]):void {
$eventDetails = $this->extractEventDetails($vevent);
$eventDetails['calendar_displayname'] = $calendarDisplayName;
- foreach($users as $user) {
+ foreach($users as $user) {
/** @var INotification $notification */
$notification = $this->manager->createNotification();
$notification->setApp(Application::APP_ID)
@@ -101,7 +101,7 @@ class PushProvider extends AbstractProvider {
$this->manager->notify($notification);
}
- }
+ }
/**
* @var VEvent $vevent
@@ -124,11 +124,15 @@ class PushProvider extends AbstractProvider {
? ((string) $vevent->LOCATION)
: null,
'all_day' => $start instanceof Property\ICalendar\Date,
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
'start_atom' => $start->getDateTime()->format(\DateTime::ATOM),
'start_is_floating' => $start->isFloating(),
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
'start_timezone' => $start->getDateTime()->getTimezone()->getName(),
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
'end_atom' => $end->getDateTime()->format(\DateTime::ATOM),
'end_is_floating' => $end->isFloating(),
+ /** @phan-suppress-next-line PhanUndeclaredClassMethod */
'end_timezone' => $end->getDateTime()->getTimezone()->getName(),
];
}
diff --git a/apps/dav/lib/CalDAV/Reminder/NotificationProviderManager.php b/apps/dav/lib/CalDAV/Reminder/NotificationProviderManager.php
index 3d54970562d..c9bcf2dd064 100644
--- a/apps/dav/lib/CalDAV/Reminder/NotificationProviderManager.php
+++ b/apps/dav/lib/CalDAV/Reminder/NotificationProviderManager.php
@@ -31,8 +31,8 @@ namespace OCA\DAV\CalDAV\Reminder;
*/
class NotificationProviderManager {
- /** @var INotificationProvider[] */
- private $providers = [];
+ /** @var INotificationProvider[] */
+ private $providers = [];
/**
* Checks whether a provider for a given ACTION exists
@@ -45,23 +45,23 @@ class NotificationProviderManager {
&& isset($this->providers[$type]));
}
- /**
+ /**
* Get provider for a given ACTION
*
- * @param string $type
- * @return INotificationProvider
- * @throws NotificationProvider\ProviderNotAvailableException
- * @throws NotificationTypeDoesNotExistException
- */
- public function getProvider(string $type):INotificationProvider {
- if (in_array($type, ReminderService::REMINDER_TYPES, true)) {
- if (isset($this->providers[$type])) {
- return $this->providers[$type];
- }
- throw new NotificationProvider\ProviderNotAvailableException($type);
- }
- throw new NotificationTypeDoesNotExistException($type);
- }
+ * @param string $type
+ * @return INotificationProvider
+ * @throws NotificationProvider\ProviderNotAvailableException
+ * @throws NotificationTypeDoesNotExistException
+ */
+ public function getProvider(string $type):INotificationProvider {
+ if (in_array($type, ReminderService::REMINDER_TYPES, true)) {
+ if (isset($this->providers[$type])) {
+ return $this->providers[$type];
+ }
+ throw new NotificationProvider\ProviderNotAvailableException($type);
+ }
+ throw new NotificationTypeDoesNotExistException($type);
+ }
/**
* Registers a new provider
@@ -69,7 +69,7 @@ class NotificationProviderManager {
* @param string $providerClassName
* @throws \OCP\AppFramework\QueryException
*/
- public function registerProvider(string $providerClassName):void {
+ public function registerProvider(string $providerClassName):void {
$provider = \OC::$server->query($providerClassName);
if (!$provider instanceof INotificationProvider) {
diff --git a/apps/dav/lib/CalDAV/Reminder/Notifier.php b/apps/dav/lib/CalDAV/Reminder/Notifier.php
index 4bad9841787..2c5f05f62ab 100644
--- a/apps/dav/lib/CalDAV/Reminder/Notifier.php
+++ b/apps/dav/lib/CalDAV/Reminder/Notifier.php
@@ -25,7 +25,7 @@ declare(strict_types=1);
namespace OCA\DAV\CalDAV\Reminder;
-use DateTime;
+use \DateTime;
use OCA\DAV\AppInfo\Application;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IL10N;
@@ -85,10 +85,6 @@ class Notifier implements INotifier {
* @since 17.0.0
*/
public function getName():string {
- if ($this->l10n) {
- return $this->l10n->t('Calendar');
- }
-
return $this->l10nFactory->get('dav')->t('Calendar');
}
@@ -143,7 +139,7 @@ class Notifier implements INotifier {
private function prepareNotificationSubject(INotification $notification): void {
$parameters = $notification->getSubjectParameters();
- $startTime = \DateTime::createFromFormat(\DateTimeInterface::ATOM, $parameters['start_atom']);
+ $startTime = \DateTime::createFromFormat(\DateTime::ATOM, $parameters['start_atom']);
$now = $this->timeFactory->getDateTime();
$title = $this->getTitleFromParameters($parameters);
@@ -220,8 +216,8 @@ class Notifier implements INotifier {
* @throws \Exception
*/
private function generateDateString(array $parameters):string {
- $startDateTime = DateTime::createFromFormat(DATE_ATOM, $parameters['start_atom']);
- $endDateTime = DateTime::createFromFormat(DATE_ATOM, $parameters['end_atom']);
+ $startDateTime = DateTime::createFromFormat(\DateTime::ATOM, $parameters['start_atom']);
+ $endDateTime = DateTime::createFromFormat(\DateTime::ATOM, $parameters['end_atom']);
$isAllDay = $parameters['all_day'];
$diff = $startDateTime->diff($endDateTime);
diff --git a/apps/dav/lib/CalDAV/Reminder/ReminderService.php b/apps/dav/lib/CalDAV/Reminder/ReminderService.php
index ad428eef745..f36ddd157cc 100644
--- a/apps/dav/lib/CalDAV/Reminder/ReminderService.php
+++ b/apps/dav/lib/CalDAV/Reminder/ReminderService.php
@@ -24,7 +24,7 @@ declare(strict_types=1);
*/
namespace OCA\DAV\CalDAV\Reminder;
-use DateTimeImmutable;
+use \DateTimeImmutable;
use OCA\DAV\CalDAV\CalDavBackend;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IGroup;
@@ -40,11 +40,11 @@ use Sabre\VObject\Recur\NoInstancesException;
class ReminderService {
- /** @var Backend */
- private $backend;
+ /** @var Backend */
+ private $backend;
- /** @var NotificationProviderManager */
- private $notificationProviderManager;
+ /** @var NotificationProviderManager */
+ private $notificationProviderManager;
/** @var IUserManager */
private $userManager;
@@ -83,19 +83,19 @@ class ReminderService {
* @param CalDavBackend $caldavBackend
* @param ITimeFactory $timeFactory
*/
- public function __construct(Backend $backend,
- NotificationProviderManager $notificationProviderManager,
+ public function __construct(Backend $backend,
+ NotificationProviderManager $notificationProviderManager,
IUserManager $userManager,
IGroupManager $groupManager,
CalDavBackend $caldavBackend,
ITimeFactory $timeFactory) {
- $this->backend = $backend;
- $this->notificationProviderManager = $notificationProviderManager;
+ $this->backend = $backend;
+ $this->notificationProviderManager = $notificationProviderManager;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->caldavBackend = $caldavBackend;
$this->timeFactory = $timeFactory;
- }
+ }
/**
* Process reminders to activate
@@ -103,12 +103,12 @@ class ReminderService {
* @throws NotificationProvider\ProviderNotAvailableException
* @throws NotificationTypeDoesNotExistException
*/
- public function processReminders():void {
- $reminders = $this->backend->getRemindersToProcess();
+ public function processReminders():void {
+ $reminders = $this->backend->getRemindersToProcess();
- foreach($reminders as $reminder) {
- $vcalendar = $this->parseCalendarData($reminder['calendardata']);
- if (!$vcalendar) {
+ foreach($reminders as $reminder) {
+ $vcalendar = $this->parseCalendarData($reminder['calendardata']);
+ if (!$vcalendar) {
$this->backend->removeReminder($reminder['id']);
continue;
}
@@ -140,7 +140,7 @@ class ReminderService {
$this->deleteOrProcessNext($reminder, $vevent);
}
- }
+ }
/**
* @param string $action
@@ -175,7 +175,7 @@ class ReminderService {
/**
* @param array $objectData
*/
- private function onCalendarObjectCreate(array $objectData):void {
+ private function onCalendarObjectCreate(array $objectData):void {
/** @var VObject\Component\VCalendar $vcalendar */
$vcalendar = $this->parseCalendarData($objectData['calendardata']);
if (!$vcalendar) {
@@ -343,7 +343,7 @@ class ReminderService {
'is_repeat_based' => false,
];
- $repeat = $valarm->REPEAT ? (int) $valarm->REPEAT : 0;
+ $repeat = isset($valarm->REPEAT) ? (int) $valarm->REPEAT->getValue() : 0;
for($i = 0; $i < $repeat; $i++) {
if ($valarm->DURATION === null) {
continue;
@@ -671,7 +671,7 @@ class ReminderService {
return null;
}
- if (strcasecmp($principalUri, 'principals/users/') !== 0) {
+ if (stripos($principalUri, 'principals/users/') !== 0) {
return null;
}
diff --git a/apps/dav/lib/Migration/Version1004Date20170825134824.php b/apps/dav/lib/Migration/Version1004Date20170825134824.php
index f3165a0fe3d..26855c2e23e 100644
--- a/apps/dav/lib/Migration/Version1004Date20170825134824.php
+++ b/apps/dav/lib/Migration/Version1004Date20170825134824.php
@@ -324,7 +324,8 @@ class Version1004Date20170825134824 extends SimpleMigrationStep {
'length' => 1,
]);
$table->addColumn('stripattachments', 'smallint', [
-
+ 'notnull' => false,
+ 'length' => 1,
]);
$table->addColumn('lastmodified', 'integer', [
'notnull' => false,
diff --git a/apps/dav/tests/unit/BackgroundJob/EventReminderJobTest.php b/apps/dav/tests/unit/BackgroundJob/EventReminderJobTest.php
index 960dd481dd2..c3b4b7e54c2 100644
--- a/apps/dav/tests/unit/BackgroundJob/EventReminderJobTest.php
+++ b/apps/dav/tests/unit/BackgroundJob/EventReminderJobTest.php
@@ -51,17 +51,42 @@ class EventReminderJobTest extends TestCase {
public function data(): array
{
- return [[true], [false]];
+ return [
+ [true, true, true],
+ [true, false, false],
+ [false, true, false],
+ [false, false, false],
+ ];
}
/**
* @dataProvider data
+ *
* @param bool $sendEventReminders
+ * @param bool $sendEventRemindersMode
+ * @param bool $expectCall
*/
- public function testRun(bool $sendEventReminders): void
- {
- $this->config->expects($this->once())->method('getAppValue')->with('dav', 'sendEventReminders', 'yes')->willReturn($sendEventReminders ? 'yes' : 'no');
- $this->reminderService->expects($this->exactly($sendEventReminders ? 1 : 0))->method('processReminders');
+ public function testRun(bool $sendEventReminders, bool $sendEventRemindersMode, bool $expectCall): void {
+ $this->config->expects($this->at(0))
+ ->method('getAppValue')
+ ->with('dav', 'sendEventReminders', 'yes')
+ ->willReturn($sendEventReminders ? 'yes' : 'no');
+
+ if ($sendEventReminders) {
+ $this->config->expects($this->at(1))
+ ->method('getAppValue')
+ ->with('dav', 'sendEventRemindersMode', 'backgroundjob')
+ ->willReturn($sendEventRemindersMode ? 'backgroundjob' : 'cron');
+
+ }
+
+ if ($expectCall) {
+ $this->reminderService->expects($this->once())
+ ->method('processReminders');
+ } else {
+ $this->reminderService->expects($this->never())
+ ->method('processReminders');
+ }
$this->backgroundJob->run([]);
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php b/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php
index 1cd979dc5d9..71453ac73a3 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/BackendTest.php
@@ -1,8 +1,11 @@
<?php
+declare(strict_types=1);
/**
- * @copyright Copyright (c) 2018, Thomas Citharel
+ * @copyright Copyright (c) 2019, Thomas Citharel
+ * @copyright Copyright (c) 2019, Georg Ehrke
*
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -21,7 +24,6 @@
*/
namespace OCA\DAV\Tests\unit\CalDAV\Reminder;
-use OCP\IDBConnection;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\AppFramework\Utility\ITimeFactory;
use OCA\DAV\CalDAV\Reminder\Backend as ReminderBackend;
@@ -29,285 +31,367 @@ use Test\TestCase;
class BackendTest extends TestCase {
- /**
- * Reminder Backend
- *
- * @var ReminderBackend|\PHPUnit\Framework\MockObject\MockObject
- */
- private $reminderBackend;
-
- /** @var IDBConnection|\PHPUnit\Framework\MockObject\MockObject */
- private $dbConnection;
+ /**
+ * Reminder Backend
+ *
+ * @var ReminderBackend|\PHPUnit\Framework\MockObject\MockObject
+ */
+ private $reminderBackend;
/** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
- private $timeFactory;
+ private $timeFactory;
- public function setUp() {
+ public function setUp() {
parent::setUp();
- $this->dbConnection = $this->createMock(IDBConnection::class);
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->delete('calendar_reminders')->execute();
+ $query->delete('calendarobjects')->execute();
+ $query->delete('calendars')->execute();
+
$this->timeFactory = $this->createMock(ITimeFactory::class);
- $this->reminderBackend = new ReminderBackend($this->dbConnection, $this->timeFactory);
- }
-
- public function testCleanRemindersForEvent(): void
- {
- /** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
- $queryBuilder = $this->createMock(IQueryBuilder::class);
- $stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
- $expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
-
- $this->dbConnection->expects($this->once())
- ->method('getQueryBuilder')
- ->with()
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->method('expr')
- ->will($this->returnValue($expr));
-
- $expr->method('eq')
- ->will($this->returnValueMap([
- ['calendarid', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'],
- ['objecturi', 'createNamedParameter-2', null, 'WHERE_CLAUSE_2'],
- ]));
- $queryBuilder->method('createNamedParameter')
- ->will($this->returnValueMap([
- [1, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
- ['object.ics', \PDO::PARAM_STR, null, 'createNamedParameter-2'],
- ]));
-
- $queryBuilder->expects($this->at(0))
- ->method('delete')
- ->with('calendar_reminders')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(3))
- ->method('where')
- ->with('WHERE_CLAUSE_1')
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->expects($this->at(6))
- ->method('andWhere')
- ->with('WHERE_CLAUSE_2')
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->expects($this->at(7))
- ->method('execute')
- ->with()
- ->willReturn($stmt);
+ $this->reminderBackend = new ReminderBackend(self::$realDatabase, $this->timeFactory);
- $this->reminderBackend->cleanRemindersForEvent(1, 'object.ics');
+ $this->createRemindersTestSet();
}
- public function testCleanRemindersForCalendar(): void
- {
- /** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
- $queryBuilder = $this->createMock(IQueryBuilder::class);
- $stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
- $expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
+ protected function tearDown() {
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->delete('calendar_reminders')->execute();
+ $query->delete('calendarobjects')->execute();
+ $query->delete('calendars')->execute();
+ }
- $this->dbConnection->expects($this->once())
- ->method('getQueryBuilder')
- ->with()
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->method('expr')
- ->will($this->returnValue($expr));
-
- $expr->method('eq')
- ->will($this->returnValueMap([
- ['calendarid', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'],
- ]));
- $queryBuilder->method('createNamedParameter')
- ->will($this->returnValueMap([
- [1337, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
- ]));
-
- $queryBuilder->expects($this->at(0))
- ->method('delete')
- ->with('calendar_reminders')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(3))
- ->method('where')
- ->with('WHERE_CLAUSE_1')
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->expects($this->at(4))
- ->method('execute')
- ->with()
- ->willReturn($stmt);
- $this->reminderBackend->cleanRemindersForCalendar(1337);
+ public function testCleanRemindersForEvent(): void {
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(4, $rows);
+
+ $this->reminderBackend->cleanRemindersForEvent(1);
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(2, $rows);
}
- public function testRemoveReminder(): void
- {
- /** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
- $queryBuilder = $this->createMock(IQueryBuilder::class);
- $stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
- $expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
+ public function testCleanRemindersForCalendar(): void {
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
- $this->dbConnection->expects($this->once())
- ->method('getQueryBuilder')
- ->with()
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->method('expr')
- ->will($this->returnValue($expr));
-
- $expr->method('eq')
- ->will($this->returnValueMap([
- ['id', 'createNamedParameter-1', null, 'WHERE_CLAUSE_1'],
- ]));
- $queryBuilder->method('createNamedParameter')
- ->will($this->returnValueMap([
- [16, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
- ]));
-
- $queryBuilder->expects($this->at(0))
- ->method('delete')
- ->with('calendar_reminders')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(3))
- ->method('where')
- ->with('WHERE_CLAUSE_1')
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->expects($this->at(4))
- ->method('execute')
- ->with()
- ->willReturn($stmt);
+ $this->assertCount(4, $rows);
+
+ $this->reminderBackend->cleanRemindersForCalendar(1);
- $this->reminderBackend->removeReminder(16);
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(1, $rows);
}
- public function testGetRemindersToProcess(): void
- {
- $dbData = [[
- 'cr.id' => 30,
- 'cr.calendarid' => 3,
- 'cr.objecturi' => 'object.ics',
- 'cr.type' => 'EMAIL',
- 'cr.notificationdate' => 1337,
- 'cr.uid' => 'user1',
- 'co.calendardata' => 'BEGIN:VCALENDAR',
- 'c.displayname' => 'My Calendar'
- ]];
-
- $this->timeFactory->expects($this->exactly(2))
+ public function testRemoveReminder(): void {
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(4, $rows);
+
+ $this->reminderBackend->removeReminder((int) $rows[3]['id']);
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(3, $rows);
+ }
+
+ public function testGetRemindersToProcess(): void {
+ $this->timeFactory->expects($this->exactly(1))
->method('getTime')
->with()
- ->willReturn(1337);
+ ->willReturn(123457);
+
+ $rows = $this->reminderBackend->getRemindersToProcess();
+
+ $this->assertCount(2, $rows);
+ unset($rows[0]['id']);
+ unset($rows[1]['id']);
+
+ $this->assertEquals($rows[0], [
+ 'calendar_id' => 1,
+ 'object_id' => 1,
+ 'uid' => 'asd',
+ 'is_recurring' => false,
+ 'recurrence_id' => 123458,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => 'asd123',
+ 'alarm_hash' => 'asd567',
+ 'type' => 'EMAIL',
+ 'is_relative' => true,
+ 'notification_date' => 123456,
+ 'is_repeat_based' => false,
+ 'calendardata' => 'Calendar data 123',
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
+ ]);
+ $this->assertEquals($rows[1], [
+ 'calendar_id' => 1,
+ 'object_id' => 1,
+ 'uid' => 'asd',
+ 'is_recurring' => false,
+ 'recurrence_id' => 123458,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => 'asd123',
+ 'alarm_hash' => 'asd567',
+ 'type' => 'AUDIO',
+ 'is_relative' => true,
+ 'notification_date' => 123456,
+ 'is_repeat_based' => false,
+ 'calendardata' => 'Calendar data 123',
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
+ ]);
+ }
- /** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
- $queryBuilder = $this->createMock(IQueryBuilder::class);
- $stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
- $expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
+ public function testGetAllScheduledRemindersForEvent(): void {
+ $rows = $this->reminderBackend->getAllScheduledRemindersForEvent(1);
+
+ $this->assertCount(2, $rows);
+ unset($rows[0]['id']);
+ unset($rows[1]['id']);
+
+ $this->assertEquals($rows[0], [
+ 'calendar_id' => 1,
+ 'object_id' => 1,
+ 'uid' => 'asd',
+ 'is_recurring' => false,
+ 'recurrence_id' => 123458,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => 'asd123',
+ 'alarm_hash' => 'asd567',
+ 'type' => 'EMAIL',
+ 'is_relative' => true,
+ 'notification_date' => 123456,
+ 'is_repeat_based' => false,
+ ]);
+ $this->assertEquals($rows[1], [
+ 'calendar_id' => 1,
+ 'object_id' => 1,
+ 'uid' => 'asd',
+ 'is_recurring' => false,
+ 'recurrence_id' => 123458,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => 'asd123',
+ 'alarm_hash' => 'asd567',
+ 'type' => 'AUDIO',
+ 'is_relative' => true,
+ 'notification_date' => 123456,
+ 'is_repeat_based' => false,
+ ]);
+ }
- $this->dbConnection->expects($this->once())
- ->method('getQueryBuilder')
- ->with()
- ->willReturn($queryBuilder);
- $queryBuilder->method('expr')
- ->willReturn($expr);
-
- $expr->method('eq')
- ->willReturnMap([
- ['cr.calendarid', 'c.id', null, 'EQ_CLAUSE_1'],
- ['co.uri', 'cr.objecturi', null, 'EQ_CLAUSE_2'],
- ]);
- $expr->method('andX')
- ->willReturnMap([
- ['EQ_CLAUSE_1', 'EQ_CLAUSE_2', 'ANDX_CLAUSE'],
- ]);
-
- $expr->method('lte')
- ->with('cr.notificationdate', 'createNamedParameter-1', null)
- ->willReturn('LTE_CLAUSE_1');
-
- $expr->method('gte')
- ->with('cr.eventstartdate', 'createNamedParameter-1', null)
- ->willReturn('GTE_CLAUSE_2');
-
- $queryBuilder->method('createNamedParameter')
- ->willReturnMap([
- [1337, \PDO::PARAM_STR, null, 'createNamedParameter-1'],
- ]);
-
- $queryBuilder->expects($this->at(0))
- ->method('select')
- ->with(['cr.id', 'cr.calendarid', 'cr.objecturi', 'cr.type', 'cr.notificationdate', 'cr.uid', 'co.calendardata', 'c.displayname'])
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(1))
- ->method('from')
- ->with('calendar_reminders', 'cr')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(4))
- ->method('where')
- ->with('LTE_CLAUSE_1')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(7))
- ->method('andWhere')
- ->with('GTE_CLAUSE_2')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(9))
- ->method('leftJoin')
- ->with('cr', 'calendars', 'c', 'EQ_CLAUSE_1')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(13))
- ->method('leftJoin')
- ->with('cr', 'calendarobjects', 'co', 'ANDX_CLAUSE')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(14))
- ->method('execute')
- ->with()
- ->willReturn($stmt);
+ public function testInsertReminder(): void {
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(4, $rows);
+
+ $this->reminderBackend->insertReminder(42, 1337, 'uid99', true, 12345678,
+ true, 'hash99', 'hash42', 'AUDIO', false, 12345670, false);
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(5, $rows);
+
+ unset($rows[4]['id']);
+
+ $this->assertEquals($rows[4], [
+ 'calendar_id' => '42',
+ 'object_id' => '1337',
+ 'is_recurring' => '1',
+ 'uid' => 'uid99',
+ 'recurrence_id' => '12345678',
+ 'is_recurrence_exception' => '1',
+ 'event_hash' => 'hash99',
+ 'alarm_hash' => 'hash42',
+ 'type' => 'AUDIO',
+ 'is_relative' => '0',
+ 'notification_date' => '12345670',
+ 'is_repeat_based' => '0',
+ ]);
+ }
- $stmt->expects($this->once())
- ->method('fetchAll')
- ->with()
- ->willReturn($dbData);
+ public function testUpdateReminder() {
+ $query = self::$realDatabase->getQueryBuilder();
+ $rows = $query->select('*')
+ ->from('calendar_reminders')
+ ->execute()
+ ->fetchAll();
+
+ $this->assertCount(4, $rows);
- $actual = $this->reminderBackend->getRemindersToProcess();
- $this->assertEquals($dbData, $actual);
+ $this->assertEquals($rows[3]['notification_date'], 123600);
+
+ $reminderId = (int) $rows[3]['id'];
+ $newNotificationDate = 123700;
+
+ $this->reminderBackend->updateReminder($reminderId, $newNotificationDate);
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $row = $query->select('notification_date')
+ ->from('calendar_reminders')
+ ->where($query->expr()->eq('id', $query->createNamedParameter($reminderId)))
+ ->execute()
+ ->fetch();
+
+ $this->assertEquals((int) $row['notification_date'], 123700);
}
- public function testInsertReminder(): void
- {
- /** @var IQueryBuilder|\PHPUnit\Framework\MockObject\MockObject $queryBuilder */
- $queryBuilder = $this->createMock(IQueryBuilder::class);
- $stmt = $this->createMock(\Doctrine\DBAL\Driver\Statement::class);
- $expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
- $this->dbConnection->expects($this->once())
- ->method('getQueryBuilder')
- ->with()
- ->will($this->returnValue($queryBuilder));
- $queryBuilder->method('expr')
- ->will($this->returnValue($expr));
-
- $queryBuilder->method('createNamedParameter')
- ->will($this->returnValueMap([
- ['user1', \PDO::PARAM_STR, null, 'createNamedParameter-1'],
- ['1', \PDO::PARAM_STR, null, 'createNamedParameter-2'],
- ['object.ics', \PDO::PARAM_STR, null, 'createNamedParameter-3'],
- ['EMAIL', \PDO::PARAM_STR, null, 'createNamedParameter-4'],
- [1227, \PDO::PARAM_STR, null, 'createNamedParameter-5'],
- [1337, \PDO::PARAM_STR, null, 'createNamedParameter-6'],
- ]));
-
- $queryBuilder->expects($this->at(0))
- ->method('insert')
- ->with('calendar_reminders')
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(7))
- ->method('values')
- ->with([
- 'uid' => 'createNamedParameter-1',
- 'calendarid' => 'createNamedParameter-2',
- 'objecturi' => 'createNamedParameter-3',
- 'type' => 'createNamedParameter-4',
- 'notificationdate' => 'createNamedParameter-5',
- 'eventstartdate' => 'createNamedParameter-6',
+ private function createRemindersTestSet(): void {
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendars')
+ ->values([
+ 'id' => $query->createNamedParameter(1),
+ 'principaluri' => $query->createNamedParameter('principals/users/user001'),
+ 'displayname' => $query->createNamedParameter('Displayname 123'),
])
- ->willReturn($queryBuilder);
- $queryBuilder->expects($this->at(8))
- ->method('execute')
- ->with()
- ->willReturn($stmt);
-
- $actual = $this->reminderBackend->insertReminder('user1', '1', 'object.ics', 'EMAIL', 1227, 1337);
- }
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendars')
+ ->values([
+ 'id' => $query->createNamedParameter(99),
+ 'principaluri' => $query->createNamedParameter('principals/users/user002'),
+ 'displayname' => $query->createNamedParameter('Displayname 99'),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendarobjects')
+ ->values([
+ 'id' => $query->createNamedParameter(1),
+ 'calendardata' => $query->createNamedParameter('Calendar data 123'),
+ 'calendarid' => $query->createNamedParameter(1),
+ 'size' => $query->createNamedParameter(42),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendarobjects')
+ ->values([
+ 'id' => $query->createNamedParameter(2),
+ 'calendardata' => $query->createNamedParameter('Calendar data 456'),
+ 'calendarid' => $query->createNamedParameter(1),
+ 'size' => $query->createNamedParameter(42),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendarobjects')
+ ->values([
+ 'id' => $query->createNamedParameter(10),
+ 'calendardata' => $query->createNamedParameter('Calendar data 789'),
+ 'calendarid' => $query->createNamedParameter(99),
+ 'size' => $query->createNamedParameter(42),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendar_reminders')
+ ->values([
+ 'calendar_id' => $query->createNamedParameter(1),
+ 'object_id' => $query->createNamedParameter(1),
+ 'uid' => $query->createNamedParameter('asd'),
+ 'is_recurring' => $query->createNamedParameter(0),
+ 'recurrence_id' => $query->createNamedParameter(123458),
+ 'is_recurrence_exception' => $query->createNamedParameter(0),
+ 'event_hash' => $query->createNamedParameter('asd123'),
+ 'alarm_hash' => $query->createNamedParameter('asd567'),
+ 'type' => $query->createNamedParameter('EMAIL'),
+ 'is_relative' => $query->createNamedParameter(1),
+ 'notification_date' => $query->createNamedParameter(123456),
+ 'is_repeat_based' => $query->createNamedParameter(0),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendar_reminders')
+ ->values([
+ 'calendar_id' => $query->createNamedParameter(1),
+ 'object_id' => $query->createNamedParameter(1),
+ 'uid' => $query->createNamedParameter('asd'),
+ 'is_recurring' => $query->createNamedParameter(0),
+ 'recurrence_id' => $query->createNamedParameter(123458),
+ 'is_recurrence_exception' => $query->createNamedParameter(0),
+ 'event_hash' => $query->createNamedParameter('asd123'),
+ 'alarm_hash' => $query->createNamedParameter('asd567'),
+ 'type' => $query->createNamedParameter('AUDIO'),
+ 'is_relative' => $query->createNamedParameter(1),
+ 'notification_date' => $query->createNamedParameter(123456),
+ 'is_repeat_based' => $query->createNamedParameter(0),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendar_reminders')
+ ->values([
+ 'calendar_id' => $query->createNamedParameter(1),
+ 'object_id' => $query->createNamedParameter(2),
+ 'uid' => $query->createNamedParameter('asd'),
+ 'is_recurring' => $query->createNamedParameter(0),
+ 'recurrence_id' => $query->createNamedParameter(123900),
+ 'is_recurrence_exception' => $query->createNamedParameter(0),
+ 'event_hash' => $query->createNamedParameter('asd123'),
+ 'alarm_hash' => $query->createNamedParameter('asd567'),
+ 'type' => $query->createNamedParameter('EMAIL'),
+ 'is_relative' => $query->createNamedParameter(1),
+ 'notification_date' => $query->createNamedParameter(123499),
+ 'is_repeat_based' => $query->createNamedParameter(0),
+ ])
+ ->execute();
+
+ $query = self::$realDatabase->getQueryBuilder();
+ $query->insert('calendar_reminders')
+ ->values([
+ 'calendar_id' => $query->createNamedParameter(99),
+ 'object_id' => $query->createNamedParameter(10),
+ 'uid' => $query->createNamedParameter('asd'),
+ 'is_recurring' => $query->createNamedParameter(0),
+ 'recurrence_id' => $query->createNamedParameter(123900),
+ 'is_recurrence_exception' => $query->createNamedParameter(0),
+ 'event_hash' => $query->createNamedParameter('asd123'),
+ 'alarm_hash' => $query->createNamedParameter('asd567'),
+ 'type' => $query->createNamedParameter('DISPLAY'),
+ 'is_relative' => $query->createNamedParameter(1),
+ 'notification_date' => $query->createNamedParameter(123600),
+ 'is_repeat_based' => $query->createNamedParameter(0),
+ ])
+ ->execute();
+ }
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/AbstractNotificationProviderTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AbstractNotificationProviderTest.php
index ba2e54af33c..5a8d328ef81 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/AbstractNotificationProviderTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AbstractNotificationProviderTest.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2019, Thomas Citharel
*
@@ -19,9 +20,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
-namespace OCA\DAV\Tests\unit\CalDAV\Reminder;
+namespace OCA\DAV\Tests\unit\CalDAV\Reminder\NotificationProvider;
-use OCA\DAV\CalDAV\Reminder\AbstractNotificationProvider;
+use OCA\DAV\CalDAV\Reminder\NotificationProvider\AbstractProvider;
use OCP\IConfig;
use OCP\IL10N;
use OCP\ILogger;
@@ -33,23 +34,23 @@ use Sabre\VObject\Component\VCalendar;
abstract class AbstractNotificationProviderTest extends TestCase {
- /** @var ILogger|\PHPUnit\Framework\MockObject\MockObject */
- protected $logger;
+ /** @var ILogger|\PHPUnit\Framework\MockObject\MockObject */
+ protected $logger;
- /** @var L10NFactory|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10nFactory;
+ /** @var L10NFactory|\PHPUnit\Framework\MockObject\MockObject */
+ protected $l10nFactory;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10n;
+ /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
+ protected $l10n;
- /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
- protected $urlGenerator;
+ /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
+ protected $urlGenerator;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
+ /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
+ protected $config;
- /** @var AbstractNotificationProvider|\PHPUnit\Framework\MockObject\MockObject */
- protected $provider;
+ /** @var AbstractProvider|\PHPUnit\Framework\MockObject\MockObject */
+ protected $provider;
/**
* @var VCalendar
@@ -69,19 +70,20 @@ abstract class AbstractNotificationProviderTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->logger = $this->createMock(ILogger::class);
- $this->l10nFactory = $this->createMock(L10NFactory::class);
- $this->l10n = $this->createMock(IL10N::class);
- $this->urlGenerator = $this->createMock(IURLGenerator::class);
- $this->config = $this->createMock(IConfig::class);
+ $this->logger = $this->createMock(ILogger::class);
+ $this->l10nFactory = $this->createMock(L10NFactory::class);
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->config = $this->createMock(IConfig::class);
- $this->vcalendar = new VCalendar();
+ $this->vcalendar = new VCalendar();
$this->vcalendar->add('VEVENT', [
'SUMMARY' => 'Fellowship meeting',
- 'DTSTART' => new \DateTime('2017-01-01 00:00:00') // 1483228800
- ]);
+ 'DTSTART' => new \DateTime('2017-01-01 00:00:00+00:00'), // 1483228800,
+ 'UID' => 'uid1234',
+ ]);
$this->calendarDisplayName = 'Personal';
- $this->user = $this->createMock(IUser::class);
- }
+ $this->user = $this->createMock(IUser::class);
+ }
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AudioProviderTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AudioProviderTest.php
new file mode 100644
index 00000000000..9938b2f732c
--- /dev/null
+++ b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/AudioProviderTest.php
@@ -0,0 +1,33 @@
+<?php
+declare(strict_types=1);
+/**
+ * @copyright Copyright (c) 2019, Georg Ehrke
+ *
+ * @author Georg Ehrke <oc.list@georgehrke.com>
+ *
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+namespace OCA\DAV\Tests\unit\CalDAV\Reminder\NotificationProvider;
+
+use OCA\DAV\CalDAV\Reminder\NotificationProvider\AudioProvider;
+
+class AudioProviderTest extends PushProviderTest {
+
+ public function testNotificationType():void {
+ $this->assertEquals(AudioProvider::NOTIFICATION_TYPE, 'AUDIO');
+ }
+
+} \ No newline at end of file
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/EmailProviderTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/EmailProviderTest.php
index 34a61b34fc5..9bf2957e9f0 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/EmailProviderTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/EmailProviderTest.php
@@ -1,8 +1,11 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2019, Thomas Citharel
+ * @copyright Copyright (c) 2019, Georg Ehrke
*
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -22,7 +25,6 @@
namespace OCA\DAV\Tests\unit\CalDAV\Reminder\NotificationProvider;
use OCA\DAV\CalDAV\Reminder\NotificationProvider\EmailProvider;
-use OCA\DAV\CalDAV\Reminder\AbstractNotificationProvider;
use OCP\IConfig;
use OCP\IL10N;
use OCP\ILogger;
@@ -33,194 +35,512 @@ use OCP\Mail\IEMailTemplate;
use OCP\Mail\IMailer;
use OCP\Mail\IAttachment;
use OCP\Mail\IMessage;
+use Sabre\VObject\Component\VCalendar;
use Test\TestCase;
-use OCA\DAV\Tests\unit\CalDAV\Reminder\AbstractNotificationProviderTest;
class EmailProviderTest extends AbstractNotificationProviderTest {
- const USER_EMAIL = 'frodo@hobb.it';
+ const USER_EMAIL = 'frodo@hobb.it';
- /** @var ILogger|\PHPUnit\Framework\MockObject\MockObject */
- protected $logger;
+ /** @var ILogger|\PHPUnit\Framework\MockObject\MockObject */
+ protected $logger;
- /** @var L10NFactory|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10nFactory;
+ /** @var L10NFactory|\PHPUnit\Framework\MockObject\MockObject */
+ protected $l10nFactory;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10n;
+ /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
+ protected $l10n;
- /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
- protected $urlGenerator;
+ /** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
+ protected $urlGenerator;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
+ /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
+ protected $config;
- /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
private $mailer;
- public function setUp() {
- parent::setUp();
-
- $this->mailer = $this->createMock(IMailer::class);
-
- $this->provider = new EmailProvider(
- $this->config,
- $this->mailer,
- $this->logger,
- $this->l10nFactory,
- $this->urlGenerator
- );
- }
-
- public function testSendWithNoUserEmail(): void
- {
- $this->user->expects($this->once())
- ->method('getEMailAddress')
- ->with()
- ->willReturn(null);
-
- $this->mailer
- ->expects($this->never())
- ->method('send');
-
- $this->provider->send($this->vcalendar, $this->calendarDisplayName, $this->user);
- }
-
- public function testSendWithFailedRecipients(): void
- {
- $this->user->expects($this->exactly(2))
- ->method('getEMailAddress')
- ->with()
- ->willReturn(self::USER_EMAIL);
-
- $this->mailer
- ->expects($this->once())
- ->method('send')
- ->willReturn([self::USER_EMAIL])
- ;
-
- $this->logger
- ->expects($this->once())
- ->method('error');
-
- $l10n = $this->createMock(IL10N::class);
- $this->l10nFactory
- ->method('get')
- ->willReturn($l10n);
-
- $this->provider->send($this->vcalendar, $this->calendarDisplayName, $this->user);
- }
-
- public function testSendWithMailerFailure(): void
- {
- $this->user->expects($this->exactly(2))
- ->method('getEMailAddress')
- ->with()
- ->willReturn(self::USER_EMAIL);
-
- $ex = new \Exception();
-
- $this->mailer
- ->expects($this->once())
- ->method('send')
- ->will($this->throwException($ex))
- ;
-
- $this->logger
- ->expects($this->once())
- ->method('logException')
- ->with($ex, ['app' => 'dav']);
-
- $l10n = $this->createMock(IL10N::class);
- $this->l10nFactory
- ->method('get')
- ->willReturn($l10n);
-
- $this->provider->send($this->vcalendar, $this->calendarDisplayName, $this->user);
- }
-
- public function testSend(): void
- {
- $this->user->expects($this->exactly(2))
- ->method('getEMailAddress')
- ->with()
- ->willReturn(self::USER_EMAIL);
-
- $this->user->expects($this->once())
- ->method('getDisplayName')
- ->with()
- ->willReturn('Frodo');
-
- $this->urlGenerator
- ->expects($this->exactly(2))
- ->method('getAbsoluteURL');
-
- $this->urlGenerator
- ->expects($this->exactly(2))
- ->method('imagePath');
-
- $mailMessage = $this->createMock(IMessage::class);
- $mailMessage->expects($this->once())
- ->method('setFrom')
- ->with([\OCP\Util::getDefaultEmailAddress('invitations-noreply') => 'Nextcloud'])
- ->willReturn($mailMessage);
-
- $mailMessage->expects($this->once())
- ->method('setTo')
- ->with([self::USER_EMAIL => 'Frodo'])
- ->willReturn($mailMessage);
-
- $mailMessage
- ->expects($this->never())
- ->method('setReplyTo')
- ->willReturn($mailMessage);
-
- $emailTemplate = $this->createMock(IEMailTemplate::class);
- $this->mailer
- ->expects($this->once())
- ->method('createEMailTemplate')
- ->willReturn($emailTemplate);
-
- $emailTemplate->expects($this->once())
+ public function setUp() {
+ parent::setUp();
+
+ $this->mailer = $this->createMock(IMailer::class);
+
+ $this->provider = new EmailProvider(
+ $this->config,
+ $this->mailer,
+ $this->logger,
+ $this->l10nFactory,
+ $this->urlGenerator
+ );
+ }
+
+ public function testSendWithoutAttendees():void {
+ $user1 = $this->createMock(IUser::class);
+ $user1->method('getUID')
+ ->willReturn('uid1');
+ $user1->method('getEMailAddress')
+ ->willReturn('uid1@example.com');
+ $user2 = $this->createMock(IUser::class);
+ $user2->method('getUID')
+ ->willReturn('uid2');
+ $user2->method('getEMailAddress')
+ ->willReturn('uid2@example.com');
+ $user3 = $this->createMock(IUser::class);
+ $user3->method('getUID')
+ ->willReturn('uid3');
+ $user3->method('getEMailAddress')
+ ->willReturn('uid3@example.com');
+ $user4 = $this->createMock(IUser::class);
+ $user4->method('getUID')
+ ->willReturn('uid4');
+ $user4->method('getEMailAddress')
+ ->willReturn(null);
+
+ $users = [$user1, $user2, $user3, $user4];
+
+ $this->config->expects($this->at(0))
+ ->method('getUserValue')
+ ->with('uid1', 'core', 'lang', null)
+ ->willReturn(null);
+ $this->config->expects($this->at(1))
+ ->method('getUserValue')
+ ->with('uid2', 'core', 'lang', null)
+ ->willReturn('de');
+ $this->config->expects($this->at(2))
+ ->method('getUserValue')
+ ->with('uid3', 'core', 'lang', null)
+ ->willReturn('de');
+
+ $enL10N = $this->createMock(IL10N::class);
+ $enL10N->method('t')
+ ->will($this->returnArgument(0));
+ $enL10N->method('l')
+ ->will($this->returnArgument(0));
+
+ $deL10N = $this->createMock(IL10N::class);
+ $deL10N->method('t')
+ ->will($this->returnArgument(0));
+ $deL10N->method('l')
+ ->will($this->returnArgument(0));
+
+ $this->l10nFactory->expects($this->at(0))
+ ->method('findLanguage')
+ ->with()
+ ->willReturn('en');
+
+ $this->l10nFactory->expects($this->at(1))
+ ->method('languageExists')
+ ->with('dav', 'en')
+ ->willReturn(true);
+
+ $this->l10nFactory->expects($this->at(2))
+ ->method('get')
+ ->with('dav', 'en')
+ ->willReturn($enL10N);
+
+ $this->l10nFactory->expects($this->at(3))
+ ->method('languageExists')
+ ->with('dav', 'de')
+ ->willReturn(true);
+
+ $this->l10nFactory->expects($this->at(4))
+ ->method('get')
+ ->with('dav', 'de')
+ ->willReturn($deL10N);
+
+ $template1 = $this->getTemplateMock();
+ $message11 = $this->getMessageMock('uid1@example.com', $template1);
+ $template2 = $this->getTemplateMock();
+ $message21 = $this->getMessageMock('uid2@example.com', $template2);
+ $message22 = $this->getMessageMock('uid3@example.com', $template2);
+
+ $this->mailer->expects($this->at(0))
+ ->method('createEMailTemplate')
+ ->with('dav.calendarReminder')
+ ->willReturn($template1);
+
+ $this->mailer->expects($this->at(1))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message11);
+ $this->mailer->expects($this->at(2))
+ ->method('send')
+ ->with($message11)
+ ->willReturn([]);
+
+ $this->mailer->expects($this->at(3))
+ ->method('createEMailTemplate')
+ ->with('dav.calendarReminder')
+ ->willReturn($template2);
+
+ $this->mailer->expects($this->at(4))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message21);
+ $this->mailer->expects($this->at(5))
+ ->method('send')
+ ->with($message21)
+ ->willReturn([]);
+ $this->mailer->expects($this->at(6))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message22);
+ $this->mailer->expects($this->at(7))
+ ->method('send')
+ ->with($message22)
+ ->willReturn([]);
+
+ $this->setupURLGeneratorMock(2);
+
+ $vcalendar = $this->getNoAttendeeVCalendar();
+ $this->provider->send($vcalendar->VEVENT, $this->calendarDisplayName, $users);
+ }
+
+ public function testSendWithAttendees(): void {
+ $user1 = $this->createMock(IUser::class);
+ $user1->method('getUID')
+ ->willReturn('uid1');
+ $user1->method('getEMailAddress')
+ ->willReturn('uid1@example.com');
+ $user2 = $this->createMock(IUser::class);
+ $user2->method('getUID')
+ ->willReturn('uid2');
+ $user2->method('getEMailAddress')
+ ->willReturn('uid2@example.com');
+ $user3 = $this->createMock(IUser::class);
+ $user3->method('getUID')
+ ->willReturn('uid3');
+ $user3->method('getEMailAddress')
+ ->willReturn('uid3@example.com');
+ $user4 = $this->createMock(IUser::class);
+ $user4->method('getUID')
+ ->willReturn('uid4');
+ $user4->method('getEMailAddress')
+ ->willReturn(null);
+
+ $users = [$user1, $user2, $user3, $user4];
+
+ $this->config->expects($this->at(0))
+ ->method('getUserValue')
+ ->with('uid1', 'core', 'lang', null)
+ ->willReturn(null);
+ $this->config->expects($this->at(1))
+ ->method('getUserValue')
+ ->with('uid2', 'core', 'lang', null)
+ ->willReturn('de');
+ $this->config->expects($this->at(2))
+ ->method('getUserValue')
+ ->with('uid3', 'core', 'lang', null)
+ ->willReturn('de');
+
+ $enL10N = $this->createMock(IL10N::class);
+ $enL10N->method('t')
+ ->will($this->returnArgument(0));
+ $enL10N->method('l')
+ ->will($this->returnArgument(0));
+
+ $deL10N = $this->createMock(IL10N::class);
+ $deL10N->method('t')
+ ->will($this->returnArgument(0));
+ $deL10N->method('l')
+ ->will($this->returnArgument(0));
+
+ $this->l10nFactory->expects($this->at(0))
+ ->method('findLanguage')
+ ->with()
+ ->willReturn('en');
+
+ $this->l10nFactory->expects($this->at(1))
+ ->method('languageExists')
+ ->with('dav', 'de')
+ ->willReturn(true);
+
+ $this->l10nFactory->expects($this->at(2))
+ ->method('get')
+ ->with('dav', 'de')
+ ->willReturn($enL10N);
+
+ $this->l10nFactory->expects($this->at(3))
+ ->method('languageExists')
+ ->with('dav', 'en')
+ ->willReturn(true);
+
+ $this->l10nFactory->expects($this->at(4))
+ ->method('get')
+ ->with('dav', 'en')
+ ->willReturn($deL10N);
+
+ $template1 = $this->getTemplateMock();
+ $message11 = $this->getMessageMock('foo1@example.org', $template1);
+ $message12 = $this->getMessageMock('uid2@example.com', $template1);
+ $message13 = $this->getMessageMock('uid3@example.com', $template1);
+ $template2 = $this->getTemplateMock();
+ $message21 = $this->getMessageMock('foo3@example.org', $template2);
+ $message22 = $this->getMessageMock('foo4@example.org', $template2);
+ $message23 = $this->getMessageMock('uid1@example.com', $template2);
+
+ $this->mailer->expects($this->at(0))
+ ->method('createEMailTemplate')
+ ->with('dav.calendarReminder')
+ ->willReturn($template1);
+
+ $this->mailer->expects($this->at(1))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message11);
+ $this->mailer->expects($this->at(2))
+ ->method('send')
+ ->with($message11)
+ ->willReturn([]);
+ $this->mailer->expects($this->at(3))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message12);
+ $this->mailer->expects($this->at(4))
+ ->method('send')
+ ->with($message12)
+ ->willReturn([]);
+ $this->mailer->expects($this->at(5))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message13);
+ $this->mailer->expects($this->at(6))
+ ->method('send')
+ ->with($message13)
+ ->willReturn([]);
+
+ $this->mailer->expects($this->at(7))
+ ->method('createEMailTemplate')
+ ->with('dav.calendarReminder')
+ ->willReturn($template2);
+
+ $this->mailer->expects($this->at(8))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message21);
+ $this->mailer->expects($this->at(9))
+ ->method('send')
+ ->with($message21)
+ ->willReturn([]);
+ $this->mailer->expects($this->at(10))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message22);
+ $this->mailer->expects($this->at(11))
+ ->method('send')
+ ->with($message22)
+ ->willReturn([]);
+ $this->mailer->expects($this->at(12))
+ ->method('createMessage')
+ ->with()
+ ->willReturn($message23);
+ $this->mailer->expects($this->at(13))
+ ->method('send')
+ ->with($message23)
+ ->willReturn([]);
+
+ $this->setupURLGeneratorMock(2);
+
+ $vcalendar = $this->getAttendeeVCalendar();
+ $this->provider->send($vcalendar->VEVENT, $this->calendarDisplayName, $users);
+ }
+
+ /**
+ * @return IEMailTemplate
+ */
+ private function getTemplateMock():IEMailTemplate {
+ $template = $this->createMock(IEMailTemplate::class);
+
+ $template->expects($this->at(0))
+ ->method('addHeader')
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(1))
->method('setSubject')
- ->with('Notification: Fellowship meeting');
-
- $emailTemplate->expects($this->once())
- ->method('addHeader');
-
- $emailTemplate->expects($this->once())
- ->method('addHeading');
-
- $emailTemplate->expects($this->exactly(2))
- ->method('addBodyListItem');
-
- $emailTemplate->expects($this->once())
- ->method('addFooter');
-
- $mailMessage->expects($this->once())
- ->method('useTemplate')
- ->with($emailTemplate);
-
- $this->mailer
- ->expects($this->once())
- ->method('createMessage')
- ->willReturn($mailMessage);
-
- $emailAttachment = $this->createMock(IAttachment::class);
- $this->mailer
- ->expects($this->once())
- ->method('createAttachment')
- ->willReturn($emailAttachment);
-
- $this->mailer
- ->expects($this->once())
- ->method('send');
-
- $l10n = $this->createMock(IL10N::class);
- $this->l10nFactory
- ->method('get')
- ->willReturn($l10n);
-
- $this->provider->send($this->vcalendar, $this->calendarDisplayName, $this->user);
- }
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(2))
+ ->method('addHeading')
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(3))
+ ->method('addBodyListItem')
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(4))
+ ->method('addBodyListItem')
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(5))
+ ->method('addBodyListItem')
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(6))
+ ->method('addBodyListItem')
+ ->with()
+ ->willReturn($template);
+
+ $template->expects($this->at(7))
+ ->method('addFooter')
+ ->with()
+ ->willReturn($template);
+
+ return $template;
+ }
+
+ /**
+ * @param array $toMail
+ * @param IEMailTemplate $templateMock
+ * @param array $replyTo
+ * @return IMessage
+ */
+ private function getMessageMock(string $toMail, IEMailTemplate $templateMock, array $replyTo=null):IMessage {
+ $message = $this->createMock(IMessage::class);
+ $i = 0;
+
+ $message->expects($this->at($i++))
+ ->method('setFrom')
+ ->with([\OCP\Util::getDefaultEmailAddress('reminders-noreply')])
+ ->willReturn($message);
+
+ if ($replyTo) {
+ $message->expects($this->at($i++))
+ ->method('setReplyTo')
+ ->with($replyTo)
+ ->willReturn($message);
+ }
+
+ $message->expects($this->at($i++))
+ ->method('setTo')
+ ->with([$toMail])
+ ->willReturn($message);
+
+ $message->expects($this->at($i++))
+ ->method('useTemplate')
+ ->with($templateMock)
+ ->willReturn($message);
+
+ return $message;
+ }
+
+ private function getNoAttendeeVCalendar():VCalendar {
+ $vcalendar = new VCalendar();
+ $vcalendar->add('VEVENT', [
+ 'SUMMARY' => 'Fellowship meeting',
+ 'DTSTART' => new \DateTime('2017-01-01 00:00:00+00:00'), // 1483228800,
+ 'UID' => 'uid1234',
+ 'LOCATION' => 'Location 123',
+ 'DESCRIPTION' => 'DESCRIPTION 456',
+ ]);
+
+ return $vcalendar;
+ }
+
+ private function getAttendeeVCalendar():VCalendar {
+ $vcalendar = new VCalendar();
+ $vcalendar->add('VEVENT', [
+ 'SUMMARY' => 'Fellowship meeting',
+ 'DTSTART' => new \DateTime('2017-01-01 00:00:00+00:00'), // 1483228800,
+ 'UID' => 'uid1234',
+ 'LOCATION' => 'Location 123',
+ 'DESCRIPTION' => 'DESCRIPTION 456',
+ ]);
+
+ $vcalendar->VEVENT->add(
+ 'ATTENDEE',
+ 'mailto:foo1@example.org',
+ [
+ 'LANG' => 'de',
+ 'PARTSTAT' => 'NEEDS-ACTION',
+ ]
+ );
+
+ $vcalendar->VEVENT->add(
+ 'ATTENDEE',
+ 'mailto:foo2@example.org',
+ [
+ 'LANG' => 'de',
+ 'PARTSTAT' => 'DECLINED',
+ ]
+ );
+
+ $vcalendar->VEVENT->add(
+ 'ATTENDEE',
+ 'mailto:foo3@example.org',
+ [
+ 'LANG' => 'en',
+ 'PARTSTAT' => 'CONFIRMED',
+ ]
+ );
+
+ $vcalendar->VEVENT->add(
+ 'ATTENDEE',
+ 'mailto:foo4@example.org'
+ );
+
+ $vcalendar->VEVENT->add(
+ 'ATTENDEE',
+ 'tomail:foo5@example.org'
+ );
+
+ return $vcalendar;
+ }
+
+ private function setupURLGeneratorMock(int $times=1):void {
+ for ($i = 0; $i < $times; $i++) {
+ $this->urlGenerator
+ ->expects($this->at(8 * $i))
+ ->method('imagePath')
+ ->with('core', 'actions/info.svg')
+ ->willReturn('imagePath1');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 1))
+ ->method('getAbsoluteURL')
+ ->with('imagePath1')
+ ->willReturn('AbsURL1');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 2))
+ ->method('imagePath')
+ ->with('core', 'places/calendar.svg')
+ ->willReturn('imagePath2');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 3))
+ ->method('getAbsoluteURL')
+ ->with('imagePath2')
+ ->willReturn('AbsURL2');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 4))
+ ->method('imagePath')
+ ->with('core', 'actions/address.svg')
+ ->willReturn('imagePath3');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 5))
+ ->method('getAbsoluteURL')
+ ->with('imagePath3')
+ ->willReturn('AbsURL3');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 6))
+ ->method('imagePath')
+ ->with('core', 'actions/more.svg')
+ ->willReturn('imagePath4');
+
+ $this->urlGenerator
+ ->expects($this->at(8 * $i + 7))
+ ->method('getAbsoluteURL')
+ ->with('imagePath4')
+ ->willReturn('AbsURL4');
+ }
+ }
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php
index e10afb44d27..bbf71837b08 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProvider/PushProviderTest.php
@@ -1,8 +1,11 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2019, Thomas Citharel
+ * @copyright Copyright (c) 2019, Georg Ehrke
*
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -23,7 +26,6 @@ namespace OCA\DAV\Tests\unit\CalDAV\Reminder\NotificationProvider;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\CalDAV\Reminder\NotificationProvider\PushProvider;
-use OCA\DAV\CalDAV\Reminder\AbstractNotificationProvider;
use OCP\IConfig;
use OCP\IL10N;
use OCP\ILogger;
@@ -34,7 +36,6 @@ use OCP\Notification\IManager;
use OCP\Notification\INotification;
use OCP\AppFramework\Utility\ITimeFactory;
use Test\TestCase;
-use OCA\DAV\Tests\unit\CalDAV\Reminder\AbstractNotificationProviderTest;
class PushProviderTest extends AbstractNotificationProviderTest {
@@ -75,65 +76,111 @@ class PushProviderTest extends AbstractNotificationProviderTest {
);
}
- public function testSend(): void
- {
- $notification = $this->createMock(INotification::class);
- $notification
- ->expects($this->once())
- ->method('setApp')
- ->with(Application::APP_ID)
- ->willReturn($notification);
-
- $notification
- ->expects($this->once())
- ->method('setUser')
- ->willReturn($notification)
- ;
-
- $notification
- ->expects($this->once())
- ->method('setDateTime')
- ->willReturn($notification)
- ;
-
- $notification
- ->expects($this->once())
- ->method('setObject')
- ->willReturn($notification)
- ;
-
- $notification
- ->expects($this->once())
- ->method('setSubject')
- ->willReturn($notification)
- ;
-
- $notification
- ->expects($this->once())
- ->method('setMessage')
- ->willReturn($notification)
- ;
-
- $this->manager
- ->expects($this->once())
- ->method('createNotification')
- ->willReturn($notification);
-
- $this->manager
- ->expects($this->once())
- ->method('notify')
- ->with($notification);
-
- $l10n = $this->createMock(IL10N::class);
- $this->l10nFactory
- ->method('get')
- ->willReturn($l10n);
-
- $this->timeFactory->expects($this->once())
- ->method('getDateTime')
+ public function testNotificationType():void {
+ $this->assertEquals(PushProvider::NOTIFICATION_TYPE, 'DISPLAY');
+ }
+
+ public function testSend(): void {
+ $user1 = $this->createMock(IUser::class);
+ $user1->method('getUID')
+ ->willReturn('uid1');
+ $user2 = $this->createMock(IUser::class);
+ $user2->method('getUID')
+ ->willReturn('uid2');
+ $user3 = $this->createMock(IUser::class);
+ $user3->method('getUID')
+ ->willReturn('uid3');
+
+ $users = [$user1, $user2, $user3];
+
+ $dateTime = new \DateTime('@946684800');
+ $this->timeFactory->method('getDateTime')
->with()
- ->willReturn(new \DateTime());
+ ->willReturn($dateTime);
- $this->provider->send($this->vcalendar, $this->calendarDisplayName, $this->user);
+ $notification1 = $this->createNotificationMock('uid1', $dateTime);
+ $notification2 = $this->createNotificationMock('uid2', $dateTime);
+ $notification3 = $this->createNotificationMock('uid3', $dateTime);
+
+ $this->manager->expects($this->at(0))
+ ->method('createNotification')
+ ->with()
+ ->willReturn($notification1);
+ $this->manager->expects($this->at(2))
+ ->method('createNotification')
+ ->with()
+ ->willReturn($notification2);
+ $this->manager->expects($this->at(4))
+ ->method('createNotification')
+ ->with()
+ ->willReturn($notification3);
+
+ $this->manager->expects($this->at(1))
+ ->method('notify')
+ ->with($notification1);
+ $this->manager->expects($this->at(3))
+ ->method('notify')
+ ->with($notification2);
+ $this->manager->expects($this->at(5))
+ ->method('notify')
+ ->with($notification3);
+
+ $this->provider->send($this->vcalendar->VEVENT, $this->calendarDisplayName, $users);
}
+
+ /**
+ * @param string $uid
+ * @param \DateTime $dt
+ */
+ private function createNotificationMock(string $uid, \DateTime $dt):INotification {
+ $notification = $this->createMock(INotification::class);
+ $notification
+ ->expects($this->once())
+ ->method('setApp')
+ ->with('dav')
+ ->willReturn($notification);
+
+ $notification->expects($this->once())
+ ->method('setUser')
+ ->with($uid)
+ ->willReturn($notification);
+
+ $notification->expects($this->once())
+ ->method('setDateTime')
+ ->with($dt)
+ ->willReturn($notification);
+
+ $notification->expects($this->once())
+ ->method('setObject')
+ ->with('dav', 'uid1234')
+ ->willReturn($notification);
+
+ $notification->expects($this->once())
+ ->method('setSubject')
+ ->with('calendar_reminder', [
+ 'title' => 'Fellowship meeting',
+ 'start_atom' => '2017-01-01T00:00:00+00:00',
+ ])
+ ->willReturn($notification);
+
+ $notification
+ ->expects($this->once())
+ ->method('setMessage')
+ ->with('calendar_reminder', [
+ 'title' => 'Fellowship meeting',
+ 'start_atom' => '2017-01-01T00:00:00+00:00',
+ 'description' => null,
+ 'location' => null,
+ 'all_day' => false,
+ 'start_is_floating' => false,
+ 'start_timezone' => 'UTC',
+ 'end_atom' => '2017-01-01T00:00:00+00:00',
+ 'end_is_floating' => false,
+ 'end_timezone' => 'UTC',
+ 'calendar_displayname' => 'Personal',
+ ])
+ ->willReturn($notification);
+
+ return $notification;
+ }
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProviderManagerTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProviderManagerTest.php
index d962b631c10..b4c62eacd7a 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/NotificationProviderManagerTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/NotificationProviderManagerTest.php
@@ -1,8 +1,11 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2019, Thomas Citharel
+ * @copyright Copyright (c) 2019, Georg Ehrke
*
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -31,8 +34,8 @@ use Test\TestCase;
class NotificationProviderManagerTest extends TestCase {
- /** @var NotificationProviderManager|\PHPUnit\Framework\MockObject\MockObject */
- private $providerManager;
+ /** @var NotificationProviderManager|\PHPUnit\Framework\MockObject\MockObject */
+ private $providerManager;
/**
* @throws \OCP\AppFramework\QueryException
@@ -40,9 +43,9 @@ class NotificationProviderManagerTest extends TestCase {
public function setUp() {
parent::setUp();
- $this->providerManager = new NotificationProviderManager();
- $this->providerManager->registerProvider(EmailProvider::class);
- }
+ $this->providerManager = new NotificationProviderManager();
+ $this->providerManager->registerProvider(EmailProvider::class);
+ }
/**
* @expectedException OCA\DAV\CalDAV\Reminder\NotificationTypeDoesNotExistException
@@ -50,10 +53,9 @@ class NotificationProviderManagerTest extends TestCase {
* @throws ProviderNotAvailableException
* @throws NotificationTypeDoesNotExistException
*/
- public function testGetProviderForUnknownType(): void
- {
- $this->providerManager->getProvider('NOT EXISTENT');
- }
+ public function testGetProviderForUnknownType(): void{
+ $this->providerManager->getProvider('NOT EXISTENT');
+ }
/**
* @expectedException OCA\DAV\CalDAV\Reminder\NotificationProvider\ProviderNotAvailableException
@@ -61,28 +63,16 @@ class NotificationProviderManagerTest extends TestCase {
* @throws NotificationTypeDoesNotExistException
* @throws ProviderNotAvailableException
*/
- public function testGetProviderForUnRegisteredType(): void
- {
- $this->providerManager->getProvider('AUDIO');
- }
+ public function testGetProviderForUnRegisteredType(): void{
+ $this->providerManager->getProvider('AUDIO');
+ }
- /**
- * @throws NotificationTypeDoesNotExistException
- * @throws ProviderNotAvailableException
- */
- public function testGetProvider(): void
- {
- $provider = $this->providerManager->getProvider('EMAIL');
- $this->assertInstanceOf(EmailProvider::class, $provider);
- }
+ public function testGetProvider(): void{
+ $provider = $this->providerManager->getProvider('EMAIL');
+ $this->assertInstanceOf(EmailProvider::class, $provider);
+ }
- /**
- * @throws NotificationTypeDoesNotExistException
- * @throws ProviderNotAvailableException
- * @throws \OCP\AppFramework\QueryException
- */
- public function testRegisterProvider(): void
- {
+ public function testRegisterProvider(): void{
$this->providerManager->registerProvider(PushProvider::class);
$provider = $this->providerManager->getProvider('DISPLAY');
$this->assertInstanceOf(PushProvider::class, $provider);
@@ -93,8 +83,12 @@ class NotificationProviderManagerTest extends TestCase {
* @expectedException \InvalidArgumentException
* @throws \OCP\AppFramework\QueryException
*/
- public function testRegisterBadProvider(): void
- {
+ public function testRegisterBadProvider(): void{
$this->providerManager->registerProvider(Capabilities::class);
}
+
+ public function testHasProvider(): void {
+ $this->assertTrue($this->providerManager->hasProvider('EMAIL'));
+ $this->assertFalse($this->providerManager->hasProvider('EMAIL123'));
+ }
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php b/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php
index b9695b33fdc..8d38617ad2a 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/NotifierTest.php
@@ -1,8 +1,11 @@
<?php
+declare(strict_types=1);
/**
- * @copyright Copyright (c) 2019 Thomas Citharel <tcit@tcit.fr>
+ * @copyright Copyright (c) 2019, Thomas Citharel
+ * @copyright Copyright (c) 2019, Georg Ehrke
*
* @author Thomas Citharel <tcit@tcit.fr>
+ * @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@@ -24,6 +27,7 @@ namespace OCA\DAV\Tests\unit\CalDAV\Reminder;
use OCA\DAV\AppInfo\Application;
use OCA\DAV\CalDAV\Reminder\Notifier;
+use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\L10N\IFactory;
@@ -36,22 +40,33 @@ class NotifierTest extends TestCase {
/** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
protected $factory;
+
/** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
protected $urlGenerator;
+
/** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- protected $l;
+ protected $l10n;
+
+ /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
+ protected $timeFactory;
protected function setUp() {
parent::setUp();
$this->urlGenerator = $this->createMock(IURLGenerator::class);
- $this->l = $this->createMock(IL10N::class);
- $this->l->expects($this->any())
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->l10n->expects($this->any())
->method('t')
->willReturnCallback(function($string, $args) {
return vsprintf($string, $args);
});
- $this->l->expects($this->any())
+ $this->l10n->expects($this->any())
+ ->method('l')
+ ->willReturnCallback(function($string, $args) {
+ /** \DateTime $args */
+ return $args->format(\DateTime::ATOM);
+ });
+ $this->l10n->expects($this->any())
->method('n')
->willReturnCallback(function($textSingular, $textPlural, $count, $args) {
$text = $count === 1 ? $textSingular : $textPlural;
@@ -61,14 +76,28 @@ class NotifierTest extends TestCase {
$this->factory = $this->createMock(IFactory::class);
$this->factory->expects($this->any())
->method('get')
- ->willReturn($this->l);
+ ->willReturn($this->l10n);
+
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
+ $this->timeFactory
+ ->method('getDateTime')
+ ->willReturn(\DateTime::createFromFormat(\DateTime::ATOM, '2005-08-15T14:00:00+02:00'));
$this->notifier = new Notifier(
$this->factory,
- $this->urlGenerator
+ $this->urlGenerator,
+ $this->timeFactory
);
}
+ public function testGetId():void {
+ $this->assertEquals($this->notifier->getID(), 'dav');
+ }
+
+ public function testGetName():void {
+ $this->assertEquals($this->notifier->getName(), 'Calendar');
+ }
+
/**
* @expectedException \InvalidArgumentException
* @expectedExceptionMessage Notification not from this app
@@ -111,17 +140,24 @@ class NotifierTest extends TestCase {
[
'calendar_reminder',
[
- 'title' => 'foo',
- 'start' => time() - 60 * 60 * 24
+ 'title' => 'Title of this event',
+ 'start_atom' => '2005-08-15T15:52:01+02:00'
],
- 'foo (one day ago)',
+ 'Title of this event (in 1 hour, 52 minutes)',
[
- 'when' => 'foo',
- 'description' => 'bar',
+ 'title' => 'Title of this event',
+ 'description' => null,
'location' => 'NC Headquarters',
- 'calendar' => 'Personal'
+ 'all_day' => false,
+ 'start_atom' => '2005-08-15T15:52:01+02:00',
+ 'start_is_floating' => false,
+ 'start_timezone' => 'Europe/Berlin',
+ 'end_atom' => '2005-08-15T17:52:01+02:00',
+ 'end_is_floating' => false,
+ 'end_timezone' => 'Europe/Berlin',
+ 'calendar_displayname' => 'Personal',
],
- 'Calendar: Personal<br>Date: foo<br>Description: bar<br>Where: NC Headquarters'
+ "Calendar: Personal\r\nDate: 2005-08-15T15:52:01+02:00, 2005-08-15T15:52:01+02:00 - 2005-08-15T17:52:01+02:00 (Europe/Berlin)\r\nWhere: NC Headquarters"
],
];
}
diff --git a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
index 061c3f16e38..a9acca66a81 100644
--- a/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
+++ b/apps/dav/tests/unit/CalDAV/Reminder/ReminderServiceTest.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2019, Thomas Citharel
*
@@ -21,12 +22,15 @@
*/
namespace OCA\DAV\Tests\unit\CalDAV\Reminder;
+use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\CalDAV\Reminder\AbstractNotificationProvider;
use OCA\DAV\CalDAV\Reminder\Backend;
+use OCA\DAV\CalDAV\Reminder\INotificationProvider;
use OCA\DAV\CalDAV\Reminder\NotificationProviderManager;
use OCA\DAV\CalDAV\Reminder\NotificationProvider\EmailProvider;
use OCA\DAV\CalDAV\Reminder\NotificationProvider\PushProvider;
use OCA\DAV\CalDAV\Reminder\ReminderService;
+use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IGroup;
use OCP\IGroupManager;
use OCP\IUser;
@@ -51,6 +55,15 @@ class ReminderServiceTest extends TestCase {
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
private $userSession;
+ /** @var CalDavBackend|\PHPUnit\Framework\MockObject\MockObject */
+ private $caldavBackend;
+
+ /** @var ITimeFactory|\PHPUnit\Framework\MockObject\MockObject */
+ private $timeFactory;
+
+ /** @var ReminderService */
+ private $reminderService;
+
public const CALENDAR_DATA = <<<EOD
BEGIN:VCALENDAR
PRODID:-//Nextcloud calendar v1.6.4
@@ -68,6 +81,87 @@ BEGIN:VALARM
ACTION:EMAIL
TRIGGER:-PT15M
END:VALARM
+BEGIN:VALARM
+ACTION:DISPLAY
+TRIGGER;VALUE=DATE-TIME:20160608T000000Z
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+EOD;
+
+ public const CALENDAR_DATA_REPEAT = <<<EOD
+BEGIN:VCALENDAR
+PRODID:-//Nextcloud calendar v1.6.4
+BEGIN:VEVENT
+CREATED:20160602T133732
+DTSTAMP:20160602T133732
+LAST-MODIFIED:20160602T133732
+UID:wej2z68l9h
+SUMMARY:Test Event
+LOCATION:Somewhere ...
+DESCRIPTION:maybe ....
+DTSTART;TZID=Europe/Berlin;VALUE=DATE:20160609
+DTEND;TZID=Europe/Berlin;VALUE=DATE:20160610
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-PT15M
+REPEAT:4
+DURATION:PT2M
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+EOD;
+
+ public const CALENDAR_DATA_RECURRING = <<<EOD
+BEGIN:VCALENDAR
+PRODID:-//Nextcloud calendar v1.6.4
+BEGIN:VEVENT
+CREATED:20160602T133732
+DTSTAMP:20160602T133732
+LAST-MODIFIED:20160602T133732
+UID:wej2z68l9h
+SUMMARY:Test Event
+LOCATION:Somewhere ...
+DESCRIPTION:maybe ....
+DTSTART;TZID=Europe/Berlin;VALUE=DATE:20160609
+DTEND;TZID=Europe/Berlin;VALUE=DATE:20160610
+RRULE:FREQ=WEEKLY
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-PT15M
+END:VALARM
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-P8D
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+EOD;
+
+ public const CALENDAR_DATA_RECURRING_REPEAT = <<<EOD
+BEGIN:VCALENDAR
+PRODID:-//Nextcloud calendar v1.6.4
+BEGIN:VEVENT
+CREATED:20160602T133732
+DTSTAMP:20160602T133732
+LAST-MODIFIED:20160602T133732
+UID:wej2z68l9h
+SUMMARY:Test Event
+LOCATION:Somewhere ...
+DESCRIPTION:maybe ....
+DTSTART;TZID=Europe/Berlin;VALUE=DATE:20160609
+DTEND;TZID=Europe/Berlin;VALUE=DATE:20160610
+RRULE:FREQ=WEEKLY
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-PT15M
+REPEAT:4
+DURATION:PT2M
+END:VALARM
+BEGIN:VALARM
+ACTION:EMAIL
+TRIGGER:-P8D
+END:VALARM
END:VEVENT
END:VCALENDAR
EOD;
@@ -79,198 +173,383 @@ EOD;
$this->notificationProviderManager = $this->createMock(NotificationProviderManager::class);
$this->userManager = $this->createMock(IUserManager::class);
$this->groupManager = $this->createMock(IGroupManager::class);
- $this->userSession = $this->createMock(IUserSession::class);
- }
+ $this->caldavBackend = $this->createMock(CalDavBackend::class);
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
- public function dataTestProcessReminders(): array
- {
- return [
- [
- [], null
- ],
- [
- [
- [
- 'calendardata' => self::CALENDAR_DATA,
- 'displayname' => 'Personal',
- 'type' => 'EMAIL',
- 'uid' => 1,
- 'id' => 1,
- ],
- ],
- $this->createMock(EmailProvider::class),
- ],
- [
- [
- [
- 'calendardata' => self::CALENDAR_DATA,
- 'displayname' => 'Personal',
- 'type' => 'DISPLAY',
- 'uid' => 1,
- 'id' => 1,
- ],
- ],
- $this->createMock(PushProvider::class),
- ]
- ];
- }
+ $this->caldavBackend->method('getShares')->willReturn([]);
- /**
- * @dataProvider dataTestProcessReminders
- * @param array $reminders
- * @param AbstractNotificationProvider|null $notificationProvider
- * @throws \OCA\DAV\CalDAV\Reminder\NotificationProvider\ProviderNotAvailableException
- * @throws \OCA\DAV\CalDAV\Reminder\NotificationTypeDoesNotExistException
- * @throws \OC\User\NoUserException
- */
- public function testProcessReminders(array $reminders, ?AbstractNotificationProvider $notificationProvider): void
- {
- $user = $this->createMock(IUser::class);
-
- $this->backend->expects($this->once())->method('getRemindersToProcess')->willReturn($reminders);
- if (count($reminders) > 0) {
- $this->userManager->expects($this->exactly(count($reminders)))->method('get')->willReturn($user);
- $this->backend->expects($this->exactly(count($reminders)))->method('removeReminder');
- $this->notificationProviderManager->expects($this->exactly(count($reminders)))->method('getProvider')->willReturn($notificationProvider);
- }
-
- $reminderService = new ReminderService($this->backend, $this->notificationProviderManager, $this->userManager, $this->groupManager, $this->userSession);
- $reminderService->processReminders();
+ $this->reminderService = new ReminderService($this->backend,
+ $this->notificationProviderManager,
+ $this->userManager,
+ $this->groupManager,
+ $this->caldavBackend,
+ $this->timeFactory);
}
- /**
- * @expectedException OC\User\NoUserException
- */
- public function testProcessReminderWithBadUser(): void
- {
- $this->backend->expects($this->once())->method('getRemindersToProcess')->willReturn([
- [
- 'calendardata' => self::CALENDAR_DATA,
- 'type' => 'DISPLAY',
- 'uid' => 1,
- 'id' => 1,
- ]
- ]);
- $this->userManager->expects($this->once())->method('get')->with(1)->willReturn(null);
- $reminderService = new ReminderService($this->backend, $this->notificationProviderManager, $this->userManager, $this->groupManager, $this->userSession);
- $reminderService->processReminders();
+ public function testOnCalendarObjectDelete():void {
+ $this->backend->expects($this->once())
+ ->method('cleanRemindersForEvent')
+ ->with(44);
+
+ $action = '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject';
+ $objectData = [
+ 'id' => '44',
+ 'component' => 'vevent',
+ ];
+
+ $this->reminderService->onTouchCalendarObject($action, $objectData);
}
- public function providesTouchCalendarObject(): array
- {
- return [
- [
- '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject',
- [
- 'principaluri' => 'principals/users/personal'
- ],
- [],
- [
- 'calendarid' => 1,
- 'uri' => 'something.ics',
- ],
- 0
- ],
- [
- '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject',
- [
- 'principaluri' => 'principals/users/personal'
- ],
- [],
- [
- 'calendarid' => 1,
- 'uri' => 'something.ics',
- 'calendardata' => self::CALENDAR_DATA
- ],
- 0
- ],
- [
- '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject',
- [
- 'principaluri' => 'principals/users/someone',
- 'uri' => 'personal'
- ],
+ public function testOnCalendarObjectCreateSingleEntry():void {
+ $action = '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject';
+ $objectData = [
+ 'calendardata' => self::CALENDAR_DATA,
+ 'id' => '42',
+ 'calendarid' => '1337',
+ 'component' => 'vevent',
+ ];
+
+ $this->backend->expects($this->exactly(2))
+ ->method('insertReminder')
+ ->withConsecutive(
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', 'de919af7429d3b5c11e8b9d289b411a6', 'EMAIL', true, 1465429500, false],
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', '35b3eae8e792aa2209f0b4e1a302f105', 'DISPLAY', false, 1465344000, false]
+ )
+ ->willReturn(1);
+
+ $this->timeFactory->expects($this->once())
+ ->method('getDateTime')
+ ->with()
+ ->willReturn(\DateTime::createFromFormat(\DateTime::ATOM, '2016-06-08T00:00:00+00:00'));
+
+ $this->reminderService->onTouchCalendarObject($action, $objectData);
+ }
+
+ public function testOnCalendarObjectCreateSingleEntryWithRepeat(): void {
+ $action = '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject';
+ $objectData = [
+ 'calendardata' => self::CALENDAR_DATA_REPEAT,
+ 'id' => '42',
+ 'calendarid' => '1337',
+ 'component' => 'vevent',
+ ];
+
+ $this->backend->expects($this->exactly(5))
+ ->method('insertReminder')
+ ->withConsecutive(
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1465429500, false],
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1465429620, true],
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1465429740, true],
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1465429860, true],
+ [1337, 42, 'wej2z68l9h', false, 1465430400, false, '5c70531aab15c92b52518ae10a2f78a4', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1465429980, true]
+ )
+ ->willReturn(1);
+
+ $this->timeFactory->expects($this->once())
+ ->method('getDateTime')
+ ->with()
+ ->willReturn(\DateTime::createFromFormat(\DateTime::ATOM, '2016-06-08T00:00:00+00:00'));
+
+ $this->reminderService->onTouchCalendarObject($action, $objectData);
+ }
+
+ public function testOnCalendarObjectCreateRecurringEntry(): void {
+ $action = '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject';
+ $objectData = [
+ 'calendardata' => self::CALENDAR_DATA_RECURRING,
+ 'id' => '42',
+ 'calendarid' => '1337',
+ 'component' => 'vevent',
+ ];
+
+ $this->backend->expects($this->exactly(2))
+ ->method('insertReminder')
+ ->withConsecutive(
+ [1337, 42, 'wej2z68l9h', true, 1467244800, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'de919af7429d3b5c11e8b9d289b411a6', 'EMAIL', true, 1467243900, false],
+ [1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', '8996992118817f9f311ac5cc56d1cc97', 'EMAIL', true, 1467158400, false]
+ )
+ ->willReturn(1);
+
+ $this->timeFactory->expects($this->once())
+ ->method('getDateTime')
+ ->with()
+ ->willReturn(\DateTime::createFromFormat(\DateTime::ATOM, '2016-06-29T00:00:00+00:00'));
+
+ $this->reminderService->onTouchCalendarObject($action, $objectData);
+ }
+
+ public function testOnCalendarObjectCreateRecurringEntryWithRepeat():void {
+ $action = '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject';
+ $objectData = [
+ 'calendardata' => self::CALENDAR_DATA_RECURRING_REPEAT,
+ 'id' => '42',
+ 'calendarid' => '1337',
+ 'component' => 'vevent',
+ ];
+
+ $this->backend->expects($this->exactly(6))
+ ->method('insertReminder')
+ ->withConsecutive(
+ [1337, 42, 'wej2z68l9h', true, 1467244800, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467243900, false],
+ [1337, 42, 'wej2z68l9h', true, 1467244800, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467244020, true],
+ [1337, 42, 'wej2z68l9h', true, 1467244800, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467244140, true],
+ [1337, 42, 'wej2z68l9h', true, 1467244800, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467244260, true],
+ [1337, 42, 'wej2z68l9h', true, 1467244800, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467244380, true],
+ [1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', '8996992118817f9f311ac5cc56d1cc97', 'EMAIL', true, 1467158400, false]
+ )
+ ->willReturn(1);
+
+ $this->timeFactory->expects($this->once())
+ ->method('getDateTime')
+ ->with()
+ ->willReturn(\DateTime::createFromFormat(\DateTime::ATOM, '2016-06-29T00:00:00+00:00'));
+
+ $this->reminderService->onTouchCalendarObject($action, $objectData);
+ }
+
+ public function testProcessReminders():void {
+ $this->backend->expects($this->at(0))
+ ->method('getRemindersToProcess')
+ ->with()
+ ->willReturn([
[
- [
- '{http://owncloud.org/ns}principal' => 'principals/users/someone'
- ]
+ 'id' => 1,
+ 'calendar_id' => 1337,
+ 'object_id' => 42,
+ 'uid' => 'wej2z68l9h',
+ 'is_recurring' => false,
+ 'recurrence_id' => 1465430400,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => '5c70531aab15c92b52518ae10a2f78a4',
+ 'alarm_hash' => 'de919af7429d3b5c11e8b9d289b411a6',
+ 'type' => 'EMAIL',
+ 'is_relative' => true,
+ 'notification_date' => 1465429500,
+ 'is_repeat_based' => false,
+ 'calendardata' => self::CALENDAR_DATA,
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
],
[
- 'calendarid' => 1,
- 'uri' => 'something.ics',
- 'calendardata' => self::CALENDAR_DATA
+ 'id' => 2,
+ 'calendar_id' => 1337,
+ 'object_id' => 42,
+ 'uid' => 'wej2z68l9h',
+ 'is_recurring' => false,
+ 'recurrence_id' => 1465430400,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => '5c70531aab15c92b52518ae10a2f78a4',
+ 'alarm_hash' => 'ecacbf07d413c3c78d1ac7ad8c469602',
+ 'type' => 'EMAIL',
+ 'is_relative' => true,
+ 'notification_date' => 1465429740,
+ 'is_repeat_based' => true,
+ 'calendardata' => self::CALENDAR_DATA_REPEAT,
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
],
- 0
- ],
- [
- '\OCA\DAV\CalDAV\CalDavBackend::createCalendarObject',
[
- 'principaluri' => 'principals/users/someone',
- 'uri' => 'personal'
+ 'id' => 3,
+ 'calendar_id' => 1337,
+ 'object_id' => 42,
+ 'uid' => 'wej2z68l9h',
+ 'is_recurring' => false,
+ 'recurrence_id' => 1465430400,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => '5c70531aab15c92b52518ae10a2f78a4',
+ 'alarm_hash' => '35b3eae8e792aa2209f0b4e1a302f105',
+ 'type' => 'DISPLAY',
+ 'is_relative' => false,
+ 'notification_date' => 1465344000,
+ 'is_repeat_based' => false,
+ 'calendardata' => self::CALENDAR_DATA,
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
],
[
- [
- '{http://owncloud.org/ns}principal' => 'principals/groups/somegroup'
- ]
+ 'id' => 4,
+ 'calendar_id' => 1337,
+ 'object_id' => 42,
+ 'uid' => 'wej2z68l9h',
+ 'is_recurring' => true,
+ 'recurrence_id' => 1467244800,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => 'fbdb2726bc0f7dfacac1d881c1453e20',
+ 'alarm_hash' => 'ecacbf07d413c3c78d1ac7ad8c469602',
+ 'type' => 'EMAIL',
+ 'is_relative' => true,
+ 'notification_date' => 1467243900,
+ 'is_repeat_based' => false,
+ 'calendardata' => self::CALENDAR_DATA_RECURRING_REPEAT,
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
],
[
- 'calendarid' => 1,
- 'uri' => 'something.ics',
- 'calendardata' => self::CALENDAR_DATA
- ],
- 1
- ]
- ];
- }
+ 'id' => 5,
+ 'calendar_id' => 1337,
+ 'object_id' => 42,
+ 'uid' => 'wej2z68l9h',
+ 'is_recurring' => true,
+ 'recurrence_id' => 1467849600,
+ 'is_recurrence_exception' => false,
+ 'event_hash' => 'fbdb2726bc0f7dfacac1d881c1453e20',
+ 'alarm_hash' => '8996992118817f9f311ac5cc56d1cc97',
+ 'type' => 'EMAIL',
+ 'is_relative' => true,
+ 'notification_date' => 1467158400,
+ 'is_repeat_based' => false,
+ 'calendardata' => self::CALENDAR_DATA_RECURRING,
+ 'displayname' => 'Displayname 123',
+ 'principaluri' => 'principals/users/user001',
+ ]
+ ]);
- /**
- * @dataProvider providesTouchCalendarObject
- * @param string $action
- * @param array $calendarData
- * @param array $shares
- * @param array $objectData
- * @param int $numberOfGroups
- * @throws \OC\User\NoUserException
- * @throws \Sabre\VObject\InvalidDataException
- */
- public function testOnTouchCalendarObject(string $action, array $calendarData, array $shares, array $objectData, int $numberOfGroups): void
- {
- $this->backend->expects($this->once())->method('cleanRemindersForEvent')->with($objectData['calendarid'], $objectData['uri']);
-
- if ($action !== '\OCA\DAV\CalDAV\CalDavBackend::deleteCalendarObject') {
- $user = $this->createMock(IUser::class);
- $user->expects($this->once())->method('getUID')->willReturn('user');
-
- $this->userSession->expects($this->once())->method('getUser')->willReturn($user);
- if ($numberOfGroups === 0) {
- $this->backend->expects($this->exactly(count($shares) + 1))->method('insertReminder');
- } else {
- $group = $this->createMock(IGroup::class);
- $groupUser = $this->createMock(IUser::class);
- $groupUser->expects($this->once())->method('getUID')->willReturn('groupuser');
- $group->expects($this->once())->method('getUsers')->willReturn([$groupUser]);
- $this->groupManager->expects($this->exactly($numberOfGroups))->method('get')->willReturn($group);
- }
- }
- $reminderService = new ReminderService($this->backend, $this->notificationProviderManager, $this->userManager, $this->groupManager, $this->userSession);
- $reminderService->onTouchCalendarObject($action, $calendarData, $shares, $objectData);
- }
+ $this->notificationProviderManager->expects($this->at(0))
+ ->method('hasProvider')
+ ->with('EMAIL')
+ ->willReturn(true);
- /**
- * @expectedException OC\User\NoUserException
- */
- public function testOnTouchCalendarObjectWithNoSession(): void
- {
- $this->backend->expects($this->once())->method('cleanRemindersForEvent');
- $this->userSession->expects($this->once())->method('getUser')->willReturn(null);
+ $provider1 = $this->createMock(INotificationProvider::class);
+ $this->notificationProviderManager->expects($this->at(1))
+ ->method('getProvider')
+ ->with('EMAIL')
+ ->willReturn($provider1);
- $reminderService = new ReminderService($this->backend, $this->notificationProviderManager, $this->userManager, $this->groupManager, $this->userSession);
- $reminderService->onTouchCalendarObject('', ['principaluri' => 'foo'], [], ['calendarid' => 1, 'uri' => 'bar']);
- }
+ $this->notificationProviderManager->expects($this->at(2))
+ ->method('hasProvider')
+ ->with('EMAIL')
+ ->willReturn(true);
+
+ $provider2 = $this->createMock(INotificationProvider::class);
+ $this->notificationProviderManager->expects($this->at(3))
+ ->method('getProvider')
+ ->with('EMAIL')
+ ->willReturn($provider2);
+
+ $this->notificationProviderManager->expects($this->at(4))
+ ->method('hasProvider')
+ ->with('DISPLAY')
+ ->willReturn(true);
+
+ $provider3 = $this->createMock(INotificationProvider::class);
+ $this->notificationProviderManager->expects($this->at(5))
+ ->method('getProvider')
+ ->with('DISPLAY')
+ ->willReturn($provider3);
+
+ $this->notificationProviderManager->expects($this->at(6))
+ ->method('hasProvider')
+ ->with('EMAIL')
+ ->willReturn(true);
+
+ $provider4 = $this->createMock(INotificationProvider::class);
+ $this->notificationProviderManager->expects($this->at(7))
+ ->method('getProvider')
+ ->with('EMAIL')
+ ->willReturn($provider4);
+
+ $this->notificationProviderManager->expects($this->at(8))
+ ->method('hasProvider')
+ ->with('EMAIL')
+ ->willReturn(true);
+
+ $provider5 = $this->createMock(INotificationProvider::class);
+ $this->notificationProviderManager->expects($this->at(9))
+ ->method('getProvider')
+ ->with('EMAIL')
+ ->willReturn($provider5);
+
+ $user = $this->createMock(IUser::class);
+ $this->userManager->expects($this->exactly(5))
+ ->method('get')
+ ->with('user001')
+ ->willReturn($user);
+
+ $provider1->expects($this->once())
+ ->method('send')
+ ->with($this->callback(function($vevent) {
+ if ($vevent->DTSTART->getDateTime()->format(\DateTime::ATOM) !== '2016-06-09T00:00:00+00:00') {
+ return false;
+ }
+ return true;
+ }, 'Displayname 123', $user));
+ $provider2->expects($this->once())
+ ->method('send')
+ ->with($this->callback(function($vevent) {
+ if ($vevent->DTSTART->getDateTime()->format(\DateTime::ATOM) !== '2016-06-09T00:00:00+00:00') {
+ return false;
+ }
+ return true;
+ }, 'Displayname 123', $user));
+ $provider3->expects($this->once())
+ ->method('send')
+ ->with($this->callback(function($vevent) {
+ if ($vevent->DTSTART->getDateTime()->format(\DateTime::ATOM) !== '2016-06-09T00:00:00+00:00') {
+ return false;
+ }
+ return true;
+ }, 'Displayname 123', $user));
+ $provider4->expects($this->once())
+ ->method('send')
+ ->with($this->callback(function($vevent) {
+ if ($vevent->DTSTART->getDateTime()->format(\DateTime::ATOM) !== '2016-06-30T00:00:00+00:00') {
+ return false;
+ }
+ return true;
+ }, 'Displayname 123', $user));
+ $provider5->expects($this->once())
+ ->method('send')
+ ->with($this->callback(function($vevent) {
+ if ($vevent->DTSTART->getDateTime()->format(\DateTime::ATOM) !== '2016-07-07T00:00:00+00:00') {
+ return false;
+ }
+ return true;
+ }, 'Displayname 123', $user));
+
+ $this->backend->expects($this->at(1))
+ ->method('removeReminder')
+ ->with(1);
+ $this->backend->expects($this->at(2))
+ ->method('removeReminder')
+ ->with(2);
+ $this->backend->expects($this->at(3))
+ ->method('removeReminder')
+ ->with(3);
+ $this->backend->expects($this->at(4))
+ ->method('removeReminder')
+ ->with(4);
+ $this->backend->expects($this->at(5))
+ ->method('insertReminder')
+ ->with(1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467848700, false)
+ ->willReturn(99);
+
+ $this->backend->expects($this->at(6))
+ ->method('insertReminder')
+ ->with(1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467848820, true)
+ ->willReturn(99);
+ $this->backend->expects($this->at(7))
+ ->method('insertReminder')
+ ->with(1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467848940, true)
+ ->willReturn(99);
+ $this->backend->expects($this->at(8))
+ ->method('insertReminder')
+ ->with(1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467849060, true)
+ ->willReturn(99);
+ $this->backend->expects($this->at(9))
+ ->method('insertReminder')
+ ->with(1337, 42, 'wej2z68l9h', true, 1467849600, false, 'fbdb2726bc0f7dfacac1d881c1453e20', 'ecacbf07d413c3c78d1ac7ad8c469602', 'EMAIL', true, 1467849180, true)
+ ->willReturn(99);
+ $this->backend->expects($this->at(10))
+ ->method('removeReminder')
+ ->with(5);
+ $this->backend->expects($this->at(11))
+ ->method('insertReminder')
+ ->with(1337, 42, 'wej2z68l9h', true, 1468454400, false, 'fbdb2726bc0f7dfacac1d881c1453e20', '8996992118817f9f311ac5cc56d1cc97', 'EMAIL', true, 1467763200, false)
+ ->willReturn(99);
+
+ $this->timeFactory->method('getDateTime')
+ ->willReturn(\DateTime::createFromFormat(\DateTime::ATOM, '2016-06-08T00:00:00+00:00'));
- public function testOnTouchCalendarObjectWithNoCalendarURI(): void
- {
- $reminderService = new ReminderService($this->backend, $this->notificationProviderManager, $this->userManager, $this->groupManager, $this->userSession);
- $this->assertNull($reminderService->onTouchCalendarObject('', [], [], []));
+ $this->reminderService->processReminders();
}
}