Add "is primary action" to actions

This commit is contained in:
Joas Schilling 2015-11-16 16:14:52 +01:00
parent a03b1f1ee9
commit 1666af89c2
4 changed files with 97 additions and 0 deletions

View File

@ -39,6 +39,9 @@ class Action implements IAction {
/** @var string */ /** @var string */
protected $icon; protected $icon;
/** @var bool */
protected $primary;
/** /**
* Constructor * Constructor
*/ */
@ -94,6 +97,27 @@ class Action implements IAction {
return $this->labelParsed; return $this->labelParsed;
} }
/**
* @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 $link
* @param string $requestType * @param string $requestType

View File

@ -60,6 +60,19 @@ interface IAction {
*/ */
public function getParsedLabel(); 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 $link
* @param string $requestType * @param string $requestType

View File

@ -68,6 +68,12 @@ class Notification implements INotification {
/** @var array */ /** @var array */
protected $actionsParsed; protected $actionsParsed;
/** @var bool */
protected $hasPrimaryAction;
/** @var bool */
protected $hasPrimaryParsedAction;
/** /**
* Constructor * Constructor
*/ */
@ -369,6 +375,15 @@ class Notification implements INotification {
if (!$action->isValid()) { if (!$action->isValid()) {
throw new \InvalidArgumentException('The given action is invalid'); 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; $this->actions[] = $action;
return $this; return $this;
} }
@ -391,6 +406,15 @@ class Notification implements INotification {
if (!$action->isValidParsed()) { if (!$action->isValidParsed()) {
throw new \InvalidArgumentException('The given parsed action is invalid'); 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; $this->actionsParsed[] = $action;
return $this; return $this;
} }

View File

@ -438,6 +438,24 @@ class NotificationTest extends TestCase {
$this->notification->addAction($action); $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() { public function testAddParsedAction() {
/** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */
$action = $this->getMockBuilder('OC\Notification\IAction') $action = $this->getMockBuilder('OC\Notification\IAction')
@ -472,6 +490,24 @@ class NotificationTest extends TestCase {
$this->notification->addParsedAction($action); $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() { public function dataIsValid() {
return [ return [
[false, '', false], [false, '', false],