Add "is primary action" to actions
This commit is contained in:
parent
a03b1f1ee9
commit
1666af89c2
|
@ -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],
|
||||
|
|
Loading…
Reference in New Issue