diff --git a/lib/private/Notification/Notification.php b/lib/private/Notification/Notification.php index 62a48f434fe4b5f44f18e8dbf24e574a170b0f19..9b5877a3058a7684029b67e2992b54df5a65f74e 100644 --- a/lib/private/Notification/Notification.php +++ b/lib/private/Notification/Notification.php @@ -397,9 +397,13 @@ class Notification implements INotification { } $this->hasPrimaryParsedAction = true; + + // Make sure the primary action is always the first one + array_unshift($this->actionsParsed, $action); + } else { + $this->actionsParsed[] = $action; } - $this->actionsParsed[] = $action; return $this; } diff --git a/tests/lib/Notification/NotificationTest.php b/tests/lib/Notification/NotificationTest.php index c6ededf01424efe6d512afeb11964363d8e1136f..93d48dfd60462bb2e5a9b08772d6f832ba787f3d 100644 --- a/tests/lib/Notification/NotificationTest.php +++ b/tests/lib/Notification/NotificationTest.php @@ -495,6 +495,35 @@ class NotificationTest extends TestCase { $this->notification->addParsedAction($action); } + public function testAddActionParsedPrimaryEnd() { + /** @var \OCP\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action1 = $this->getMockBuilder('OCP\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action1->expects($this->exactly(2)) + ->method('isValidParsed') + ->willReturn(true); + $action1->expects($this->exactly(2)) + ->method('isPrimary') + ->willReturn(false); + /** @var \OCP\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action2 = $this->getMockBuilder('OCP\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action2->expects($this->once()) + ->method('isValidParsed') + ->willReturn(true); + $action2->expects($this->once()) + ->method('isPrimary') + ->willReturn(true); + + $this->assertSame($this->notification, $this->notification->addParsedAction($action1)); + $this->assertSame($this->notification, $this->notification->addParsedAction($action2)); + $this->assertSame($this->notification, $this->notification->addParsedAction($action1)); + + $this->assertEquals([$action2, $action1, $action1], $this->notification->getParsedActions()); + } + public function dataIsValid() { return [ [false, '', false],