Skip to content

Commit 87d2f1f

Browse files
fix: update DeleteCron to remove deleted lists
Signed-off-by: Luka Trovic <luka@nextcloud.com>
1 parent 9938a6d commit 87d2f1f

3 files changed

Lines changed: 49 additions & 2 deletions

File tree

lib/Cron/DeleteCron.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use OCA\Deck\Db\AttachmentMapper;
1212
use OCA\Deck\Db\BoardMapper;
1313
use OCA\Deck\Db\CardMapper;
14+
use OCA\Deck\Db\StackMapper;
1415
use OCA\Deck\InvalidAttachmentType;
1516
use OCA\Deck\Service\AttachmentService;
1617
use OCP\AppFramework\Utility\ITimeFactory;
@@ -27,13 +28,16 @@ class DeleteCron extends TimedJob {
2728
private $attachmentService;
2829
/** @var AttachmentMapper */
2930
private $attachmentMapper;
31+
/** @var StackMapper */
32+
private $stackMapper;
3033

31-
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, CardMapper $cardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper) {
34+
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, CardMapper $cardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper, StackMapper $stackMapper) {
3235
parent::__construct($time);
3336
$this->boardMapper = $boardMapper;
3437
$this->cardMapper = $cardMapper;
3538
$this->attachmentService = $attachmentService;
3639
$this->attachmentMapper = $attachmentMapper;
40+
$this->stackMapper = $stackMapper;
3741

3842
$this->setInterval(60 * 60 * 24);
3943
$this->setTimeSensitivity(IJob::TIME_INSENSITIVE);
@@ -65,5 +69,10 @@ protected function run($argument) {
6569
}
6670
$this->attachmentMapper->delete($attachment);
6771
}
72+
73+
$stacks = $this->stackMapper->findToDelete();
74+
foreach ($stacks as $stack) {
75+
$this->stackMapper->delete($stack);
76+
}
6877
}
6978
}

lib/Db/StackMapper.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,15 @@ public function findBoardId($id): ?int {
164164

165165
return $result !== false ? $result : null;
166166
}
167+
168+
public function findToDelete(): array {
169+
// add buffer of 5 min
170+
$timeLimit = time() - (60 * 5);
171+
$qb = $this->db->getQueryBuilder();
172+
$qb->select('*')
173+
->from($this->getTableName())
174+
->where($qb->expr()->neq('deleted_at', $qb->createNamedParameter(0, IQueryBuilder::PARAM_INT)))
175+
->andWhere($qb->expr()->lt('deleted_at', $qb->createNamedParameter($timeLimit, IQueryBuilder::PARAM_INT)));
176+
return $this->findEntities($qb);
177+
}
167178
}

tests/unit/Cron/DeleteCronTest.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
use OCA\Deck\Db\BoardMapper;
3131
use OCA\Deck\Db\Card;
3232
use OCA\Deck\Db\CardMapper;
33+
use OCA\Deck\Db\Stack;
34+
use OCA\Deck\Db\StackMapper;
3335
use OCA\Deck\InvalidAttachmentType;
3436
use OCA\Deck\Service\AttachmentService;
3537
use OCA\Deck\Service\IAttachmentService;
@@ -49,6 +51,8 @@ class DeleteCronTest extends TestCase {
4951
private $attachmentService;
5052
/** @var AttachmentMapper|MockObject */
5153
private $attachmentMapper;
54+
/** @var StackMapper|MockObject */
55+
private $stackMapper;
5256
/** @var DeleteCron */
5357
protected $deleteCron;
5458

@@ -59,7 +63,8 @@ public function setUp(): void {
5963
$this->cardMapper = $this->createMock(CardMapper::class);
6064
$this->attachmentService = $this->createMock(AttachmentService::class);
6165
$this->attachmentMapper = $this->createMock(AttachmentMapper::class);
62-
$this->deleteCron = new DeleteCron($this->timeFactory, $this->boardMapper, $this->cardMapper, $this->attachmentService, $this->attachmentMapper);
66+
$this->stackMapper = $this->createMock(StackMapper::class);
67+
$this->deleteCron = new DeleteCron($this->timeFactory, $this->boardMapper, $this->cardMapper, $this->attachmentService, $this->attachmentMapper, $this->stackMapper);
6368
}
6469

6570
protected function getBoard($id) {
@@ -74,6 +79,13 @@ protected function getCard($id) {
7479
return $card;
7580
}
7681

82+
protected function getStack($id)
83+
{
84+
$stack = new Stack();
85+
$stack->setId($id);
86+
return $stack;
87+
}
88+
7789
public function testDeleteCron() {
7890
$boards = [
7991
$this->getBoard(1),
@@ -118,6 +130,21 @@ public function testDeleteCron() {
118130
$this->attachmentMapper->expects($this->once())
119131
->method('delete')
120132
->with($attachment);
133+
134+
$stacks = [
135+
$this->getStack(100),
136+
$this->getStack(101),
137+
];
138+
$this->stackMapper->expects($this->once())
139+
->method('findToDelete')
140+
->willReturn($stacks);
141+
$this->stackMapper->expects($this->exactly(count($stacks)))
142+
->method('delete')
143+
->withConsecutive(
144+
[$stacks[0]],
145+
[$stacks[1]]
146+
);
147+
121148
$this->invokePrivate($this->deleteCron, 'run', [null]);
122149
}
123150

0 commit comments

Comments
 (0)