summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2015-11-17 08:39:06 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2015-11-17 08:39:06 +0100
commit705d208a8aba55cdb509380db19a0b4e2413d1eb (patch)
tree50a076472947fd7f02e05855d79a3b8151307e55
parent56f44a457c74cb5df0d5e950e67deac99cae7b41 (diff)
parent40d5d5512401673f30ba822ff26b1762c9730da9 (diff)
downloadnextcloud-server-705d208a8aba55cdb509380db19a0b4e2413d1eb.tar.gz
nextcloud-server-705d208a8aba55cdb509380db19a0b4e2413d1eb.zip
Merge pull request #20539 from owncloud/notification-api-adjustment
Notification api update
-rw-r--r--lib/private/notification/action.php46
-rw-r--r--lib/private/notification/iaction.php27
-rw-r--r--lib/private/notification/inotification.php14
-rw-r--r--lib/private/notification/notification.php46
-rw-r--r--tests/lib/notification/actiontest.php41
-rw-r--r--tests/lib/notification/notificationtest.php64
6 files changed, 97 insertions, 141 deletions
diff --git a/lib/private/notification/action.php b/lib/private/notification/action.php
index 6de8a1a4bbc..958b085b38e 100644
--- a/lib/private/notification/action.php
+++ b/lib/private/notification/action.php
@@ -39,6 +39,9 @@ class Action implements IAction {
/** @var string */
protected $icon;
+ /** @var bool */
+ protected $primary;
+
/**
* Constructor
*/
@@ -95,6 +98,27 @@ class Action implements IAction {
}
/**
+ * @param $primary bool
+ * @throws \InvalidArgumentException if $primary is invalid
+ * @since 9.0.0
+ */
+ public function setPrimary($primary) {
+ if (!is_bool($primary)) {
+ throw new \InvalidArgumentException('The given primary option is invalid');
+ }
+
+ $this->primary = $primary;
+ }
+
+ /**
+ * @return bool
+ * @since 9.0.0
+ */
+ public function isPrimary() {
+ return $this->primary;
+ }
+
+ /**
* @param string $link
* @param string $requestType
* @return $this
@@ -130,28 +154,6 @@ class Action implements IAction {
}
/**
- * @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() {
diff --git a/lib/private/notification/iaction.php b/lib/private/notification/iaction.php
index da6728f5c52..4aed2e92517 100644
--- a/lib/private/notification/iaction.php
+++ b/lib/private/notification/iaction.php
@@ -61,6 +61,19 @@ interface IAction {
public function getParsedLabel();
/**
+ * @param $primary bool
+ * @throws \InvalidArgumentException if $primary is invalid
+ * @since 9.0.0
+ */
+ public function setPrimary($primary);
+
+ /**
+ * @return bool
+ * @since 9.0.0
+ */
+ public function isPrimary();
+
+ /**
* @param string $link
* @param string $requestType
* @return $this
@@ -82,20 +95,6 @@ interface IAction {
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
*/
diff --git a/lib/private/notification/inotification.php b/lib/private/notification/inotification.php
index faf5db1d24c..a8bf5b110ab 100644
--- a/lib/private/notification/inotification.php
+++ b/lib/private/notification/inotification.php
@@ -180,20 +180,6 @@ interface INotification {
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
*/
diff --git a/lib/private/notification/notification.php b/lib/private/notification/notification.php
index 40fe39a956e..01df659d4a1 100644
--- a/lib/private/notification/notification.php
+++ b/lib/private/notification/notification.php
@@ -68,6 +68,12 @@ class Notification implements INotification {
/** @var array */
protected $actionsParsed;
+ /** @var bool */
+ protected $hasPrimaryAction;
+
+ /** @var bool */
+ protected $hasPrimaryParsedAction;
+
/**
* Constructor
*/
@@ -330,28 +336,6 @@ class Notification implements INotification {
}
/**
- * @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
*/
@@ -369,6 +353,15 @@ class Notification implements INotification {
if (!$action->isValid()) {
throw new \InvalidArgumentException('The given action is invalid');
}
+
+ if ($action->isPrimary()) {
+ if ($this->hasPrimaryAction) {
+ throw new \InvalidArgumentException('The notification already has a primary action');
+ }
+
+ $this->hasPrimaryAction = true;
+ }
+
$this->actions[] = $action;
return $this;
}
@@ -391,6 +384,15 @@ class Notification implements INotification {
if (!$action->isValidParsed()) {
throw new \InvalidArgumentException('The given parsed action is invalid');
}
+
+ if ($action->isPrimary()) {
+ if ($this->hasPrimaryParsedAction) {
+ throw new \InvalidArgumentException('The notification already has a primary action');
+ }
+
+ $this->hasPrimaryParsedAction = true;
+ }
+
$this->actionsParsed[] = $action;
return $this;
}
diff --git a/tests/lib/notification/actiontest.php b/tests/lib/notification/actiontest.php
index e319c250cc7..a6157d6c56e 100644
--- a/tests/lib/notification/actiontest.php
+++ b/tests/lib/notification/actiontest.php
@@ -171,47 +171,6 @@ class ActionTest extends TestCase {
$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());
diff --git a/tests/lib/notification/notificationtest.php b/tests/lib/notification/notificationtest.php
index a790a53eaa7..8be49ebdc17 100644
--- a/tests/lib/notification/notificationtest.php
+++ b/tests/lib/notification/notificationtest.php
@@ -371,34 +371,6 @@ class NotificationTest extends TestCase {
$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);
@@ -438,6 +410,24 @@ class NotificationTest extends TestCase {
$this->notification->addAction($action);
}
+ public function testAddActionSecondPrimary() {
+ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
+ $action = $this->getMockBuilder('OC\Notification\IAction')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $action->expects($this->exactly(2))
+ ->method('isValid')
+ ->willReturn(true);
+ $action->expects($this->exactly(2))
+ ->method('isPrimary')
+ ->willReturn(true);
+
+ $this->notification->addAction($action);
+
+ $this->setExpectedException('\InvalidArgumentException');
+ $this->notification->addAction($action);
+ }
+
public function testAddParsedAction() {
/** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
$action = $this->getMockBuilder('OC\Notification\IAction')
@@ -472,6 +462,24 @@ class NotificationTest extends TestCase {
$this->notification->addParsedAction($action);
}
+ public function testAddActionSecondParsedPrimary() {
+ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
+ $action = $this->getMockBuilder('OC\Notification\IAction')
+ ->disableOriginalConstructor()
+ ->getMock();
+ $action->expects($this->exactly(2))
+ ->method('isValidParsed')
+ ->willReturn(true);
+ $action->expects($this->exactly(2))
+ ->method('isPrimary')
+ ->willReturn(true);
+
+ $this->notification->addParsedAction($action);
+
+ $this->setExpectedException('\InvalidArgumentException');
+ $this->notification->addParsedAction($action);
+ }
+
public function dataIsValid() {
return [
[false, '', false],