diff --git a/lib/private/Teams/TeamManager.php b/lib/private/Teams/TeamManager.php index c466b1d20c088..ab3471cd45953 100644 --- a/lib/private/Teams/TeamManager.php +++ b/lib/private/Teams/TeamManager.php @@ -16,6 +16,7 @@ use OCP\IURLGenerator; use OCP\Server; use OCP\Teams\ITeamManager; +use OCP\Teams\ITeamFolderProvider; use OCP\Teams\ITeamResourceProvider; use OCP\Teams\Team; use Psr\Container\ContainerExceptionInterface; @@ -70,6 +71,17 @@ public function getProvider(string $providerId): ITeamResourceProvider { throw new \RuntimeException('No provider found for id ' . $providerId); } + #[\Override] + public function getTeamFolderProvider(): ?ITeamFolderProvider { + foreach ($this->getProviders() as $provider) { + if ($provider instanceof ITeamFolderProvider) { + return $provider; + } + } + + return null; + } + #[\Override] public function getSharedWith(string $teamId, string $userId): array { if (!$this->hasTeamSupport()) { diff --git a/lib/public/Teams/ITeamFolderProvider.php b/lib/public/Teams/ITeamFolderProvider.php new file mode 100644 index 0000000000000..1f78bc18f014d --- /dev/null +++ b/lib/public/Teams/ITeamFolderProvider.php @@ -0,0 +1,51 @@ +id; + } + + /** + * @since 35.0.0 + */ + public function getMountPoint(): string { + return $this->mountPoint; + } + + /** + * @return array{id: int, mountPoint: string} + * @since 35.0.0 + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'id' => $this->id, + 'mountPoint' => $this->mountPoint, + ]; + } +} diff --git a/tests/lib/Teams/TeamFolderTest.php b/tests/lib/Teams/TeamFolderTest.php new file mode 100644 index 0000000000000..0b5397dbf224e --- /dev/null +++ b/tests/lib/Teams/TeamFolderTest.php @@ -0,0 +1,23 @@ +assertSame(42, $folder->getId()); + $this->assertSame('Engineering', $folder->getMountPoint()); + $this->assertSame(['id' => 42, 'mountPoint' => 'Engineering'], $folder->jsonSerialize()); + } +} diff --git a/tests/lib/Teams/TeamManagerTest.php b/tests/lib/Teams/TeamManagerTest.php new file mode 100644 index 0000000000000..45d233e50e30e --- /dev/null +++ b/tests/lib/Teams/TeamManagerTest.php @@ -0,0 +1,61 @@ +createTeamManager(null); + + $this->assertNull($teamManager->getTeamFolderProvider()); + } + + public function testGetTeamFolderProviderReturnsNullWithoutFolderProvider(): void { + $teamManager = $this->createTeamManager($this->createMock(CirclesManager::class)); + $this->setProviders($teamManager, [ + 'other' => $this->createMock(ITeamResourceProvider::class), + ]); + + $this->assertNull($teamManager->getTeamFolderProvider()); + } + + public function testGetTeamFolderProviderReturnsRegisteredFolderProvider(): void { + $teamManager = $this->createTeamManager($this->createMock(CirclesManager::class)); + $folderProvider = $this->createMock(ITeamFolderProvider::class); + $this->setProviders($teamManager, [ + 'other' => $this->createMock(ITeamResourceProvider::class), + 'folder' => $folderProvider, + ]); + + $this->assertSame($folderProvider, $teamManager->getTeamFolderProvider()); + } + + private function createTeamManager(?CirclesManager $circlesManager): TeamManager { + return new TeamManager( + $this->createMock(Coordinator::class), + $this->createMock(IURLGenerator::class), + $circlesManager, + ); + } + + /** + * @param array $providers + */ + private function setProviders(TeamManager $teamManager, array $providers): void { + (new \ReflectionProperty(TeamManager::class, 'providers'))->setValue($teamManager, $providers); + } +} \ No newline at end of file