diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php index 98c97dc5f..3ea422cf5 100644 --- a/lib/Notification/Notifier.php +++ b/lib/Notification/Notifier.php @@ -28,6 +28,7 @@ use OCA\Deck\Db\CardMapper; use OCP\IURLGenerator; use OCP\IUserManager; use OCP\L10N\IFactory; +use OCP\Notification\AlreadyProcessedException; use OCP\Notification\INotification; use OCP\Notification\INotifier; @@ -96,6 +97,9 @@ class Notifier implements INotifier { case 'card-assigned': $cardId = $notification->getObjectId(); $boardId = $this->cardMapper->findBoardId($cardId); + if (!$boardId) { + throw new AlreadyProcessedException(); + } $initiator = $this->userManager->get($params[2]); if ($initiator !== null) { $dn = $initiator->getDisplayName(); @@ -120,6 +124,9 @@ class Notifier implements INotifier { case 'card-overdue': $cardId = $notification->getObjectId(); $boardId = $this->cardMapper->findBoardId($cardId); + if (!$boardId) { + throw new AlreadyProcessedException(); + } $notification->setParsedSubject( (string) $l->t('The card "%s" on "%s" has reached its due date.', $params) ); @@ -128,6 +135,9 @@ class Notifier implements INotifier { case 'card-comment-mentioned': $cardId = $notification->getObjectId(); $boardId = $this->cardMapper->findBoardId($cardId); + if (!$boardId) { + throw new AlreadyProcessedException(); + } $initiator = $this->userManager->get($params[2]); if ($initiator !== null) { $dn = $initiator->getDisplayName(); @@ -154,6 +164,9 @@ class Notifier implements INotifier { break; case 'board-shared': $boardId = $notification->getObjectId(); + if (!$boardId) { + throw new AlreadyProcessedException(); + } $initiator = $this->userManager->get($params[1]); if ($initiator !== null) { $dn = $initiator->getDisplayName(); diff --git a/tests/unit/Notification/NotifierTest.php b/tests/unit/Notification/NotifierTest.php index 925ac813e..3acc7fd7c 100644 --- a/tests/unit/Notification/NotifierTest.php +++ b/tests/unit/Notification/NotifierTest.php @@ -177,6 +177,10 @@ class NotifierTest extends \Test\TestCase { /** @dataProvider dataPrepareCardAssigned */ public function testPrepareCardAssigned($withUserFound = true) { + $this->cardMapper->expects($this->once()) + ->method('findBoardId') + ->willReturn(123); + /** @var INotification $notification */ $notification = $this->createMock(INotification::class); $notification->expects($this->once())