Skip to content
Snippets Groups Projects
Commit 1666af89 authored by Joas Schilling's avatar Joas Schilling
Browse files

Add "is primary action" to actions

parent a03b1f1e
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,9 @@ class Action implements IAction {
/** @var string */
protected $icon;
/** @var bool */
protected $primary;
/**
* Constructor
*/
......@@ -94,6 +97,27 @@ class Action implements IAction {
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 $requestType
......
......@@ -60,6 +60,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
......
......@@ -68,6 +68,12 @@ class Notification implements INotification {
/** @var array */
protected $actionsParsed;
/** @var bool */
protected $hasPrimaryAction;
/** @var bool */
protected $hasPrimaryParsedAction;
/**
* Constructor
*/
......@@ -369,6 +375,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 +406,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;
}
......
......@@ -438,6 +438,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 +490,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],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment