Merge pull request #18699 from owncloud/notification-manager
Notification managerremotes/origin/db-empty-migrate
commit
fb717f254f
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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\Files_Sharing;
|
||||
|
||||
|
||||
use OC\Notification\INotification;
|
||||
use OC\Notification\INotifier;
|
||||
|
||||
class Notifier implements INotifier {
|
||||
/** @var \OCP\L10N\IFactory */
|
||||
protected $factory;
|
||||
|
||||
/**
|
||||
* @param \OCP\L10N\IFactory $factory
|
||||
*/
|
||||
public function __construct(\OCP\L10N\IFactory $factory) {
|
||||
$this->factory = $factory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @param string $languageCode The code of the language that should be used to prepare the notification
|
||||
* @return INotification
|
||||
*/
|
||||
public function prepare(INotification $notification, $languageCode) {
|
||||
if ($notification->getApp() !== 'files_sharing') {
|
||||
// Not my app => throw
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
|
||||
// Read the language from the notification
|
||||
$l = $this->factory->get('files_sharing', $languageCode);
|
||||
|
||||
switch ($notification->getSubject()) {
|
||||
// Deal with known subjects
|
||||
case 'remote_share':
|
||||
$params = $notification->getSubjectParameters();
|
||||
$notification->setParsedSubject(
|
||||
(string) $l->t('You received %s as a remote share from %s', $params)
|
||||
);
|
||||
|
||||
// Deal with the actions for a known subject
|
||||
foreach ($notification->getActions() as $action) {
|
||||
switch ($action->getLabel()) {
|
||||
case 'accept':
|
||||
$action->setParsedLabel(
|
||||
(string) $l->t('Accept')
|
||||
);
|
||||
break;
|
||||
|
||||
case 'decline':
|
||||
$action->setParsedLabel(
|
||||
(string) $l->t('Decline')
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
$notification->addParsedAction($action);
|
||||
}
|
||||
return $notification;
|
||||
|
||||
default:
|
||||
// Unknown subject => Unknown notification => throw
|
||||
throw new \InvalidArgumentException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,167 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
|
||||
class Action implements IAction {
|
||||
|
||||
/** @var string */
|
||||
protected $label;
|
||||
|
||||
/** @var string */
|
||||
protected $labelParsed;
|
||||
|
||||
/** @var string */
|
||||
protected $link;
|
||||
|
||||
/** @var string */
|
||||
protected $requestType;
|
||||
|
||||
/** @var string */
|
||||
protected $icon;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->label = '';
|
||||
$this->labelParsed = '';
|
||||
$this->link = '';
|
||||
$this->requestType = '';
|
||||
$this->icon = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $label
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the label is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setLabel($label) {
|
||||
if (!is_string($label) || $label === '' || isset($label[32])) {
|
||||
throw new \InvalidArgumentException('The given label is invalid');
|
||||
}
|
||||
$this->label = $label;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getLabel() {
|
||||
return $this->label;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $label
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the label is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setParsedLabel($label) {
|
||||
if (!is_string($label) || $label === '') {
|
||||
throw new \InvalidArgumentException('The given parsed label is invalid');
|
||||
}
|
||||
$this->labelParsed = $label;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedLabel() {
|
||||
return $this->labelParsed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
* @param string $requestType
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the link is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setLink($link, $requestType) {
|
||||
if (!is_string($link) || $link === '' || isset($link[256])) {
|
||||
throw new \InvalidArgumentException('The given link is invalid');
|
||||
}
|
||||
if (!in_array($requestType, ['GET', 'POST', 'PUT', 'DELETE'], true)) {
|
||||
throw new \InvalidArgumentException('The given request type is invalid');
|
||||
}
|
||||
$this->link = $link;
|
||||
$this->requestType = $requestType;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getLink() {
|
||||
return $this->link;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getRequestType() {
|
||||
return $this->requestType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $icon
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the icon is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setIcon($icon) {
|
||||
if (!is_string($icon) || $icon === '' || isset($icon[64])) {
|
||||
throw new \InvalidArgumentException('The given icon is invalid');
|
||||
}
|
||||
$this->icon = $icon;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getIcon() {
|
||||
return $this->icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isValid() {
|
||||
return $this->label !== '' && $this->link !== '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isValidParsed() {
|
||||
return $this->labelParsed !== '' && $this->link !== '';
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
/**
|
||||
* Interface IAction
|
||||
*
|
||||
* @package OC\Notification
|
||||
* @since 8.2.0
|
||||
*
|
||||
* DEVELOPER NOTE:
|
||||
* The notification api is experimental only in 8.2.0! Do not start using it,
|
||||
* if you can not prepare an update for the next version afterwards.
|
||||
*/
|
||||
interface IAction {
|
||||
/**
|
||||
* @param string $label
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the label is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setLabel($label);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getLabel();
|
||||
|
||||
/**
|
||||
* @param string $label
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the label is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setParsedLabel($label);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedLabel();
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
* @param string $requestType
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the link is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setLink($link, $requestType);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getLink();
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getRequestType();
|
||||
|
||||
/**
|
||||
* @param string $icon
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the icon is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setIcon($icon);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getIcon();
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function isValid();
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function isValidParsed();
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
/**
|
||||
* Interface IApp
|
||||
*
|
||||
* @package OC\Notification
|
||||
* @since 8.2.0
|
||||
*
|
||||
* DEVELOPER NOTE:
|
||||
* The notification api is experimental only in 8.2.0! Do not start using it,
|
||||
* if you can not prepare an update for the next version afterwards.
|
||||
*/
|
||||
interface IApp {
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @return null
|
||||
* @throws \InvalidArgumentException When the notification is not valid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function notify(INotification $notification);
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @return null
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function markProcessed(INotification $notification);
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @return int
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getCount(INotification $notification);
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
/**
|
||||
* Interface IManager
|
||||
*
|
||||
* @package OC\Notification
|
||||
* @since 8.2.0
|
||||
*
|
||||
* DEVELOPER NOTE:
|
||||
* The notification api is experimental only in 8.2.0! Do not start using it,
|
||||
* if you can not prepare an update for the next version afterwards.
|
||||
*/
|
||||
interface IManager extends IApp, INotifier {
|
||||
/**
|
||||
* @param \Closure $service The service must implement IApp, otherwise a
|
||||
* \InvalidArgumentException is thrown later
|
||||
* @return null
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function registerApp(\Closure $service);
|
||||
|
||||
/**
|
||||
* @param \Closure $service The service must implement INotifier, otherwise a
|
||||
* \InvalidArgumentException is thrown later
|
||||
* @return null
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function registerNotifier(\Closure $service);
|
||||
|
||||
/**
|
||||
* @return INotification
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function createNotification();
|
||||
}
|
||||
@ -0,0 +1,241 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
/**
|
||||
* Interface INotification
|
||||
*
|
||||
* @package OC\Notification
|
||||
* @since 8.2.0
|
||||
*
|
||||
* DEVELOPER NOTE:
|
||||
* The notification api is experimental only in 8.2.0! Do not start using it,
|
||||
* if you can not prepare an update for the next version afterwards.
|
||||
*/
|
||||
interface INotification {
|
||||
/**
|
||||
* @param string $app
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the app id are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setApp($app);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getApp();
|
||||
|
||||
/**
|
||||
* @param string $user
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the user id are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setUser($user);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getUser();
|
||||
|
||||
/**
|
||||
* @param int $timestamp
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the timestamp are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setTimestamp($timestamp);
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getTimestamp();
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param int $id
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the object type or id are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setObject($type, $id);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getObjectType();
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getObjectId();
|
||||
|
||||
/**
|
||||
* @param string $subject
|
||||
* @param array $parameters
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the subject or parameters are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setSubject($subject, array $parameters = []);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getSubject();
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getSubjectParameters();
|
||||
|
||||
/**
|
||||
* @param string $subject
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the subject are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setParsedSubject($subject);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedSubject();
|
||||
|
||||
/**
|
||||
* @param string $message
|
||||
* @param array $parameters
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the message or parameters are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setMessage($message, array $parameters = []);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getMessage();
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getMessageParameters();
|
||||
|
||||
/**
|
||||
* @param string $message
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the message are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setParsedMessage($message);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedMessage();
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the link are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setLink($link);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getLink();
|
||||
|
||||
/**
|
||||
* @param string $icon
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the icon are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setIcon($icon);
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getIcon();
|
||||
|
||||
/**
|
||||
* @return IAction
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function createAction();
|
||||
|
||||
/**
|
||||
* @param IAction $action
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the action are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function addAction(IAction $action);
|
||||
|
||||
/**
|
||||
* @return IAction[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getActions();
|
||||
|
||||
/**
|
||||
* @param IAction $action
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the action are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function addParsedAction(IAction $action);
|
||||
|
||||
/**
|
||||
* @return IAction[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedActions();
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function isValid();
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function isValidParsed();
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
/**
|
||||
* Interface INotifier
|
||||
*
|
||||
* @package OC\Notification
|
||||
* @since 8.2.0
|
||||
*
|
||||
* DEVELOPER NOTE:
|
||||
* The notification api is experimental only in 8.2.0! Do not start using it,
|
||||
* if you can not prepare an update for the next version afterwards.
|
||||
*/
|
||||
interface INotifier {
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @param string $languageCode The code of the language that should be used to prepare the notification
|
||||
* @return INotification
|
||||
* @throws \InvalidArgumentException When the notification was not prepared by a notifier
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function prepare(INotification $notification, $languageCode);
|
||||
}
|
||||
@ -0,0 +1,191 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
|
||||
class Manager implements IManager {
|
||||
/** @var IApp */
|
||||
protected $apps;
|
||||
|
||||
/** @var INotifier */
|
||||
protected $notifiers;
|
||||
|
||||
/** @var \Closure */
|
||||
protected $appsClosures;
|
||||
|
||||
/** @var \Closure */
|
||||
protected $notifiersClosures;
|
||||
|
||||
public function __construct() {
|
||||
$this->apps = [];
|
||||
$this->notifiers = [];
|
||||
$this->appsClosures = [];
|
||||
$this->notifiersClosures = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Closure $service The service must implement IApp, otherwise a
|
||||
* \InvalidArgumentException is thrown later
|
||||
* @return null
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function registerApp(\Closure $service) {
|
||||
$this->appsClosures[] = $service;
|
||||
$this->apps = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Closure $service The service must implement INotifier, otherwise a
|
||||
* \InvalidArgumentException is thrown later
|
||||
* @return null
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function registerNotifier(\Closure $service) {
|
||||
$this->notifiersClosures[] = $service;
|
||||
$this->notifiers = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IApp[]
|
||||
*/
|
||||
protected function getApps() {
|
||||
if (!empty($this->apps)) {
|
||||
return $this->apps;
|
||||
}
|
||||
|
||||
$this->apps = [];
|
||||
foreach ($this->appsClosures as $closure) {
|
||||
$app = $closure();
|
||||
if (!($app instanceof IApp)) {
|
||||
throw new \InvalidArgumentException('The given notification app does not implement the IApp interface');
|
||||
}
|
||||
$this->apps[] = $app;
|
||||
}
|
||||
|
||||
return $this->apps;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return INotifier[]
|
||||
*/
|
||||
protected function getNotifiers() {
|
||||
if (!empty($this->notifiers)) {
|
||||
return $this->notifiers;
|
||||
}
|
||||
|
||||
$this->notifiers = [];
|
||||
foreach ($this->notifiersClosures as $closure) {
|
||||
$notifier = $closure();
|
||||
if (!($notifier instanceof INotifier)) {
|
||||
throw new \InvalidArgumentException('The given notification app does not implement the INotifier interface');
|
||||
}
|
||||
$this->notifiers[] = $notifier;
|
||||
}
|
||||
|
||||
return $this->notifiers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return INotification
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function createNotification() {
|
||||
return new Notification();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @return null
|
||||
* @throws \InvalidArgumentException When the notification is not valid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function notify(INotification $notification) {
|
||||
if (!$notification->isValid()) {
|
||||
throw new \InvalidArgumentException('The given notification is invalid');
|
||||
}
|
||||
|
||||
$apps = $this->getApps();
|
||||
|
||||
foreach ($apps as $app) {
|
||||
try {
|
||||
$app->notify($notification);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @param string $languageCode The code of the language that should be used to prepare the notification
|
||||
* @return INotification
|
||||
* @throws \InvalidArgumentException When the notification was not prepared by a notifier
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function prepare(INotification $notification, $languageCode) {
|
||||
$notifiers = $this->getNotifiers();
|
||||
|
||||
foreach ($notifiers as $notifier) {
|
||||
try {
|
||||
$notification = $notifier->prepare($notification, $languageCode);
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!($notification instanceof INotification) || !$notification->isValidParsed()) {
|
||||
throw new \InvalidArgumentException('The given notification has not been handled');
|
||||
}
|
||||
}
|
||||
|
||||
if (!($notification instanceof INotification) || !$notification->isValidParsed()) {
|
||||
throw new \InvalidArgumentException('The given notification has not been handled');
|
||||
}
|
||||
|
||||
return $notification;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @return null
|
||||
*/
|
||||
public function markProcessed(INotification $notification) {
|
||||
$apps = $this->getApps();
|
||||
|
||||
foreach ($apps as $app) {
|
||||
$app->markProcessed($notification);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param INotification $notification
|
||||
* @return int
|
||||
*/
|
||||
public function getCount(INotification $notification) {
|
||||
$apps = $this->getApps();
|
||||
|
||||
$count = 0;
|
||||
foreach ($apps as $app) {
|
||||
$count += $app->getCount($notification);
|
||||
}
|
||||
|
||||
return $count;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,446 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 OC\Notification;
|
||||
|
||||
|
||||
class Notification implements INotification {
|
||||
/** @var string */
|
||||
protected $app;
|
||||
|
||||
/** @var string */
|
||||
protected $user;
|
||||
|
||||
/** @var int */
|
||||
protected $timestamp;
|
||||
|
||||
/** @var string */
|
||||
protected $objectType;
|
||||
|
||||
/** @var int */
|
||||
protected $objectId;
|
||||
|
||||
/** @var string */
|
||||
protected $subject;
|
||||
|
||||
/** @var array */
|
||||
protected $subjectParameters;
|
||||
|
||||
/** @var string */
|
||||
protected $subjectParsed;
|
||||
|
||||
/** @var string */
|
||||
protected $message;
|
||||
|
||||
/** @var array */
|
||||
protected $messageParameters;
|
||||
|
||||
/** @var string */
|
||||
protected $messageParsed;
|
||||
|
||||
/** @var string */
|
||||
protected $link;
|
||||
|
||||
/** @var string */
|
||||
protected $icon;
|
||||
|
||||
/** @var array */
|
||||
protected $actions;
|
||||
|
||||
/** @var array */
|
||||
protected $actionsParsed;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct() {
|
||||
$this->app = '';
|
||||
$this->user = '';
|
||||
$this->timestamp = 0;
|
||||
$this->objectType = '';
|
||||
$this->objectId = 0;
|
||||
$this->subject = '';
|
||||
$this->subjectParameters = [];
|
||||
$this->subjectParsed = '';
|
||||
$this->message = '';
|
||||
$this->messageParameters = [];
|
||||
$this->messageParsed = '';
|
||||
$this->link = '';
|
||||
$this->icon = '';
|
||||
$this->actions = [];
|
||||
$this->actionsParsed = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $app
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the app id is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setApp($app) {
|
||||
if (!is_string($app) || $app === '' || isset($app[32])) {
|
||||
throw new \InvalidArgumentException('The given app name is invalid');
|
||||
}
|
||||
$this->app = $app;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getApp() {
|
||||
return $this->app;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $user
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the user id is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setUser($user) {
|
||||
if (!is_string($user) || $user === '' || isset($user[64])) {
|
||||
throw new \InvalidArgumentException('The given user id is invalid');
|
||||
}
|
||||
$this->user = $user;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getUser() {
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $timestamp
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the timestamp is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setTimestamp($timestamp) {
|
||||
if (!is_int($timestamp)) {
|
||||
throw new \InvalidArgumentException('The given timestamp is invalid');
|
||||
}
|
||||
$this->timestamp = $timestamp;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getTimestamp() {
|
||||
return $this->timestamp;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param int $id
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the object type or id is invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setObject($type, $id) {
|
||||
if (!is_string($type) || $type === '' || isset($type[64])) {
|
||||
throw new \InvalidArgumentException('The given object type is invalid');
|
||||
}
|
||||
$this->objectType = $type;
|
||||
|
||||
if (!is_int($id)) {
|
||||
throw new \InvalidArgumentException('The given object id is invalid');
|
||||
}
|
||||
$this->objectId = $id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getObjectType() {
|
||||
return $this->objectType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getObjectId() {
|
||||
return $this->objectId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $subject
|
||||
* @param array $parameters
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the subject or parameters are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setSubject($subject, array $parameters = []) {
|
||||
if (!is_string($subject) || $subject === '' || isset($subject[64])) {
|
||||
throw new \InvalidArgumentException('The given subject is invalid');
|
||||
}
|
||||
$this->subject = $subject;
|
||||
|
||||
if (!is_array($parameters)) {
|
||||
throw new \InvalidArgumentException('The given subject parameters are invalid');
|
||||
}
|
||||
$this->subjectParameters = $parameters;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getSubject() {
|
||||
return $this->subject;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getSubjectParameters() {
|
||||
return $this->subjectParameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $subject
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the subject are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setParsedSubject($subject) {
|
||||
if (!is_string($subject) || $subject === '') {
|
||||
throw new \InvalidArgumentException('The given parsed subject is invalid');
|
||||
}
|
||||
$this->subjectParsed = $subject;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedSubject() {
|
||||
return $this->subjectParsed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $message
|
||||
* @param array $parameters
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the message or parameters are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setMessage($message, array $parameters = []) {
|
||||
if (!is_string($message) || $message === '' || isset($message[64])) {
|
||||
throw new \InvalidArgumentException('The given message is invalid');
|
||||
}
|
||||
$this->message = $message;
|
||||
|
||||
if (!is_array($parameters)) {
|
||||
throw new \InvalidArgumentException('The given message parameters are invalid');
|
||||
}
|
||||
$this->messageParameters = $parameters;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getMessage() {
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getMessageParameters() {
|
||||
return $this->messageParameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $message
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the message are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setParsedMessage($message) {
|
||||
if (!is_string($message) || $message === '') {
|
||||
throw new \InvalidArgumentException('The given parsed message is invalid');
|
||||
}
|
||||
$this->messageParsed = $message;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedMessage() {
|
||||
return $this->messageParsed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $link
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the link are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setLink($link) {
|
||||
if (!is_string($link) || $link === '' || isset($link[4000])) {
|
||||
throw new \InvalidArgumentException('The given link is invalid');
|
||||
}
|
||||
$this->link = $link;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getLink() {
|
||||
return $this->link;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $icon
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the icon are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function setIcon($icon) {
|
||||
if (!is_string($icon) || $icon === '' || isset($icon[64])) {
|
||||
throw new \InvalidArgumentException('The given icon is invalid');
|
||||
}
|
||||
$this->icon = $icon;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getIcon() {
|
||||
return $this->icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IAction
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function createAction() {
|
||||
return new Action();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IAction $action
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the action are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function addAction(IAction $action) {
|
||||
if (!$action->isValid()) {
|
||||
throw new \InvalidArgumentException('The given action is invalid');
|
||||
}
|
||||
$this->actions[] = $action;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IAction[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getActions() {
|
||||
return $this->actions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IAction $action
|
||||
* @return $this
|
||||
* @throws \InvalidArgumentException if the action are invalid
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function addParsedAction(IAction $action) {
|
||||
if (!$action->isValidParsed()) {
|
||||
throw new \InvalidArgumentException('The given parsed action is invalid');
|
||||
}
|
||||
$this->actionsParsed[] = $action;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return IAction[]
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function getParsedActions() {
|
||||
return $this->actionsParsed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function isValid() {
|
||||
return
|
||||
$this->isValidCommon()
|
||||
&&
|
||||
$this->getSubject() !== ''
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
* @since 8.2.0
|
||||
*/
|
||||
public function isValidParsed() {
|
||||
return
|
||||
$this->isValidCommon()
|
||||
&&
|
||||
$this->getParsedSubject() !== ''
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
protected function isValidCommon() {
|
||||
return
|
||||
$this->getApp() !== ''
|
||||
&&
|
||||
$this->getUser() !== ''
|
||||
&&
|
||||
$this->getTimestamp() !== 0
|
||||
&&
|
||||
$this->getObjectType() !== ''
|
||||
&&
|
||||
$this->getObjectId() !== 0
|
||||
;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,236 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 Test\Notification;
|
||||
|
||||
|
||||
use OC\Notification\Action;
|
||||
use OC\Notification\IAction;
|
||||
use Test\TestCase;
|
||||
|
||||
class ActionTest extends TestCase {
|
||||
/** @var IAction */
|
||||
protected $action;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->action = new Action();
|
||||
}
|
||||
|
||||
public function dataSetLabel() {
|
||||
return [
|
||||
['test1'],
|
||||
[str_repeat('a', 1)],
|
||||
[str_repeat('a', 32)],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetLabel
|
||||
* @param string $label
|
||||
*/
|
||||
public function testSetLabel($label) {
|
||||
$this->assertSame('', $this->action->getLabel());
|
||||
$this->action->setLabel($label);
|
||||
$this->assertSame($label, $this->action->getLabel());
|
||||
}
|
||||
|
||||
public function dataSetLabelInvalid() {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
[0],
|
||||
[1],
|
||||
[''],
|
||||
[str_repeat('a', 33)],
|
||||
[[]],
|
||||
[[str_repeat('a', 33)]],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetLabelInvalid
|
||||
* @param string $label
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetLabelInvalid($label) {
|
||||
$this->action->setLabel($label);
|
||||
}
|
||||
|
||||
public function dataSetParsedLabel() {
|
||||
return [
|
||||
['test1'],
|
||||
[str_repeat('a', 1)],
|
||||
[str_repeat('a', 32)],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetParsedLabel
|
||||
* @param string $label
|
||||
*/
|
||||
public function testSetParsedLabel($label) {
|
||||
$this->assertSame('', $this->action->getParsedLabel());
|
||||
$this->action->setParsedLabel($label);
|
||||
$this->assertSame($label, $this->action->getParsedLabel());
|
||||
}
|
||||
|
||||
public function dataSetParsedLabelInvalid() {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
[0],
|
||||
[1],
|
||||
[''],
|
||||
[[]],
|
||||
[[str_repeat('a', 33)]],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetParsedLabelInvalid
|
||||
* @param string $label
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetParsedLabelInvalid($label) {
|
||||
$this->action->setParsedLabel($label);
|
||||
}
|
||||
|
||||
public function dataSetLink() {
|
||||
return [
|
||||
['test1', 'GET'],
|
||||
['test2', 'POST'],
|
||||
[str_repeat('a', 1), 'PUT'],
|
||||
[str_repeat('a', 256), 'DELETE'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetLink
|
||||
* @param string $link
|
||||
* @param string $type
|
||||
*/
|
||||
public function testSetLink($link, $type) {
|
||||
$this->assertSame('', $this->action->getLink());
|
||||
$this->action->setLink($link, $type);
|
||||
$this->assertSame($link, $this->action->getLink());
|
||||
$this->assertSame($type, $this->action->getRequestType());
|
||||
}
|
||||
|
||||
public function dataSetLinkInvalid() {
|
||||
return [
|
||||
// Invalid link
|
||||
[true, 'GET'],
|
||||
[false, 'GET'],
|
||||
[0, 'GET'],
|
||||
[1, 'GET'],
|
||||
['', 'GET'],
|
||||
[str_repeat('a', 257), 'GET'],
|
||||
[[], 'GET'],
|
||||
[[str_repeat('a', 257)], 'GET'],
|
||||
|
||||
// Invalid type
|
||||
['url', 'notGET'],
|
||||
['url', true],
|
||||
['url', false],
|
||||
['url', 0],
|
||||
['url', 1],
|
||||
['url', []],
|
||||
['url', ['GET']],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetLinkInvalid
|
||||
* @param string $link
|
||||
* @param string $type
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetLinkInvalid($link, $type) {
|
||||
$this->action->setLink($link, $type);
|
||||
}
|
||||
|
||||
public function dataSetIcon() {
|
||||
return [
|
||||
['test1'],
|
||||
[str_repeat('a', 1)],
|
||||
[str_repeat('a', 64)],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetIcon
|
||||
* @param string $icon
|
||||
*/
|
||||
public function testSetIcon($icon) {
|
||||
$this->assertSame('', $this->action->getIcon());
|
||||
$this->action->setIcon($icon);
|
||||
$this->assertSame($icon, $this->action->getIcon());
|
||||
}
|
||||
|
||||
public function dataSetIconInvalid() {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
[0],
|
||||
[1],
|
||||
[''],
|
||||
[str_repeat('a', 65)],
|
||||
[[]],
|
||||
[[str_repeat('a', 65)]],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetIconInvalid
|
||||
* @param string $icon
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetIconInvalid($icon) {
|
||||
$this->action->setIcon($icon);
|
||||
}
|
||||
|
||||
public function testIsValid() {
|
||||
$this->assertFalse($this->action->isValid());
|
||||
$this->assertFalse($this->action->isValidParsed());
|
||||
$this->action->setLabel('label');
|
||||
$this->assertFalse($this->action->isValid());
|
||||
$this->assertFalse($this->action->isValidParsed());
|
||||
$this->action->setLink('link', 'GET');
|
||||
$this->assertTrue($this->action->isValid());
|
||||
$this->assertFalse($this->action->isValidParsed());
|
||||
}
|
||||
|
||||
public function testIsValidParsed() {
|
||||
$this->assertFalse($this->action->isValid());
|
||||
$this->assertFalse($this->action->isValidParsed());
|
||||
$this->action->setParsedLabel('label');
|
||||
$this->assertFalse($this->action->isValid());
|
||||
$this->assertFalse($this->action->isValidParsed());
|
||||
$this->action->setLink('link', 'GET');
|
||||
$this->assertFalse($this->action->isValid());
|
||||
$this->assertTrue($this->action->isValidParsed());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,345 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 Test\Notification;
|
||||
|
||||
use OC\Notification\Manager;
|
||||
use OC\Notification\IManager;
|
||||
use Test\TestCase;
|
||||
|
||||
class ManagerTest extends TestCase {
|
||||
/** @var IManager */
|
||||
protected $manager;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->manager = new Manager();
|
||||
}
|
||||
|
||||
public function testRegisterApp() {
|
||||
$app = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$closure = function() use ($app) {
|
||||
return $app;
|
||||
};
|
||||
|
||||
$this->assertEquals([], $this->invokePrivate($this->manager, 'getApps'));
|
||||
|
||||
$this->manager->registerApp($closure);
|
||||
|
||||
$this->assertEquals([$app], $this->invokePrivate($this->manager, 'getApps'));
|
||||
$this->assertEquals([$app], $this->invokePrivate($this->manager, 'getApps'));
|
||||
|
||||
$this->manager->registerApp($closure);
|
||||
|
||||
$this->assertEquals([$app, $app], $this->invokePrivate($this->manager, 'getApps'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testRegisterAppInvalid() {
|
||||
$notifier = $this->getMockBuilder('OC\Notification\INotifier')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$closure = function() use ($notifier) {
|
||||
return $notifier;
|
||||
};
|
||||
|
||||
$this->manager->registerApp($closure);
|
||||
|
||||
$this->invokePrivate($this->manager, 'getApps');
|
||||
}
|
||||
|
||||
public function testRegisterNotifier() {
|
||||
$notifier = $this->getMockBuilder('OC\Notification\INotifier')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$closure = function() use ($notifier) {
|
||||
return $notifier;
|
||||
};
|
||||
|
||||
$this->assertEquals([], $this->invokePrivate($this->manager, 'getNotifiers'));
|
||||
|
||||
$this->manager->registerNotifier($closure);
|
||||
|
||||
$this->assertEquals([$notifier], $this->invokePrivate($this->manager, 'getNotifiers'));
|
||||
$this->assertEquals([$notifier], $this->invokePrivate($this->manager, 'getNotifiers'));
|
||||
|
||||
$this->manager->registerNotifier($closure);
|
||||
|
||||
$this->assertEquals([$notifier, $notifier], $this->invokePrivate($this->manager, 'getNotifiers'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testRegisterNotifierInvalid() {
|
||||
$app = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$closure = function() use ($app) {
|
||||
return $app;
|
||||
};
|
||||
|
||||
$this->manager->registerNotifier($closure);
|
||||
|
||||
$this->invokePrivate($this->manager, 'getNotifiers');
|
||||
}
|
||||
|
||||
public function testCreateNotification() {
|
||||
$action = $this->manager->createNotification();
|
||||
$this->assertInstanceOf('OC\Notification\INotification', $action);
|
||||
}
|
||||
|
||||
public function testNotify() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification->expects($this->once())
|
||||
->method('isValid')
|
||||
->willReturn(true);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */
|
||||
$app = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$app->expects($this->once())
|
||||
->method('notify')
|
||||
->with($notification);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */
|
||||
$app2 = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$app2->expects($this->once())
|
||||
->method('notify')
|
||||
->with($notification);
|
||||
|
||||
$this->manager->registerApp(function() use ($app) {
|
||||
return $app;
|
||||
});
|
||||
$this->manager->registerApp(function() use ($app2) {
|
||||
return $app2;
|
||||
});
|
||||
|
||||
$this->manager->notify($notification);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testNotifyInvalid() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification->expects($this->once())
|
||||
->method('isValid')
|
||||
->willReturn(false);
|
||||
|
||||
$this->manager->notify($notification);
|
||||
}
|
||||
|
||||
public function testPrepare() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification->expects($this->once())
|
||||
->method('isValidParsed')
|
||||
->willReturn(true);
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification2 */
|
||||
$notification2 = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification2->expects($this->exactly(2))
|
||||
->method('isValidParsed')
|
||||
->willReturn(true);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */
|
||||
$notifier = $this->getMockBuilder('OC\Notification\INotifier')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notifier->expects($this->once())
|
||||
->method('prepare')
|
||||
->with($notification, 'en')
|
||||
->willReturnArgument(0);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier2 */
|
||||
$notifier2 = $this->getMockBuilder('OC\Notification\INotifier')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notifier2->expects($this->once())
|
||||
->method('prepare')
|
||||
->with($notification, 'en')
|
||||
->willReturn($notification2);
|
||||
|
||||
$this->manager->registerNotifier(function() use ($notifier) {
|
||||
return $notifier;
|
||||
});
|
||||
$this->manager->registerNotifier(function() use ($notifier2) {
|
||||
return $notifier2;
|
||||
});
|
||||
|
||||
$this->assertEquals($notification2, $this->manager->prepare($notification, 'en'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testPrepareInvalid() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification->expects($this->once())
|
||||
->method('isValidParsed')
|
||||
->willReturn(false);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */
|
||||
$notifier = $this->getMockBuilder('OC\Notification\INotifier')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notifier->expects($this->once())
|
||||
->method('prepare')
|
||||
->with($notification, 'de')
|
||||
->willReturnArgument(0);
|
||||
|
||||
$this->manager->registerNotifier(function() use ($notifier) {
|
||||
return $notifier;
|
||||
});
|
||||
|
||||
$this->manager->prepare($notification, 'de');
|
||||
}
|
||||
|
||||
public function testPrepareNotifierThrows() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification->expects($this->once())
|
||||
->method('isValidParsed')
|
||||
->willReturn(true);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */
|
||||
$notifier = $this->getMockBuilder('OC\Notification\INotifier')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notifier->expects($this->once())
|
||||
->method('prepare')
|
||||
->with($notification, 'de')
|
||||
->willThrowException(new \InvalidArgumentException);
|
||||
|
||||
$this->manager->registerNotifier(function() use ($notifier) {
|
||||
return $notifier;
|
||||
});
|
||||
|
||||
$this->assertEquals($notification, $this->manager->prepare($notification, 'de'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testPrepareNoNotifier() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$notification->expects($this->once())
|
||||
->method('isValidParsed')
|
||||
->willReturn(false);
|
||||
|
||||
$this->manager->prepare($notification, 'en');
|
||||
}
|
||||
|
||||
public function testMarkProcessed() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */
|
||||
$app = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$app->expects($this->once())
|
||||
->method('markProcessed')
|
||||
->with($notification);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */
|
||||
$app2 = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$app2->expects($this->once())
|
||||
->method('markProcessed')
|
||||
->with($notification);
|
||||
|
||||
$this->manager->registerApp(function() use ($app) {
|
||||
return $app;
|
||||
});
|
||||
$this->manager->registerApp(function() use ($app2) {
|
||||
return $app2;
|
||||
});
|
||||
|
||||
$this->manager->markProcessed($notification);
|
||||
}
|
||||
|
||||
public function testGetCount() {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('OC\Notification\INotification')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */
|
||||
$app = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$app->expects($this->once())
|
||||
->method('getCount')
|
||||
->with($notification)
|
||||
->willReturn(21);
|
||||
|
||||
/** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */
|
||||
$app2 = $this->getMockBuilder('OC\Notification\IApp')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$app2->expects($this->once())
|
||||
->method('getCount')
|
||||
->with($notification)
|
||||
->willReturn(42);
|
||||
|
||||
$this->manager->registerApp(function() use ($app) {
|
||||
return $app;
|
||||
});
|
||||
$this->manager->registerApp(function() use ($app2) {
|
||||
return $app2;
|
||||
});
|
||||
|
||||
$this->assertSame(63, $this->manager->getCount($notification));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,601 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Joas Schilling <nickvergessen@owncloud.com>
|
||||
*
|
||||
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
||||
* @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 Test\Notification;
|
||||
|
||||
|
||||
use OC\Notification\Notification;
|
||||
use OC\Notification\INotification;
|
||||
use Test\TestCase;
|
||||
|
||||
class NotificationTest extends TestCase {
|
||||
/** @var INotification */
|
||||
protected $notification;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->notification = new Notification();
|
||||
}
|
||||
|
||||
protected function dataValidString($maxLength) {
|
||||
$dataSets = [
|
||||
['test1'],
|
||||
[str_repeat('a', 1)],
|
||||
];
|
||||
if ($maxLength !== false) {
|
||||
$dataSets[] = [str_repeat('a', $maxLength)];
|
||||
}
|
||||
return $dataSets;
|
||||
}
|
||||
|
||||
protected function dataInvalidString($maxLength) {
|
||||
$dataSets = [
|
||||
[true],
|
||||
[false],
|
||||
[0],
|
||||
[1],
|
||||
[''],
|
||||
[[]],
|
||||
];
|
||||
if ($maxLength !== false) {
|
||||
$dataSets[] = [str_repeat('a', $maxLength + 1)];
|
||||
$dataSets[] = [[str_repeat('a', $maxLength + 1)]];
|
||||
}
|
||||
return $dataSets;
|
||||
}
|
||||
|
||||
protected function dataValidInt() {
|
||||
return [
|
||||
[0],
|
||||
[1],
|
||||
[time()],
|
||||
];
|
||||
}
|
||||
|
||||
protected function dataInvalidInt() {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
[''],
|
||||
['a'],
|
||||
[str_repeat('a', 256)],
|
||||
[[]],
|
||||
[['a']],
|
||||
[[str_repeat('a', 256)]],
|
||||
];
|
||||
}
|
||||
|
||||
public function dataSetApp() {
|
||||
return $this->dataValidString(32);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetApp
|
||||
* @param string $app
|
||||
*/
|
||||
public function testSetApp($app) {
|
||||
$this->assertSame('', $this->notification->getApp());
|
||||
$this->notification->setApp($app);
|
||||
$this->assertSame($app, $this->notification->getApp());
|
||||
}
|
||||
|
||||
public function dataSetAppInvalid() {
|
||||
return $this->dataInvalidString(32);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetAppInvalid
|
||||
* @param mixed $app
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetAppInvalid($app) {
|
||||
$this->notification->setApp($app);
|
||||
}
|
||||
|
||||
public function dataSetUser() {
|
||||
return $this->dataValidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetUser
|
||||
* @param string $user
|
||||
*/
|
||||
public function testSetUser($user) {
|
||||
$this->assertSame('', $this->notification->getUser());
|
||||
$this->notification->setUser($user);
|
||||
$this->assertSame($user, $this->notification->getUser());
|
||||
}
|
||||
|
||||
public function dataSetUserInvalid() {
|
||||
return $this->dataInvalidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetUserInvalid
|
||||
* @param mixed $user
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetUserInvalid($user) {
|
||||
$this->notification->setUser($user);
|
||||
}
|
||||
|
||||
public function dataSetTimestamp() {
|
||||
return $this->dataValidInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetTimestamp
|
||||
* @param int $timestamp
|
||||
*/
|
||||
public function testSetTimestamp($timestamp) {
|
||||
$this->assertSame(0, $this->notification->getTimestamp());
|
||||
$this->notification->setTimestamp($timestamp);
|
||||
$this->assertSame($timestamp, $this->notification->getTimestamp());
|
||||
}
|
||||
|
||||
public function dataSetTimestampInvalid() {
|
||||
return $this->dataInvalidInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetTimestampInvalid
|
||||
* @param mixed $timestamp
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetTimestampInvalid($timestamp) {
|
||||
$this->notification->setTimestamp($timestamp);
|
||||
}
|
||||
|
||||
public function dataSetObject() {
|
||||
return [
|
||||
['a', 1],
|
||||
[str_repeat('a', 64), time()],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetObject
|
||||
* @param string $type
|
||||
* @param int $id
|
||||
*/
|
||||
public function testSetObject($type, $id) {
|
||||
$this->assertSame('', $this->notification->getObjectType());
|
||||
$this->assertSame(0, $this->notification->getObjectId());
|
||||
$this->notification->setObject($type, $id);
|
||||
$this->assertSame($type, $this->notification->getObjectType());
|
||||
$this->assertSame($id, $this->notification->getObjectId());
|
||||
}
|
||||
|
||||
public function dataSetObjectTypeInvalid() {
|
||||
return $this->dataInvalidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetObjectTypeInvalid
|
||||
* @param mixed $type
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedMessage 'The given object type is invalid'
|
||||
*/
|
||||
public function testSetObjectTypeInvalid($type) {
|
||||
$this->notification->setObject($type, 1337);
|
||||
}
|
||||
|
||||
public function dataSetObjectIdInvalid() {
|
||||
return $this->dataInvalidInt();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetObjectIdInvalid
|
||||
* @param mixed $id
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
* @expectedMessage 'The given object id is invalid'
|
||||
*/
|
||||
public function testSetObjectIdInvalid($id) {
|
||||
$this->notification->setObject('object', $id);
|
||||
}
|
||||
|
||||
public function dataSetSubject() {
|
||||
return [
|
||||
['a', []],
|
||||
[str_repeat('a', 64), [str_repeat('a', 160)]],
|
||||
[str_repeat('a', 64), array_fill(0, 160, 'a')],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetSubject
|
||||
* @param string $subject
|
||||
* @param array $parameters
|
||||
*/
|
||||
public function testSetSubject($subject, $parameters) {
|
||||
$this->assertSame('', $this->notification->getSubject());
|
||||
$this->assertSame([], $this->notification->getSubjectParameters());
|
||||
$this->notification->setSubject($subject, $parameters);
|
||||
$this->assertSame($subject, $this->notification->getSubject());
|
||||
$this->assertSame($parameters, $this->notification->getSubjectParameters());
|
||||
}
|
||||
|
||||
public function dataSetSubjectInvalidSubject() {
|
||||
return $this->dataInvalidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetSubjectInvalidSubject
|
||||
* @param mixed $subject
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetSubjectInvalidSubject($subject) {
|
||||
$this->notification->setSubject($subject, []);
|
||||
}
|
||||
|
||||
public function dataSetParsedSubject() {
|
||||
return $this->dataValidString(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetParsedSubject
|
||||
* @param string $subject
|
||||
*/
|
||||
public function testSetParsedSubject($subject) {
|
||||
$this->assertSame('', $this->notification->getParsedSubject());
|
||||
$this->notification->setParsedSubject($subject);
|
||||
$this->assertSame($subject, $this->notification->getParsedSubject());
|
||||
}
|
||||
|
||||
public function dataSetParsedSubjectInvalid() {
|
||||
return $this->dataInvalidString(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetParsedSubjectInvalid
|
||||
* @param mixed $subject
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetParsedSubjectInvalid($subject) {
|
||||
$this->notification->setParsedSubject($subject);
|
||||
}
|
||||
|
||||
public function dataSetMessage() {
|
||||
return [
|
||||
['a', []],
|
||||
[str_repeat('a', 64), [str_repeat('a', 160)]],
|
||||
[str_repeat('a', 64), array_fill(0, 160, 'a')],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetMessage
|
||||
* @param string $message
|
||||
* @param array $parameters
|
||||
*/
|
||||
public function testSetMessage($message, $parameters) {
|
||||
$this->assertSame('', $this->notification->getMessage());
|
||||
$this->assertSame([], $this->notification->getMessageParameters());
|
||||
$this->notification->setMessage($message, $parameters);
|
||||
$this->assertSame($message, $this->notification->getMessage());
|
||||
$this->assertSame($parameters, $this->notification->getMessageParameters());
|
||||
}
|
||||
|
||||
public function dataSetMessageInvalidMessage() {
|
||||
return $this->dataInvalidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetMessageInvalidMessage
|
||||
* @param mixed $message
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetMessageInvalidMessage($message) {
|
||||
$this->notification->setMessage($message, []);
|
||||
}
|
||||
|
||||
public function dataSetParsedMessage() {
|
||||
return $this->dataValidString(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetParsedMessage
|
||||
* @param string $message
|
||||
*/
|
||||
public function testSetParsedMessage($message) {
|
||||
$this->assertSame('', $this->notification->getParsedMessage());
|
||||
$this->notification->setParsedMessage($message);
|
||||
$this->assertSame($message, $this->notification->getParsedMessage());
|
||||
}
|
||||
|
||||
public function dataSetParsedMessageInvalid() {
|
||||
return $this->dataInvalidString(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetParsedMessageInvalid
|
||||
* @param mixed $message
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetParsedMessageInvalid($message) {
|
||||
$this->notification->setParsedMessage($message);
|
||||
}
|
||||
|
||||
public function dataSetLink() {
|
||||
return $this->dataValidString(4000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetLink
|
||||
* @param string $link
|
||||
*/
|
||||
public function testSetLink($link) {
|
||||
$this->assertSame('', $this->notification->getLink());
|
||||
$this->notification->setLink($link);
|
||||
$this->assertSame($link, $this->notification->getLink());
|
||||
}
|
||||
|
||||
public function dataSetLinkInvalid() {
|
||||
return $this->dataInvalidString(4000);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetLinkInvalid
|
||||
* @param mixed $link
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetLinkInvalid($link) {
|
||||
$this->notification->setLink($link);
|
||||
}
|
||||
|
||||
public function dataSetIcon() {
|
||||
return $this->dataValidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetIcon
|
||||
* @param string $icon
|
||||
*/
|
||||
public function testSetIcon($icon) {
|
||||
$this->assertSame('', $this->notification->getIcon());
|
||||
$this->notification->setIcon($icon);
|
||||
$this->assertSame($icon, $this->notification->getIcon());
|
||||
}
|
||||
|
||||
public function dataSetIconInvalid() {
|
||||
return $this->dataInvalidString(64);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataSetIconInvalid
|
||||
* @param mixed $icon
|
||||
*
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testSetIconInvalid($icon) {
|
||||
$this->notification->setIcon($icon);
|
||||
}
|
||||
|
||||
public function testCreateAction() {
|
||||
$action = $this->notification->createAction();
|
||||
$this->assertInstanceOf('OC\Notification\IAction', $action);
|
||||
}
|
||||
|
||||
public function testAddAction() {
|
||||
/** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
|
||||
$action = $this->getMockBuilder('OC\Notification\IAction')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$action->expects($this->once())
|
||||
->method('isValid')
|
||||
->willReturn(true);
|
||||
$action->expects($this->never())
|
||||
->method('isValidParsed');
|
||||
|
||||
$this->notification->addAction($action);
|
||||
|
||||
$this->assertEquals([$action], $this->notification->getActions());
|
||||
$this->assertEquals([], $this->notification->getParsedActions());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testAddActionInvalid() {
|
||||
/** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
|
||||
$action = $this->getMockBuilder('OC\Notification\IAction')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$action->expects($this->once())
|
||||
->method('isValid')
|
||||
->willReturn(false);
|
||||
$action->expects($this->never())
|
||||
->method('isValidParsed');
|
||||
|
||||
$this->notification->addAction($action);
|
||||
}
|
||||
|
||||
public function testAddParsedAction() {
|
||||
/** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
|
||||
$action = $this->getMockBuilder('OC\Notification\IAction')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$action->expects($this->once())
|
||||
->method('isValidParsed')
|
||||
->willReturn(true);
|
||||
$action->expects($this->never())
|
||||
->method('isValid');
|
||||
|
||||
$this->notification->addParsedAction($action);
|
||||
|
||||
$this->assertEquals([$action], $this->notification->getParsedActions());
|
||||
$this->assertEquals([], $this->notification->getActions());
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \InvalidArgumentException
|
||||
*/
|
||||
public function testAddParsedActionInvalid() {
|
||||
/** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
|
||||
$action = $this->getMockBuilder('OC\Notification\IAction')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$action->expects($this->once())
|
||||
->method('isValidParsed')
|
||||
->willReturn(false);
|
||||
$action->expects($this->never())
|
||||
->method('isValid');
|
||||
|
||||
$this->notification->addParsedAction($action);
|
||||
}
|
||||
|
||||
public function dataIsValid() {
|
||||
return [
|
||||
[false, '', false],
|
||||
[true, '', false],
|
||||
[false, 'a', false],
|
||||
[true, 'a', true],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataIsValid
|
||||
*
|
||||
* @param bool $isValidCommon
|
||||
* @param string $subject
|
||||
* @param bool $expected
|
||||
*/
|
||||
public function testIsValid($isValidCommon, $subject, $expected) {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('\OC\Notification\Notification')
|
||||
->setMethods([
|
||||
'isValidCommon',
|
||||
'getSubject',
|
||||
])
|
||||
->getMock();
|
||||
|
||||
$notification->expects($this->once())
|
||||
->method('isValidCommon')
|
||||
->willReturn($isValidCommon);
|
||||
|
||||
$notification->expects(!$isValidCommon ? $this->never() : $this->once())
|
||||
->method('getSubject')
|
||||
->willReturn($subject);
|
||||
|
||||
$notification->expects($this->never())
|
||||
->method('getParsedSubject')
|
||||
->willReturn($subject);
|
||||
|
||||
$this->assertEquals($expected, $notification->isValid());
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataIsValid
|
||||
*
|
||||
* @param bool $isValidCommon
|
||||
* @param string $subject
|
||||
* @param bool $expected
|
||||
*/
|
||||
public function testIsParsedValid($isValidCommon, $subject, $expected) {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('\OC\Notification\Notification')
|
||||
->setMethods([
|
||||
'isValidCommon',
|
||||
'getParsedSubject',
|
||||
])
|
||||
->getMock();
|
||||
|
||||
$notification->expects($this->once())
|
||||
->method('isValidCommon')
|
||||
->willReturn($isValidCommon);
|
||||
|
||||
$notification->expects(!$isValidCommon ? $this->never() : $this->once())
|
||||
->method('getParsedSubject')
|
||||
->willReturn($subject);
|
||||
|
||||
$notification->expects($this->never())
|
||||
->method('getSubject')
|
||||
->willReturn($subject);
|
||||
|
||||
$this->assertEquals($expected, $notification->isValidParsed());
|
||||
}
|
||||
|
||||
public function dataIsValidCommon() {
|
||||
return [
|
||||
['', '', 0, '', 0, false],
|
||||
['app', '', 0, '', 0, false],
|
||||
['app', 'user', 0, '', 0, false],
|
||||
['app', 'user', time(), '', 0, false],
|
||||
['app', 'user', time(), 'type', 0, false],
|
||||
['app', 'user', time(), 'type', 42, true],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataIsValidCommon
|
||||
*
|
||||
* @param string $app
|
||||
* @param string $user
|
||||
* @param int $timestamp
|
||||
* @param string $objectType
|
||||
* @param int $objectId
|
||||
* @param bool $expected
|
||||
*/
|
||||
public function testIsValidCommon($app, $user, $timestamp, $objectType, $objectId, $expected) {
|
||||
/** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */
|
||||
$notification = $this->getMockBuilder('\OC\Notification\Notification')
|
||||
->setMethods([
|
||||
'getApp',
|
||||
'getUser',
|
||||
'getTimestamp',
|
||||
'getObjectType',
|
||||
'getObjectId',
|
||||
])
|
||||
->getMock();
|
||||
|
||||
$notification->expects($this->any())
|
||||
->method('getApp')
|
||||
->willReturn($app);
|
||||
|
||||
$notification->expects($this->any())
|
||||
->method('getUser')
|
||||
->willReturn($user);
|
||||
|
||||
$notification->expects($this->any())
|
||||
->method('getTimestamp')
|
||||
->willReturn($timestamp);
|
||||
|
||||
$notification->expects($this->any())
|
||||
->method('getObjectType')
|
||||
->willReturn($objectType);
|
||||
|
||||
$notification->expects($this->any())
|
||||
->method('getObjectId')
|
||||
->willReturn($objectId);
|
||||
|
||||
$this->assertEquals($expected, $this->invokePrivate($notification, 'isValidCommon'));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue