diff --git a/lib/Service/CardService.php b/lib/Service/CardService.php index 374111cb9..8e96dce09 100644 --- a/lib/Service/CardService.php +++ b/lib/Service/CardService.php @@ -39,6 +39,7 @@ use OCA\Deck\Db\StackMapper; use OCA\Deck\Event\CardCreatedEvent; use OCA\Deck\Event\CardDeletedEvent; use OCA\Deck\Event\CardUpdatedEvent; +use OCA\Deck\Model\CardDetails; use OCA\Deck\NoPermissionException; use OCA\Deck\Notification\NotificationHelper; use OCA\Deck\Db\BoardMapper; @@ -155,7 +156,12 @@ class CardService { $card->setAssignedUsers($cardAssignedUsers); } - return $cards; + return array_map( + function (Card $card): CardDetails { + return new CardDetails($card); + }, + $cards + ); } public function fetchDeleted($boardId) { $this->cardServiceValidator->check(compact('boardId')); diff --git a/lib/Service/StackService.php b/lib/Service/StackService.php index 4a21635c5..ce3e1195c 100644 --- a/lib/Service/StackService.php +++ b/lib/Service/StackService.php @@ -99,15 +99,7 @@ class StackService { return; } - $this->cardService->enrichCards($cards); - $cards = array_map( - function (Card $card): CardDetails { - return new CardDetails($card); - }, - $cards - ); - - $stack->setCards($cards); + $stack->setCards($this->cardService->enrichCards($cards)); } private function enrichStacksWithCards($stacks, $since = -1) { diff --git a/tests/integration/features/bootstrap/BoardContext.php b/tests/integration/features/bootstrap/BoardContext.php index a423acab4..f30a644bc 100644 --- a/tests/integration/features/bootstrap/BoardContext.php +++ b/tests/integration/features/bootstrap/BoardContext.php @@ -219,6 +219,17 @@ class BoardContext implements Context { $this->card = json_decode((string)$this->getResponse()->getBody(), true); } + /** + * @Given /^get the card details$/ + */ + public function getCard() { + $this->requestContext->sendJSONrequest('GET', '/index.php/apps/deck/cards/' . $this->card['id'], array_merge( + $this->card + )); + $this->requestContext->getResponse()->getBody()->seek(0); + $this->card = json_decode((string)$this->getResponse()->getBody(), true); + } + /** * @Given /^set the card duedate to "([^"]*)"$/ */ diff --git a/tests/integration/features/decks.feature b/tests/integration/features/decks.feature index 22a74baec..474ba61e3 100644 --- a/tests/integration/features/decks.feature +++ b/tests/integration/features/decks.feature @@ -32,3 +32,29 @@ Feature: decks And creates a board named "MyBoard" with color "000000" And create a stack named "ToDo" When create a card named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters" + + Scenario: Setting a duedate on a card + Given acting as user "user0" + And creates a board named "MyBoard" with color "000000" + And create a stack named "ToDo" + And create a card named "Overdue task" + When get the card details + And the response should be a JSON array with the following mandatory values + |key|value| + |title|Overdue task| + |duedate|| + |overdue|0| + And set the card attribute "duedate" to "2020-12-12 13:37:00" + When get the card details + And the response should be a JSON array with the following mandatory values + |key|value| + |title|Overdue task| + |duedate|2020-12-12T13:37:00+00:00| + |overdue|3| + And set the card attribute "duedate" to "" + When get the card details + And the response should be a JSON array with the following mandatory values + |key|value| + |title|Overdue task| + |duedate|| + |overdue|0| diff --git a/tests/unit/Service/CardServiceTest.php b/tests/unit/Service/CardServiceTest.php index 1952747b3..f0a9eb58e 100644 --- a/tests/unit/Service/CardServiceTest.php +++ b/tests/unit/Service/CardServiceTest.php @@ -34,6 +34,7 @@ use OCA\Deck\Db\Stack; use OCA\Deck\Db\StackMapper; use OCA\Deck\Db\BoardMapper; use OCA\Deck\Db\LabelMapper; +use OCA\Deck\Model\CardDetails; use OCA\Deck\Notification\NotificationHelper; use OCA\Deck\StatusException; use OCA\Deck\Validators\CardServiceValidator; @@ -188,7 +189,10 @@ class CardServiceTest extends TestCase { $cardExpected->setRelatedBoard($boardMock); $cardExpected->setRelatedStack($stackMock); $cardExpected->setLabels([]); - $this->assertEquals($cardExpected, $this->cardService->find(123)); + $expected = new CardDetails($cardExpected); + + $actual = $this->cardService->find(123); + $this->assertEquals($expected->jsonSerialize(), $actual->jsonSerialize()); } public function testCreate() { diff --git a/tests/unit/Service/Importer/Systems/TrelloJsonServiceTest.php b/tests/unit/Service/Importer/Systems/TrelloJsonServiceTest.php index a1e18b11c..fd312e4a7 100644 --- a/tests/unit/Service/Importer/Systems/TrelloJsonServiceTest.php +++ b/tests/unit/Service/Importer/Systems/TrelloJsonServiceTest.php @@ -76,7 +76,7 @@ class TrelloJsonServiceTest extends \Test\TestCase { } public function testValidateUsersWithNotStringNextcloud() { - $this->expectErrorMessage('User on setting uidRelation is invalid'); + $this->expectExceptionMessage('User on setting uidRelation is invalid'); $importService = $this->createMock(BoardImportService::class); $importService ->method('getConfig') @@ -92,7 +92,7 @@ class TrelloJsonServiceTest extends \Test\TestCase { } public function testValidateUsersWithNotFoundUser() { - $this->expectErrorMessage('User on setting uidRelation not found: nextcloud_user'); + $this->expectExceptionMessage('User on setting uidRelation not found: nextcloud_user'); $importService = $this->createMock(BoardImportService::class); $importService ->method('getConfig') @@ -124,7 +124,7 @@ class TrelloJsonServiceTest extends \Test\TestCase { } public function testGetBoardWithNoName() { - $this->expectErrorMessage('Invalid name of board'); + $this->expectExceptionMessage('Invalid name of board'); $importService = $this->createMock(BoardImportService::class); $this->service->setImportService($importService); $this->service->getBoard(); diff --git a/tests/unit/Service/StackServiceTest.php b/tests/unit/Service/StackServiceTest.php index 84e38173d..aa573a3c5 100644 --- a/tests/unit/Service/StackServiceTest.php +++ b/tests/unit/Service/StackServiceTest.php @@ -33,6 +33,7 @@ use OCA\Deck\Db\Label; use OCA\Deck\Db\LabelMapper; use OCA\Deck\Db\Stack; use OCA\Deck\Db\StackMapper; +use OCA\Deck\Model\CardDetails; use OCA\Deck\Validators\StackServiceValidator; use OCP\EventDispatcher\IEventDispatcher; use Psr\Log\LoggerInterface; @@ -121,6 +122,9 @@ class StackServiceTest extends TestCase { foreach ($cards as $card) { $card->setLabels($this->getLabels()[$card->getId()]); } + return array_map(function ($card) { + return new CardDetails($card); + }, $cards); } ) );