]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add file_sharing info to capabilities
authorRoeland Jago Douma <roeland@famdouma.nl>
Sat, 7 Feb 2015 07:07:53 +0000 (08:07 +0100)
committerRoeland Jago Douma <roeland@famdouma.nl>
Wed, 11 Mar 2015 14:02:55 +0000 (15:02 +0100)
Display the capabilities regarding file sharing in the capabilities API.
This will allow the clients to provide users a better experince.

apps/files_sharing/lib/capabilities.php [new file with mode: 0644]
apps/files_sharing/tests/capabilities.php [new file with mode: 0644]

diff --git a/apps/files_sharing/lib/capabilities.php b/apps/files_sharing/lib/capabilities.php
new file mode 100644 (file)
index 0000000..95ee810
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Copyright (c) Roeland Jago Douma <roeland@famdouma.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCA\Files_Sharing;
+
+use \OCP\IConfig;
+
+/**
+ * Class Capabilities
+ *
+ * @package OCA\Files_Sharing
+ */
+class Capabilities {
+
+       /** @var IConfig */
+       private $config;
+
+       /**
+        * @param IConfig $config
+        */
+       public function __construct(IConfig $config) {
+               $this->config = $config;
+       }
+
+       /**
+        * @return \OC_OCS_Result
+        */
+       public static function getCapabilities() {
+               $config = \OC::$server->getConfig();
+               $cap = new Capabilities($config);
+               return $cap->getCaps();
+       }
+
+
+       /**
+        * @return \OC_OCS_Result
+        */
+       public function getCaps() {
+               $res = array();
+
+               $public = false;
+               if ($this->config->getAppValue('core', 'shareapi_allow_links', 'yes') === 'yes') {
+                       $public = array();
+                       $public['password_enforced'] = ($this->config->getAppValue('core', 'shareapi_enforce_links_password', 'yes') === 'yes');
+
+                       $public['expire_date'] = false;
+                       if ($this->config->getAppValue('core', 'shareapi_default_expire_date', 'yes') === 'yes') {
+                               $public['expire_date'] = array();
+                               $public['expire_date']['days'] = $this->config->getAppValue('core', 'shareapi_expire_after_n_days', '7');
+                               $public['expire_date']['enforce'] = $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'yes') === 'yes';
+                       }
+
+                       $public['send_mail'] = $this->config->getAppValue('core', 'shareapi_allow_public_notification', 'yes') === 'yes';
+               }
+               $res["public"] = $public;
+
+               $res['user']['send_mail'] = $this->config->getAppValue('core', 'shareapi_allow_mail_notification', 'yes') === 'yes';
+
+               $res['resharing'] = $this->config->getAppValue('core', 'shareapi_allow_resharing', 'yes') === 'yes';
+
+
+               return new \OC_OCS_Result(array(
+                       'capabilities' => array(
+                               'files_sharing' => $res
+                               ),
+                       ));
+       }
+       
+}
diff --git a/apps/files_sharing/tests/capabilities.php b/apps/files_sharing/tests/capabilities.php
new file mode 100644 (file)
index 0000000..1b63030
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+/**
+  * Copyright (c) 2015 Roeland Jago Douma <roeland@famdouma.nl>
+  * This file is licensed under the Affero General Public License version 3 or
+  * later.
+  * See the COPYING-README file.
+  */
+
+namespace OCA\Files_Sharing\Tests;
+
+use OCA\Files_Sharing\Capabilities;
+use OCA\Files_Sharing\Tests\TestCase;
+
+/**
+ * Class FilesSharingCapabilitiesTest
+ */
+class FilesSharingCapabilitiesTest extends \Test\TestCase {
+
+       /**
+        * Test for the general part in each return statement and assert.
+        * Strip of the general part on the way.
+        *
+        * @param string[] $data Capabilities
+        * @return string[]
+        */
+       function getFilesSharingPart(array $data) {
+               $this->assertArrayHasKey('capabilities', $data);
+               $this->assertArrayHasKey('files_sharing', $data['capabilities']);
+               return $data['capabilities']['files_sharing'];
+       }
+
+       /**
+        * Create a mock config object and insert the values in $map tot the getAppValue
+        * function. Then obtain the capabilities and extract the first few
+        * levels in the array
+        *
+        * @param (string[])[] $map Map of arguments to return types for the getAppValue function in the mock
+        * @return string[]
+        */
+       function getResults(array $map) {
+               $stub = $this->getMockBuilder('\OCP\IConfig')->disableOriginalConstructor()->getMock();
+               $stub->method('getAppValue')->will($this->returnValueMap($map));
+               $cap = new Capabilities($stub);
+               $result = $this->getFilesSharingPart($cap->getCaps()->getData());
+               return $result;
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testNoLinkSharing() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertFalse($result['public']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testOnlyLinkSharing() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+               );
+               $result = $this->getResults($map);
+               $this->assertInternalType('array', $result['public']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkPassword() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_enforce_links_password', 'yes', 'yes'),
+               );
+               $result = $this->getResults($map);
+               $this->assertArrayHasKey('password_enforced', $result['public']);
+               $this->assertTrue($result['public']['password_enforced']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkNoPassword() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_enforce_links_password', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertArrayHasKey('password_enforced', $result['public']);
+               $this->assertFalse($result['public']['password_enforced']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkNoExpireDate() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_default_expire_date', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertArrayHasKey('expire_date', $result['public']);
+               $this->assertFalse($result['public']['expire_date']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkExpireDate() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_default_expire_date', 'yes', 'yes'),
+                       array('core', 'shareapi_expire_after_n_days', '7', '7'),
+                       array('core', 'shareapi_enforce_expire_date', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertArrayHasKey('expire_date', $result['public']);
+               $this->assertInternalType('array', $result['public']['expire_date']);
+               $this->assertArrayHasKey('days', $result['public']['expire_date']);
+               $this->assertFalse($result['public']['expire_date']['enforce']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkExpireDateEnforced() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_default_expire_date', 'yes', 'yes'),
+                       array('core', 'shareapi_enforce_expire_date', 'yes', 'yes'),
+               );
+               $result = $this->getResults($map);
+               $this->assertArrayHasKey('expire_date', $result['public']);
+               $this->assertInternalType('array', $result['public']['expire_date']);
+               $this->assertTrue($result['public']['expire_date']['enforce']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkSendMail() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_allow_public_notification', 'yes', 'yes'),
+               );
+               $result = $this->getResults($map);
+               $this->assertTrue($result['public']['send_mail']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testLinkNoSendMail() {
+               $map = array(
+                       array('core', 'shareapi_allow_links', 'yes', 'yes'),
+                       array('core', 'shareapi_allow_public_notification', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertFalse($result['public']['send_mail']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testUserSendMail() {
+               $map = array(
+                       array('core', 'shareapi_allow_mail_notification', 'yes', 'yes'),
+               );
+               $result = $this->getResults($map);
+               $this->assertTrue($result['user']['send_mail']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testUserNoSendMail() {
+               $map = array(
+                       array('core', 'shareapi_allow_mail_notification', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertFalse($result['user']['send_mail']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testResharing() {
+               $map = array(
+                       array('core', 'shareapi_allow_resharing', 'yes', 'yes'),
+               );
+               $result = $this->getResults($map);
+               $this->assertTrue($result['resharing']);
+       }
+
+       /**
+        * @covers OCA\Files_Sharing\Capabilities::getCaps
+        */
+       public function testNoResharing() {
+               $map = array(
+                       array('core', 'shareapi_allow_resharing', 'yes', 'no'),
+               );
+               $result = $this->getResults($map);
+               $this->assertFalse($result['resharing']);
+       }
+}