Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2019-06-27 19:07:08 +0300
committerJoas Schilling <coding@schilljs.com>2019-06-27 19:07:08 +0300
commit86164d4838a7f2d0102b4bd68f18ceab0bb04a93 (patch)
treea4fb803a70f2e29daed36ff2d10ec6b2763cb058
parent0fb7a8cb1991c0673cf3a3a5e59a1f502dfe03e0 (diff)
Add a capability
Signed-off-by: Joas Schilling <coding@schilljs.com>
-rw-r--r--docs/api-v1.md2
-rw-r--r--lib/Capabilities.php24
-rw-r--r--tests/php/CapabilitiesTest.php46
3 files changed, 59 insertions, 13 deletions
diff --git a/docs/api-v1.md b/docs/api-v1.md
index be2054bab..380470d3d 100644
--- a/docs/api-v1.md
+++ b/docs/api-v1.md
@@ -583,7 +583,7 @@ Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1`
+ `201 Created`
+ `400 Bad Request` In case of any other error
+ `404 Not Found` When the conversation could not be found for the participant
- + `413 Payload Too Large` When the message was longer than the allowed limit of 1000 characters
+ + `413 Payload Too Large` When the message was longer than the allowed limit of 32000 characters (or 1000 until Nextcloud 16.0.1, check the `spreed => config => chat => max-length` capability for the limit)
- Data:
The full message array of the new message, as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation)
diff --git a/lib/Capabilities.php b/lib/Capabilities.php
index f26437945..4fb5149b7 100644
--- a/lib/Capabilities.php
+++ b/lib/Capabilities.php
@@ -24,29 +24,40 @@ declare(strict_types=1);
namespace OCA\Spreed;
+use OCA\Spreed\Chat\ChatManager;
use OCP\Capabilities\IPublicCapability;
+use OCP\IConfig;
use OCP\IUser;
use OCP\IUserSession;
class Capabilities implements IPublicCapability {
+ /** @var IConfig */
+ protected $serverConfig;
/** @var Config */
- protected $config;
+ protected $talkConfig;
/** @var IUserSession */
protected $userSession;
- public function __construct(Config $config,
+ public function __construct(IConfig $serverConfig,
+ Config $talkConfig,
IUserSession $userSession) {
- $this->config = $config;
+ $this->serverConfig = $serverConfig;
+ $this->talkConfig = $talkConfig;
$this->userSession = $userSession;
}
public function getCapabilities(): array {
$user = $this->userSession->getUser();
- if ($user instanceof IUser && $this->config->isDisabledForUser($user)) {
+ if ($user instanceof IUser && $this->talkConfig->isDisabledForUser($user)) {
return [];
}
+ $maxChatLength = 1000;
+ if (version_compare($this->serverConfig->getSystemValueString('version', '0.0.0'), '16.0.2', '>=')) {
+ $maxChatLength = ChatManager::MAX_CHAT_LENGTH;
+ }
+
return [
'spreed' => [
'features' => [
@@ -68,6 +79,11 @@ class Capabilities implements IPublicCapability {
'locked-one-to-one-rooms',
'read-only-rooms',
],
+ 'config' => [
+ 'chat' => [
+ 'max-length' => $maxChatLength,
+ ],
+ ],
],
];
}
diff --git a/tests/php/CapabilitiesTest.php b/tests/php/CapabilitiesTest.php
index 1fe580d92..4b43df734 100644
--- a/tests/php/CapabilitiesTest.php
+++ b/tests/php/CapabilitiesTest.php
@@ -27,6 +27,7 @@ namespace OCA\Spreed\Tests\Unit;
use OCA\Spreed\Capabilities;
use OCA\Spreed\Config;
use OCP\Capabilities\IPublicCapability;
+use OCP\IConfig;
use OCP\IUser;
use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject;
@@ -34,20 +35,24 @@ use Test\TestCase;
class CapabilitiesTest extends TestCase {
+ /** @var IConfig|MockObject */
+ protected $serverConfig;
/** @var Config|MockObject */
- protected $config;
+ protected $talkConfig;
/** @var IUserSession|MockObject */
protected $userSession;
public function setUp() {
parent::setUp();
- $this->config = $this->createMock(Config::class);
+ $this->serverConfig = $this->createMock(IConfig::class);
+ $this->talkConfig = $this->createMock(Config::class);
$this->userSession = $this->createMock(IUserSession::class);
}
public function testGetCapabilitiesGuest(): void {
$capabilities = new Capabilities(
- $this->config,
+ $this->serverConfig,
+ $this->talkConfig,
$this->userSession
);
@@ -55,9 +60,14 @@ class CapabilitiesTest extends TestCase {
->method('getUser')
->willReturn(null);
- $this->config->expects($this->never())
+ $this->talkConfig->expects($this->never())
->method('isDisabledForUser');
+ $this->serverConfig->expects($this->once())
+ ->method('getSystemValueString')
+ ->with('version', '0.0.0')
+ ->willReturn('16.0.1');
+
$this->assertInstanceOf(IPublicCapability::class, $capabilities);
$this->assertSame([
'spreed' => [
@@ -80,13 +90,19 @@ class CapabilitiesTest extends TestCase {
'locked-one-to-one-rooms',
'read-only-rooms',
],
+ 'config' => [
+ 'chat' => [
+ 'max-length' => 1000,
+ ],
+ ],
],
], $capabilities->getCapabilities());
}
public function testGetCapabilitiesUserAllowed(): void {
$capabilities = new Capabilities(
- $this->config,
+ $this->serverConfig,
+ $this->talkConfig,
$this->userSession
);
@@ -95,11 +111,16 @@ class CapabilitiesTest extends TestCase {
->method('getUser')
->willReturn($user);
- $this->config->expects($this->once())
+ $this->talkConfig->expects($this->once())
->method('isDisabledForUser')
->with($user)
->willReturn(false);
+ $this->serverConfig->expects($this->once())
+ ->method('getSystemValueString')
+ ->with('version', '0.0.0')
+ ->willReturn('16.0.2');
+
$this->assertInstanceOf(IPublicCapability::class, $capabilities);
$this->assertSame([
'spreed' => [
@@ -122,13 +143,19 @@ class CapabilitiesTest extends TestCase {
'locked-one-to-one-rooms',
'read-only-rooms',
],
+ 'config' => [
+ 'chat' => [
+ 'max-length' => 32000,
+ ],
+ ],
],
], $capabilities->getCapabilities());
}
public function testGetCapabilitiesUserDisallowed(): void {
$capabilities = new Capabilities(
- $this->config,
+ $this->serverConfig,
+ $this->talkConfig,
$this->userSession
);
@@ -137,11 +164,14 @@ class CapabilitiesTest extends TestCase {
->method('getUser')
->willReturn($user);
- $this->config->expects($this->once())
+ $this->talkConfig->expects($this->once())
->method('isDisabledForUser')
->with($user)
->willReturn(true);
+ $this->serverConfig->expects($this->never())
+ ->method('getSystemValueString');
+
$this->assertInstanceOf(IPublicCapability::class, $capabilities);
$this->assertSame([], $capabilities->getCapabilities());
}