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 */
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

View File

@ -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

View File

@ -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;
}

View File

@ -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],