refactor: Fix psalm issues

- Add typing for most of the services, controllers and mappers
- Add api doc for mappers
- Use vendor-bin for psalm
- Use attributes for controllers
- Fix upload of attachments

Signed-off-by: Carl Schwan <carl.schwan@nextcloud.com>
This commit is contained in:
Carl Schwan
2025-09-23 16:59:09 +02:00
parent 64741e455d
commit 5cf486150a
77 changed files with 4257 additions and 1393 deletions

View File

@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
*
@@ -116,7 +118,7 @@ class AttachmentServiceTest extends TestCase {
$this->activityManager = $this->createMock(ActivityManager::class);
$this->appContainer->expects($this->exactly(2))
->method('query')
->method('get')
->withConsecutive(
[FileService::class],
[FilesAppService::class]
@@ -156,7 +158,7 @@ class AttachmentServiceTest extends TestCase {
$fileAppServiceMock = $this->createMock(FilesAppService::class);
$appContainer->expects($this->exactly(3))
->method('query')
->method('get')
->withConsecutive(
[FileService::class],
[FilesAppService::class],
@@ -185,7 +187,7 @@ class AttachmentServiceTest extends TestCase {
$fileAppServiceMock = $this->createMock(FilesAppService::class);
$appContainer->expects($this->exactly(3))
->method('query')
->method('get')
->withConsecutive(
[FileService::class],
[FilesAppService::class],

View File

@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
@@ -240,6 +242,7 @@ class BoardServiceTest extends TestCase {
public function testDelete() {
$board = new Board();
$board->setId(42);
$board->setOwner('admin');
$board->setDeletedAt(0);
$this->boardMapper->expects($this->once())
@@ -252,7 +255,7 @@ class BoardServiceTest extends TestCase {
]);
$this->sessionMapper->expects($this->once())
->method('findAllActive')
->with(null)
->with(42)
->willReturn([]);
$boardDeleted = clone $board;
$boardDeleted->setDeletedAt(1);
@@ -267,7 +270,7 @@ class BoardServiceTest extends TestCase {
$user->method('getUID')->willReturn('admin');
$acl = new Acl();
$acl->setBoardId(123);
$acl->setType('user');
$acl->setType(Acl::PERMISSION_TYPE_USER);
$acl->setParticipant('admin');
$acl->setPermissionEdit(true);
$acl->setPermissionShare(true);
@@ -287,7 +290,7 @@ class BoardServiceTest extends TestCase {
'admin' => 'admin',
]);
$this->assertEquals($acl, $this->service->addAcl(
123, 'user', 'admin', true, true, true
123, Acl::PERMISSION_TYPE_USER, 'admin', true, true, true
));
}
@@ -323,7 +326,7 @@ class BoardServiceTest extends TestCase {
public function testAddAclExtendPermission($currentUserAcl, $providedAcl, $resultingAcl) {
$existingAcl = new Acl();
$existingAcl->setBoardId(123);
$existingAcl->setType('user');
$existingAcl->setType(Acl::PERMISSION_TYPE_USER);
$existingAcl->setParticipant('admin');
$existingAcl->setPermissionEdit($currentUserAcl[0]);
$existingAcl->setPermissionShare($currentUserAcl[1]);
@@ -391,14 +394,14 @@ class BoardServiceTest extends TestCase {
->method('dispatchTyped')
->with(new AclCreatedEvent($acl));
$this->assertEquals($expected, $this->service->addAcl(
123, 'user', 'admin', $providedAcl[0], $providedAcl[1], $providedAcl[2]
123, Acl::PERMISSION_TYPE_USER, 'admin', $providedAcl[0], $providedAcl[1], $providedAcl[2]
));
}
public function testUpdateAcl() {
$acl = new Acl();
$acl->setBoardId(123);
$acl->setType('user');
$acl->setType(Acl::PERMISSION_TYPE_USER);
$acl->setParticipant('admin');
$acl->setPermissionEdit(true);
$acl->setPermissionShare(true);

View File

@@ -183,6 +183,7 @@ class CardServiceTest extends TestCase {
->willReturn($boardMock);
$card = new Card();
$card->setId(1337);
$card->setStackId(123);
$this->cardMapper->expects($this->any())
->method('find')
->with(123)
@@ -200,6 +201,7 @@ class CardServiceTest extends TestCase {
->with([1337])
->willReturn([$a1, $a2]);
$cardExpected = new Card();
$cardExpected->setStackId(123);
$cardExpected->setId(1337);
$cardExpected->setAssignedUsers([$a1, $a2]);
$cardExpected->setRelatedBoard($boardMock);
@@ -218,6 +220,7 @@ class CardServiceTest extends TestCase {
'stackId' => 123,
'order' => 999,
'type' => 'text',
'id' => 0,
]);
$stack = Stack::fromParams([
'id' => 123,
@@ -243,6 +246,8 @@ class CardServiceTest extends TestCase {
$card = new Card();
$card->setId(1);
$card->setTitle('Card title');
$card->setType('test');
$card->setOrder(0);
$card->setOwner('admin');
$card->setStackId(12345);
$clonedCard = clone $card;
@@ -290,8 +295,7 @@ class CardServiceTest extends TestCase {
->willReturn([$label]);
$this->cardMapper->expects($this->once())
->method('assignLabel')
->with($clonedCard->getId(), $label->getId())
->willReturn($label);
->with($clonedCard->getId(), $label->getId());
$stackMock = new Stack();
$stackMock->setBoardId(1234);
@@ -329,6 +333,7 @@ class CardServiceTest extends TestCase {
]);
$this->cardMapper->expects($this->once())->method('find')->willReturn($card);
$this->cardMapper->expects($this->once())->method('update')->willReturnCallback(function ($c) {
$c->setId(1);
return $c;
});
$this->stackMapper->expects($this->once())

View File

@@ -220,8 +220,9 @@ class DefaultBoardServiceTest extends TestCase {
return $stack;
}
private function assembleTestCard($title, $stackId, $userId) {
private function assembleTestCard(string $title, int $stackId, string $userId): Card {
$card = new Card();
$card->setId(1);
$card->setTitle($title);
$card->setStackId($stackId);
$card->setType('text');

View File

@@ -192,14 +192,17 @@ class BoardImportServiceTest extends \Test\TestCase {
->expects($this->once())
->method('save');
$assignment = new Assignment();
$assignment->setId(1);
$this->trelloJsonService
->method('getCardAssignments')
->willReturn([
'fakecardid' => [new Assignment()]
'fakecardid' => [$assignment]
]);
$this->assignmentMapper
->expects($this->once())
->method('insert');
->method('insert')
->willReturn($assignment);
$this->boardImportService->import();
self::assertTrue(true);

View File

@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
@@ -29,6 +31,7 @@ use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\Db\Label;
use OCA\Deck\Db\LabelMapper;
use OCA\Deck\Validators\LabelServiceValidator;
use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
class LabelServiceTest extends TestCase {
@@ -42,9 +45,8 @@ class LabelServiceTest extends TestCase {
/** @var BoardService|\PHPUnit\Framework\MockObject\MockObject */
private $boardService;
/** @var ChangeHelper|\PHPUnit\Framework\MockObject\MockObject */
private $changeHelper;
/** @var LabelServiceValidator\MockObject */
private $labelServiceValidator;
private ChangeHelper&MockObject $changeHelper;
private LabelServiceValidator&MockObject $labelServiceValidator;
public function setUp(): void {
parent::setUp();
@@ -66,8 +68,9 @@ class LabelServiceTest extends TestCase {
}
public function testFind() {
$this->labelMapper->expects($this->once())->method('find')->willReturn(true);
$this->assertTrue($this->labelService->find(123));
$label = $this->createMock(Label::class);
$this->labelMapper->expects($this->once())->method('find')->willReturn($label);
$this->assertEquals($label, $this->labelService->find(123));
}
public function testCreate() {

View File

@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
@@ -48,8 +50,7 @@ use Test\TestCase;
*/
class StackServiceTest extends TestCase {
/** @var StackService */
private $stackService;
private StackService $stackService;
/** @var \PHPUnit\Framework\MockObject\MockObject|StackMapper */
private $stackMapper;
/** @var \PHPUnit\Framework\MockObject\MockObject|CardMapper */
@@ -251,6 +252,9 @@ class StackServiceTest extends TestCase {
$this->stackMapper->expects($this->once())
->method('findAll')
->willReturn($stacks);
$this->stackMapper->expects($this->any())
->method('update')
->willReturnCallback(fn (Stack $stack): Stack => $stack);
$actual = $this->stackService->reorder(1, 2);
$a = $this->createStack(1, 2);
$b = $this->createStack(2, 0);
@@ -259,7 +263,7 @@ class StackServiceTest extends TestCase {
$this->assertEquals($expected, $actual);
}
private function createStack($id, $order) {
private function createStack(int $id, int $order) {
$stack = new Stack();
$stack->setId($id);
$stack->setBoardId(1);