From 3efb9d78ed5d06c8b09c04697aeac06881ff17ad Mon Sep 17 00:00:00 2001 From: Julius Knorr Date: Fri, 7 Nov 2025 13:31:33 +0100 Subject: [PATCH 1/4] fix: Pass getUpdatedFields to internal card entity Signed-off-by: Julius Knorr Assisted-by: ClaudeCode:claude-opus-5-5 --- lib/Model/CardDetails.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Model/CardDetails.php b/lib/Model/CardDetails.php index a0b17fa90..03a0bf906 100644 --- a/lib/Model/CardDetails.php +++ b/lib/Model/CardDetails.php @@ -85,4 +85,9 @@ protected function getter(string $name): mixed { public function __call(string $methodName, array $args) { return $this->card->__call($methodName, $args); } + + #[\Override] + public function getUpdatedFields(): array { + return $this->card->getUpdatedFields(); + } } From 717957217fc822d69350ebf8f8a0b0c370c8f634 Mon Sep 17 00:00:00 2001 From: Julius Knorr Date: Fri, 7 Nov 2025 13:31:50 +0100 Subject: [PATCH 2/4] fix: Set description and due date on create Signed-off-by: Julius Knorr Assisted-by: ClaudeCode:claude-opus-5-5 --- lib/Service/CardService.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 5b8130878..57293c078 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -396,7 +396,7 @@ public function cloneCard(int $id, ?int $targetStackId = null):Card { $targetStackId = $originCard->getStackId(); } $this->permissionService->checkPermission($this->stackMapper, $targetStackId, Acl::PERMISSION_EDIT); - $newCard = $this->create($originCard->getTitle(), $targetStackId, $originCard->getType(), $originCard->getOrder(), $originCard->getOwner(), color: $originCard->getColor()); + $newCard = $this->create($originCard->getTitle(), $targetStackId, $originCard->getType(), $originCard->getOrder(), $originCard->getOwner(), description: $originCard->getDescription(), duedate: $originCard->getDuedate(), color: $originCard->getColor()); $boardId = $this->stackMapper->findBoardId($targetStackId); foreach ($this->labelMapper->findAssignedLabelsForCard($id) as $label) { if ($boardId !== $this->stackMapper->findBoardId($originCard->getStackId())) { From 78af9a777bdef1f1883fc5ccaf070228e7435bfb Mon Sep 17 00:00:00 2001 From: Julius Knorr Date: Wed, 11 Nov 2026 15:09:29 +0100 Subject: [PATCH 3/4] test: Cover description and due date on card clone Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Julius Knorr --- tests/unit/Db/CardTest.php | 8 ++++++++ tests/unit/Service/CardServiceTest.php | 3 +++ 2 files changed, 11 insertions(+) diff --git a/tests/unit/Db/CardTest.php b/tests/unit/Db/CardTest.php index 03170f11a..fa555f584 100644 --- a/tests/unit/Db/CardTest.php +++ b/tests/unit/Db/CardTest.php @@ -172,4 +172,12 @@ public function testJsonSerializeAsignedUsers() { 'color' => 'ffffff', ], (new CardDetails($card))->jsonSerialize()); } + + public function testCardDetailsForwardsUpdatedFields(): void { + $card = $this->createCard(); + $card->resetUpdatedFields(); + $details = new CardDetails($card); + $details->setDescription('changed'); + $this->assertEquals(['description' => true], $details->getUpdatedFields()); + } } diff --git a/tests/unit/Service/CardServiceTest.php b/tests/unit/Service/CardServiceTest.php index 6711d13b5..540f0dd0f 100644 --- a/tests/unit/Service/CardServiceTest.php +++ b/tests/unit/Service/CardServiceTest.php @@ -332,6 +332,7 @@ public function testClone() { $card->setStackId(12345); $card->setDescription('A test description'); $card->setColor('FF0000'); + $card->setDuedate(new \DateTime('2026-12-24 12:00:00')); $clonedCard = clone $card; $clonedCard->setId(2); @@ -414,6 +415,8 @@ public function testClone() { $this->assertEquals('A test description', $c->getDescription()); $this->assertEquals('FF0000', $inserted[1]->getColor()); + $this->assertEquals('A test description', $inserted[1]->getDescription()); + $this->assertEquals($card->getDuedate(), $inserted[1]->getDuedate()); $this->assertCount(1, $c->getLabels()); $this->assertEquals($label->getId(), $c->getLabels()[0]->getId()); From c631d75e1fadd3c48c3793d3b3a73f0ea73c8bd3 Mon Sep 17 00:00:00 2001 From: Julius Knorr Date: Wed, 11 Nov 2026 15:11:27 +0100 Subject: [PATCH 4/4] fix: Keep the start date on card clone Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Julius Knorr --- lib/Service/CardService.php | 2 +- tests/unit/Service/CardServiceTest.php | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 57293c078..2787605cf 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -396,7 +396,7 @@ public function cloneCard(int $id, ?int $targetStackId = null):Card { $targetStackId = $originCard->getStackId(); } $this->permissionService->checkPermission($this->stackMapper, $targetStackId, Acl::PERMISSION_EDIT); - $newCard = $this->create($originCard->getTitle(), $targetStackId, $originCard->getType(), $originCard->getOrder(), $originCard->getOwner(), description: $originCard->getDescription(), duedate: $originCard->getDuedate(), color: $originCard->getColor()); + $newCard = $this->create($originCard->getTitle(), $targetStackId, $originCard->getType(), $originCard->getOrder(), $originCard->getOwner(), description: $originCard->getDescription(), duedate: $originCard->getDuedate(), startdate: $originCard->getStartdate(), color: $originCard->getColor()); $boardId = $this->stackMapper->findBoardId($targetStackId); foreach ($this->labelMapper->findAssignedLabelsForCard($id) as $label) { if ($boardId !== $this->stackMapper->findBoardId($originCard->getStackId())) { diff --git a/tests/unit/Service/CardServiceTest.php b/tests/unit/Service/CardServiceTest.php index 540f0dd0f..15d0cb2eb 100644 --- a/tests/unit/Service/CardServiceTest.php +++ b/tests/unit/Service/CardServiceTest.php @@ -333,6 +333,7 @@ public function testClone() { $card->setDescription('A test description'); $card->setColor('FF0000'); $card->setDuedate(new \DateTime('2026-12-24 12:00:00')); + $card->setStartdate(new \DateTime('2026-12-20 09:00:00')); $clonedCard = clone $card; $clonedCard->setId(2); @@ -417,6 +418,7 @@ public function testClone() { $this->assertEquals('FF0000', $inserted[1]->getColor()); $this->assertEquals('A test description', $inserted[1]->getDescription()); $this->assertEquals($card->getDuedate(), $inserted[1]->getDuedate()); + $this->assertEquals($card->getStartdate(), $inserted[1]->getStartdate()); $this->assertCount(1, $c->getLabels()); $this->assertEquals($label->getId(), $c->getLabels()[0]->getId());