diff --git a/tests/integration/database/TransferOwnershipTest.php b/tests/integration/database/TransferOwnershipTest.php new file mode 100644 index 000000000..132a79202 --- /dev/null +++ b/tests/integration/database/TransferOwnershipTest.php @@ -0,0 +1,144 @@ +getUserManager()->registerBackend($backend); + $backend->createUser(self::TEST_OWNER, self::TEST_OWNER); + $backend->createUser(self::TEST_NEW_OWNER, self::TEST_NEW_OWNER); + // create group + $groupBackend = new \Test\Util\Group\Dummy(); + $groupBackend->createGroup(self::TEST_GROUP); + $groupBackend->addToGroup(self::TEST_OWNER, self::TEST_GROUP); + \OC::$server->getGroupManager()->addBackend($groupBackend); + } + + public function setUp(): void { + parent::setUp(); + \OC::$server->getUserSession()->login(self::TEST_OWNER, self::TEST_OWNER); + $this->boardService = \OC::$server->query(BoardService::class); + $this->stackService = \OC::$server->query(StackService::class); + $this->cardService = \OC::$server->query(CardService::class); + $this->assignmentService = \OC::$server->query(AssignmentService::class); + $this->assignedUsersMapper = \OC::$server->query(AssignedUsersMapper::class); + $this->createBoardWithExampleData(); + } + + public function createBoardWithExampleData() { + $stacks = []; + $board = $this->boardService->create('Test', self::TEST_OWNER, '000000'); + $id = $board->getId(); + $this->boardService->addAcl($id, Acl::PERMISSION_TYPE_USER, self::TEST_OWNER, true, true, true); + $this->boardService->addAcl($id, Acl::PERMISSION_TYPE_GROUP, self::TEST_GROUP, true, true, true); + $stacks[] = $this->stackService->create('Stack A', $id, 1); + $stacks[] = $this->stackService->create('Stack B', $id, 1); + $stacks[] = $this->stackService->create('Stack C', $id, 1); + $cards[] = $this->cardService->create('Card 1', $stacks[0]->getId(), 'text', 0, self::TEST_OWNER); + $cards[] = $this->cardService->create('Card 2', $stacks[0]->getId(), 'text', 0, self::TEST_OWNER); + $this->assignmentService->assignUser($cards[0]->getId(), self::TEST_OWNER); + $this->board = $board; + $this->cards = $cards; + $this->stacks = $stacks; + } + + /** + * @covers ::transferOwnership + */ + public function testTransferBoardOwnership() + { + $this->boardService->transferOwnership(self::TEST_OWNER, self::TEST_NEW_OWNER); + $board = $this->boardService->find($this->board->getId()); + $boardOwner = $board->getOwner(); + $this->assertEquals(self::TEST_NEW_OWNER, $boardOwner); + } + + /** + * @covers ::transferOwnership + */ + public function testTransferACLOwnership() + { + $this->boardService->transferOwnership(self::TEST_OWNER, self::TEST_NEW_OWNER); + $board = $this->boardService->find($this->board->getId()); + $acl = $board->getAcl(); + $isTargetInAcl = (bool)array_filter($acl, function ($item) { + return $item->getParticipant() === self::TEST_NEW_OWNER && $item->getType() === Acl::PERMISSION_TYPE_USER; + }); + $this->assertTrue($isTargetInAcl); + } + + /** + * @covers ::transferOwnership + */ + public function testNoTransferAclOwnershipIfGroupType() + { + $this->boardService->transferOwnership(self::TEST_OWNER, self::TEST_NEW_OWNER); + $board = $this->boardService->find($this->board->getId()); + $acl = $board->getAcl(); + $isGroupInAcl = (bool)array_filter($acl, function ($item) { + return $item->getParticipant() === self::TEST_GROUP && $item->getType() === Acl::PERMISSION_TYPE_GROUP; + }); + $this->assertTrue($isGroupInAcl); + } + /** + * @covers ::transferOwnership + */ + public function testTransferCardOwnership() + { + $this->boardService->transferOwnership(self::TEST_OWNER, self::TEST_NEW_OWNER); + $card = $this->cardService->find($this->cards[0]->getId()); + $cardOwner = $card->getOwner(); + $this->assertEquals(self::TEST_NEW_OWNER, $cardOwner); + } + + /** + * @covers ::transferOwnership + */ + public function testReassignCardToNewOwner() + { + $this->boardService->transferOwnership(self::TEST_OWNER, self::TEST_NEW_OWNER); + $assignedUsers = $this->assignedUsersMapper->find($this->cards[0]->getId()); + $participantsUIDs = []; + foreach ($assignedUsers as $user) { + $participantsUIDs[] = $user->getParticipant(); + } + $this->assertContains(self::TEST_NEW_OWNER, $participantsUIDs); + $this->assertNotContains(self::TEST_OWNER, $participantsUIDs); + } + + public function tearDown(): void { + $this->boardService->deleteForce($this->board->getId()); + parent::tearDown(); + } +}