mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #59918 from nextcloud/feat/check-if-talk-enabled
feat(ocp): expose whether talk is enabled for user
This commit is contained in:
commit
57c57d7082
4 changed files with 179 additions and 12 deletions
|
|
@ -95,4 +95,20 @@ class Broker implements IBroker {
|
|||
|
||||
$this->backend->deleteConversation($id);
|
||||
}
|
||||
|
||||
public function isAllowedToCreateConversations(): bool {
|
||||
if (!$this->isEnabledForUser()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->backend->isAllowedToCreateConversations();
|
||||
}
|
||||
|
||||
public function isEnabledForUser(): bool {
|
||||
if (!$this->hasBackend()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->backend->isEnabledForUser();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,4 +65,24 @@ interface IBroker {
|
|||
* @since 26.0.0
|
||||
*/
|
||||
public function deleteConversation(string $id): void;
|
||||
|
||||
/**
|
||||
* Check if the logged-in user is allowed to create conversations
|
||||
*
|
||||
* Also returns false when no backend is available
|
||||
*
|
||||
* @return bool
|
||||
* @since 34.0.0
|
||||
*/
|
||||
public function isAllowedToCreateConversations(): bool;
|
||||
|
||||
/**
|
||||
* Check if the Talk backend is enabled for the logged-in user
|
||||
*
|
||||
* Also returns false when no backend is available
|
||||
*
|
||||
* @return bool
|
||||
* @since 34.0.0
|
||||
*/
|
||||
public function isEnabledForUser(): bool;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,4 +42,22 @@ interface ITalkBackend {
|
|||
* @since 26.0.0
|
||||
*/
|
||||
public function deleteConversation(string $id): void;
|
||||
|
||||
/**
|
||||
* Check if the logged-in user is allowed to create conversations
|
||||
*
|
||||
* Also returns false when no backend is enabled for the user
|
||||
*
|
||||
* @return bool
|
||||
* @since 34.0.0
|
||||
*/
|
||||
public function isAllowedToCreateConversations(): bool;
|
||||
|
||||
/**
|
||||
* Check if the Talk backend is enabled for the logged-in user
|
||||
*
|
||||
* @return bool
|
||||
* @since 34.0.0
|
||||
*/
|
||||
public function isEnabledForUser(): bool;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ use OCP\AppFramework\QueryException;
|
|||
use OCP\IServerContainer;
|
||||
use OCP\Talk\IConversationOptions;
|
||||
use OCP\Talk\ITalkBackend;
|
||||
use PHPUnit\Framework\Attributes\DataProvider;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use RuntimeException;
|
||||
use Test\TestCase;
|
||||
|
|
@ -52,7 +53,7 @@ class BrokerTest extends TestCase {
|
|||
}
|
||||
|
||||
public function testHasNoBackend(): void {
|
||||
$this->coordinator->expects(self::once())
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($this->createMock(RegistrationContext::class));
|
||||
|
||||
|
|
@ -64,16 +65,16 @@ class BrokerTest extends TestCase {
|
|||
public function testHasFaultyBackend(): void {
|
||||
$fakeTalkServiceClass = '\\OCA\\Spreed\\TalkBackend';
|
||||
$registrationContext = $this->createMock(RegistrationContext::class);
|
||||
$this->coordinator->expects(self::once())
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($registrationContext);
|
||||
$registrationContext->expects(self::once())
|
||||
$registrationContext->expects($this->once())
|
||||
->method('getTalkBackendRegistration')
|
||||
->willReturn(new ServiceRegistration('spreed', $fakeTalkServiceClass));
|
||||
$this->container->expects(self::once())
|
||||
$this->container->expects($this->once())
|
||||
->method('get')
|
||||
->willThrowException(new QueryException());
|
||||
$this->logger->expects(self::once())
|
||||
$this->logger->expects($this->once())
|
||||
->method('error');
|
||||
|
||||
self::assertFalse(
|
||||
|
|
@ -84,14 +85,14 @@ class BrokerTest extends TestCase {
|
|||
public function testHasBackend(): void {
|
||||
$fakeTalkServiceClass = '\\OCA\\Spreed\\TalkBackend';
|
||||
$registrationContext = $this->createMock(RegistrationContext::class);
|
||||
$this->coordinator->expects(self::once())
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($registrationContext);
|
||||
$registrationContext->expects(self::once())
|
||||
$registrationContext->expects($this->once())
|
||||
->method('getTalkBackendRegistration')
|
||||
->willReturn(new ServiceRegistration('spreed', $fakeTalkServiceClass));
|
||||
$talkService = $this->createMock(ITalkBackend::class);
|
||||
$this->container->expects(self::once())
|
||||
$this->container->expects($this->once())
|
||||
->method('get')
|
||||
->with($fakeTalkServiceClass)
|
||||
->willReturn($talkService);
|
||||
|
|
@ -111,19 +112,19 @@ class BrokerTest extends TestCase {
|
|||
public function testCreateConversation(): void {
|
||||
$fakeTalkServiceClass = '\\OCA\\Spreed\\TalkBackend';
|
||||
$registrationContext = $this->createMock(RegistrationContext::class);
|
||||
$this->coordinator->expects(self::once())
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($registrationContext);
|
||||
$registrationContext->expects(self::once())
|
||||
$registrationContext->expects($this->once())
|
||||
->method('getTalkBackendRegistration')
|
||||
->willReturn(new ServiceRegistration('spreed', $fakeTalkServiceClass));
|
||||
$talkService = $this->createMock(ITalkBackend::class);
|
||||
$this->container->expects(self::once())
|
||||
$this->container->expects($this->once())
|
||||
->method('get')
|
||||
->with($fakeTalkServiceClass)
|
||||
->willReturn($talkService);
|
||||
$options = $this->createMock(IConversationOptions::class);
|
||||
$talkService->expects(self::once())
|
||||
$talkService->expects($this->once())
|
||||
->method('createConversation')
|
||||
->with('Watercooler', [], $options);
|
||||
|
||||
|
|
@ -133,4 +134,116 @@ class BrokerTest extends TestCase {
|
|||
$options
|
||||
);
|
||||
}
|
||||
|
||||
public function testIsEnabledForUserNoBackend(): void {
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($this->createMock(RegistrationContext::class));
|
||||
|
||||
self::assertFalse(
|
||||
$this->broker->isEnabledForUser()
|
||||
);
|
||||
}
|
||||
|
||||
public static function dataIsEnabledForUser(): array {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
];
|
||||
}
|
||||
|
||||
#[DataProvider('dataIsEnabledForUser')]
|
||||
public function testIsEnabledForUser(bool $enabled): void {
|
||||
$fakeTalkServiceClass = '\\OCA\\Spreed\\TalkBackend';
|
||||
$registrationContext = $this->createMock(RegistrationContext::class);
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($registrationContext);
|
||||
$registrationContext->expects($this->once())
|
||||
->method('getTalkBackendRegistration')
|
||||
->willReturn(new ServiceRegistration('spreed', $fakeTalkServiceClass));
|
||||
$talkService = $this->createMock(ITalkBackend::class);
|
||||
$this->container->expects($this->once())
|
||||
->method('get')
|
||||
->with($fakeTalkServiceClass)
|
||||
->willReturn($talkService);
|
||||
$talkService->expects($this->once())
|
||||
->method('isEnabledForUser')
|
||||
->willReturn($enabled);
|
||||
|
||||
self::assertSame(
|
||||
$enabled,
|
||||
$this->broker->isEnabledForUser()
|
||||
);
|
||||
}
|
||||
|
||||
public function testIsAllowedToCreateConversationsNoBackend(): void {
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($this->createMock(RegistrationContext::class));
|
||||
|
||||
self::assertFalse(
|
||||
$this->broker->isAllowedToCreateConversations()
|
||||
);
|
||||
}
|
||||
|
||||
public function testIsAllowedToCreateConversationsBackendDisabled(): void {
|
||||
$fakeTalkServiceClass = '\\OCA\\Spreed\\TalkBackend';
|
||||
$registrationContext = $this->createMock(RegistrationContext::class);
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($registrationContext);
|
||||
$registrationContext->expects($this->once())
|
||||
->method('getTalkBackendRegistration')
|
||||
->willReturn(new ServiceRegistration('spreed', $fakeTalkServiceClass));
|
||||
$talkService = $this->createMock(ITalkBackend::class);
|
||||
$this->container->expects($this->once())
|
||||
->method('get')
|
||||
->with($fakeTalkServiceClass)
|
||||
->willReturn($talkService);
|
||||
$talkService->expects($this->once())
|
||||
->method('isEnabledForUser')
|
||||
->willReturn(false);
|
||||
$talkService->expects($this->never())
|
||||
->method('isAllowedToCreateConversations');
|
||||
|
||||
self::assertFalse(
|
||||
$this->broker->isAllowedToCreateConversations()
|
||||
);
|
||||
}
|
||||
|
||||
public static function dataIsAllowedToCreateConversations(): array {
|
||||
return [
|
||||
[true],
|
||||
[false],
|
||||
];
|
||||
}
|
||||
|
||||
#[DataProvider('dataIsAllowedToCreateConversations')]
|
||||
public function testIsAllowedToCreateConversations(bool $allowed): void {
|
||||
$fakeTalkServiceClass = '\\OCA\\Spreed\\TalkBackend';
|
||||
$registrationContext = $this->createMock(RegistrationContext::class);
|
||||
$this->coordinator->expects($this->once())
|
||||
->method('getRegistrationContext')
|
||||
->willReturn($registrationContext);
|
||||
$registrationContext->expects($this->once())
|
||||
->method('getTalkBackendRegistration')
|
||||
->willReturn(new ServiceRegistration('spreed', $fakeTalkServiceClass));
|
||||
$talkService = $this->createMock(ITalkBackend::class);
|
||||
$this->container->expects($this->once())
|
||||
->method('get')
|
||||
->with($fakeTalkServiceClass)
|
||||
->willReturn($talkService);
|
||||
$talkService->expects($this->once())
|
||||
->method('isEnabledForUser')
|
||||
->willReturn(true);
|
||||
$talkService->expects($this->once())
|
||||
->method('isAllowedToCreateConversations')
|
||||
->willReturn($allowed);
|
||||
|
||||
self::assertSame(
|
||||
$allowed,
|
||||
$this->broker->isAllowedToCreateConversations()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue