Skip to content

Commit 7c22020

Browse files
fix: update DeleteCron to remove deleted lists
Signed-off-by: Luka Trovic <luka@nextcloud.com>
1 parent 5113a4c commit 7c22020

3 files changed

Lines changed: 48 additions & 2 deletions

File tree

lib/Cron/DeleteCron.php

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

30-
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, CardMapper $cardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper) {
33+
public function __construct(ITimeFactory $time, BoardMapper $boardMapper, CardMapper $cardMapper, AttachmentService $attachmentService, AttachmentMapper $attachmentMapper, StackMapper $stackMapper) {
3134
parent::__construct($time);
3235
$this->boardMapper = $boardMapper;
3336
$this->cardMapper = $cardMapper;
3437
$this->attachmentService = $attachmentService;
3538
$this->attachmentMapper = $attachmentMapper;
39+
$this->stackMapper = $stackMapper;
3640

3741
$this->setInterval(60 * 60 * 24);
3842
$this->setTimeSensitivity(IJob::TIME_INSENSITIVE);
@@ -64,5 +68,10 @@ protected function run($argument) {
6468
}
6569
$this->attachmentMapper->delete($attachment);
6670
}
71+
72+
$stacks = $this->stackMapper->findToDelete();
73+
foreach ($stacks as $stack) {
74+
$this->stackMapper->delete($stack);
75+
}
6776
}
6877
}

lib/Db/StackMapper.php

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

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

tests/unit/Cron/DeleteCronTest.php

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
use OCA\Deck\Db\BoardMapper;
3030
use OCA\Deck\Db\Card;
3131
use OCA\Deck\Db\CardMapper;
32+
use OCA\Deck\Db\Stack;
33+
use OCA\Deck\Db\StackMapper;
3234
use OCA\Deck\InvalidAttachmentType;
3335
use OCA\Deck\Service\AttachmentService;
3436
use OCA\Deck\Service\IAttachmentService;
@@ -48,6 +50,8 @@ class DeleteCronTest extends TestCase {
4850
private $attachmentService;
4951
/** @var AttachmentMapper|MockObject */
5052
private $attachmentMapper;
53+
/** @var StackMapper|MockObject */
54+
private $stackMapper;
5155
/** @var DeleteCron */
5256
protected $deleteCron;
5357

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

6469
protected function getBoard($id) {
@@ -73,6 +78,12 @@ protected function getCard($id) {
7378
return $card;
7479
}
7580

81+
protected function getStack($id) {
82+
$stack = new Stack();
83+
$stack->setId($id);
84+
return $stack;
85+
}
86+
7687
public function testDeleteCron() {
7788
$boards = [
7889
$this->getBoard(1),
@@ -117,6 +128,21 @@ public function testDeleteCron() {
117128
$this->attachmentMapper->expects($this->once())
118129
->method('delete')
119130
->with($attachment);
131+
132+
$stacks = [
133+
$this->getStack(100),
134+
$this->getStack(101),
135+
];
136+
$this->stackMapper->expects($this->once())
137+
->method('findToDelete')
138+
->willReturn($stacks);
139+
$this->stackMapper->expects($this->exactly(count($stacks)))
140+
->method('delete')
141+
->withConsecutive(
142+
[$stacks[0]],
143+
[$stacks[1]]
144+
);
145+
120146
$this->invokePrivate($this->deleteCron, 'run', [null]);
121147
}
122148

0 commit comments

Comments
 (0)