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

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2016-05-19 10:27:21 +0300
committerJoas Schilling <nickvergessen@owncloud.com>2016-05-19 10:27:21 +0300
commit55fc6536d33bd044a72437ac61d3c5ade09111cb (patch)
treeee2f5dd35734d7f8fdba75b77d5cfb98444abeb7 /tests/lib/AppTest.php
parent7f3f16d1554bd2adbe3287fbf09a1124664f54af (diff)
FIx lib/ a-d
Diffstat (limited to 'tests/lib/AppTest.php')
-rw-r--r--tests/lib/AppTest.php549
1 files changed, 549 insertions, 0 deletions
diff --git a/tests/lib/AppTest.php b/tests/lib/AppTest.php
new file mode 100644
index 00000000000..2e5b6f74ab7
--- /dev/null
+++ b/tests/lib/AppTest.php
@@ -0,0 +1,549 @@
+<?php
+/**
+ * Copyright (c) 2012 Bernhard Posselt <dev@bernhard-posselt.com>
+ * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+use OCP\IAppConfig;
+
+/**
+ * Class AppTest
+ *
+ * @group DB
+ */
+class AppTest extends \Test\TestCase {
+
+ const TEST_USER1 = 'user1';
+ const TEST_USER2 = 'user2';
+ const TEST_USER3 = 'user3';
+ const TEST_GROUP1 = 'group1';
+ const TEST_GROUP2 = 'group2';
+
+ function appVersionsProvider() {
+ return array(
+ // exact match
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '6.0',
+ 'requiremax' => '6.0',
+ ),
+ true
+ ),
+ // in-between match
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '5.0',
+ 'requiremax' => '7.0',
+ ),
+ true
+ ),
+ // app too old
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '5.0',
+ 'requiremax' => '5.0',
+ ),
+ false
+ ),
+ // app too new
+ array(
+ '5.0.0.0',
+ array(
+ 'requiremin' => '6.0',
+ 'requiremax' => '6.0',
+ ),
+ false
+ ),
+ // only min specified
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '6.0',
+ ),
+ true
+ ),
+ // only min specified fail
+ array(
+ '5.0.0.0',
+ array(
+ 'requiremin' => '6.0',
+ ),
+ false
+ ),
+ // only min specified legacy
+ array(
+ '6.0.0.0',
+ array(
+ 'require' => '6.0',
+ ),
+ true
+ ),
+ // only min specified legacy fail
+ array(
+ '4.0.0.0',
+ array(
+ 'require' => '6.0',
+ ),
+ false
+ ),
+ // only max specified
+ array(
+ '5.0.0.0',
+ array(
+ 'requiremax' => '6.0',
+ ),
+ true
+ ),
+ // only max specified fail
+ array(
+ '7.0.0.0',
+ array(
+ 'requiremax' => '6.0',
+ ),
+ false
+ ),
+ // variations of versions
+ // single OC number
+ array(
+ '4',
+ array(
+ 'require' => '4.0',
+ ),
+ true
+ ),
+ // multiple OC number
+ array(
+ '4.3.1',
+ array(
+ 'require' => '4.3',
+ ),
+ true
+ ),
+ // single app number
+ array(
+ '4',
+ array(
+ 'require' => '4',
+ ),
+ true
+ ),
+ // single app number fail
+ array(
+ '4.3',
+ array(
+ 'require' => '5',
+ ),
+ false
+ ),
+ // complex
+ array(
+ '5.0.0',
+ array(
+ 'require' => '4.5.1',
+ ),
+ true
+ ),
+ // complex fail
+ array(
+ '4.3.1',
+ array(
+ 'require' => '4.3.2',
+ ),
+ false
+ ),
+ // two numbers
+ array(
+ '4.3.1',
+ array(
+ 'require' => '4.4',
+ ),
+ false
+ ),
+ // one number fail
+ array(
+ '4.3.1',
+ array(
+ 'require' => '5',
+ ),
+ false
+ ),
+ // pre-alpha app
+ array(
+ '5.0.3',
+ array(
+ 'require' => '4.93',
+ ),
+ true
+ ),
+ // pre-alpha OC
+ array(
+ '6.90.0.2',
+ array(
+ 'require' => '6.90',
+ ),
+ true
+ ),
+ // pre-alpha OC max
+ array(
+ '6.90.0.2',
+ array(
+ 'requiremax' => '7',
+ ),
+ true
+ ),
+ // expect same major number match
+ array(
+ '5.0.3',
+ array(
+ 'require' => '5',
+ ),
+ true
+ ),
+ // expect same major number match
+ array(
+ '5.0.3',
+ array(
+ 'requiremax' => '5',
+ ),
+ true
+ ),
+ // dependencies versions before require*
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '5.0',
+ 'requiremax' => '7.0',
+ 'dependencies' => array(
+ 'owncloud' => array(
+ '@attributes' => array(
+ 'min-version' => '7.0',
+ 'max-version' => '7.0',
+ ),
+ ),
+ ),
+ ),
+ false
+ ),
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '5.0',
+ 'requiremax' => '7.0',
+ 'dependencies' => array(
+ 'owncloud' => array(
+ '@attributes' => array(
+ 'min-version' => '5.0',
+ 'max-version' => '5.0',
+ ),
+ ),
+ ),
+ ),
+ false
+ ),
+ array(
+ '6.0.0.0',
+ array(
+ 'requiremin' => '5.0',
+ 'requiremax' => '5.0',
+ 'dependencies' => array(
+ 'owncloud' => array(
+ '@attributes' => array(
+ 'min-version' => '5.0',
+ 'max-version' => '7.0',
+ ),
+ ),
+ ),
+ ),
+ true
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider appVersionsProvider
+ */
+ public function testIsAppCompatible($ocVersion, $appInfo, $expectedResult) {
+ $this->assertEquals($expectedResult, \OC_App::isAppCompatible($ocVersion, $appInfo));
+ }
+
+ /**
+ * Test that the isAppCompatible method also supports passing an array
+ * as $ocVersion
+ */
+ public function testIsAppCompatibleWithArray() {
+ $ocVersion = array(6);
+ $appInfo = array(
+ 'requiremin' => '6',
+ 'requiremax' => '6',
+ );
+ $this->assertTrue(\OC_App::isAppCompatible($ocVersion, $appInfo));
+ }
+
+ /**
+ * Tests that the app order is correct
+ */
+ public function testGetEnabledAppsIsSorted() {
+ $apps = \OC_App::getEnabledApps();
+ // copy array
+ $sortedApps = $apps;
+ sort($sortedApps);
+ // 'files' is always on top
+ unset($sortedApps[array_search('files', $sortedApps)]);
+ array_unshift($sortedApps, 'files');
+ $this->assertEquals($sortedApps, $apps);
+ }
+
+ /**
+ * Providers for the app config values
+ */
+ function appConfigValuesProvider() {
+ return array(
+ // logged in user1
+ array(
+ self::TEST_USER1,
+ array(
+ 'files',
+ 'app1',
+ 'app3',
+ 'appforgroup1',
+ 'appforgroup12',
+ 'dav',
+ 'federatedfilesharing',
+ ),
+ false
+ ),
+ // logged in user2
+ array(
+ self::TEST_USER2,
+ array(
+ 'files',
+ 'app1',
+ 'app3',
+ 'appforgroup12',
+ 'appforgroup2',
+ 'dav',
+ 'federatedfilesharing',
+ ),
+ false
+ ),
+ // logged in user3
+ array(
+ self::TEST_USER3,
+ array(
+ 'files',
+ 'app1',
+ 'app3',
+ 'appforgroup1',
+ 'appforgroup12',
+ 'appforgroup2',
+ 'dav',
+ 'federatedfilesharing',
+ ),
+ false
+ ),
+ // no user, returns all apps
+ array(
+ null,
+ array(
+ 'files',
+ 'app1',
+ 'app3',
+ 'appforgroup1',
+ 'appforgroup12',
+ 'appforgroup2',
+ 'dav',
+ 'federatedfilesharing',
+ ),
+ false,
+ ),
+ // user given, but ask for all
+ array(
+ self::TEST_USER1,
+ array(
+ 'files',
+ 'app1',
+ 'app3',
+ 'appforgroup1',
+ 'appforgroup12',
+ 'appforgroup2',
+ 'dav',
+ 'federatedfilesharing',
+ ),
+ true,
+ ),
+ );
+ }
+
+ /**
+ * Test enabled apps
+ *
+ * @dataProvider appConfigValuesProvider
+ */
+ public function testEnabledApps($user, $expectedApps, $forceAll) {
+ $userManager = \OC::$server->getUserManager();
+ $groupManager = \OC::$server->getGroupManager();
+ $user1 = $userManager->createUser(self::TEST_USER1, self::TEST_USER1);
+ $user2 = $userManager->createUser(self::TEST_USER2, self::TEST_USER2);
+ $user3 = $userManager->createUser(self::TEST_USER3, self::TEST_USER3);
+
+ $group1 = $groupManager->createGroup(self::TEST_GROUP1);
+ $group1->addUser($user1);
+ $group1->addUser($user3);
+ $group2 = $groupManager->createGroup(self::TEST_GROUP2);
+ $group2->addUser($user2);
+ $group2->addUser($user3);
+
+ \OC_User::setUserId($user);
+
+ $this->setupAppConfigMock()->expects($this->once())
+ ->method('getValues')
+ ->will($this->returnValue(
+ array(
+ 'app3' => 'yes',
+ 'app2' => 'no',
+ 'app1' => 'yes',
+ 'appforgroup1' => '["group1"]',
+ 'appforgroup2' => '["group2"]',
+ 'appforgroup12' => '["group2","group1"]',
+ )
+ )
+ );
+
+ $apps = \OC_App::getEnabledApps(false, $forceAll);
+
+ $this->restoreAppConfig();
+ \OC_User::setUserId(null);
+
+ $user1->delete();
+ $user2->delete();
+ $user3->delete();
+
+ $group1->delete();
+ $group2->delete();
+
+ $this->assertEquals($expectedApps, $apps);
+ }
+
+ /**
+ * Test isEnabledApps() with cache, not re-reading the list of
+ * enabled apps more than once when a user is set.
+ */
+ public function testEnabledAppsCache() {
+ $userManager = \OC::$server->getUserManager();
+ $user1 = $userManager->createUser(self::TEST_USER1, self::TEST_USER1);
+
+ \OC_User::setUserId(self::TEST_USER1);
+
+ $this->setupAppConfigMock()->expects($this->once())
+ ->method('getValues')
+ ->will($this->returnValue(
+ array(
+ 'app3' => 'yes',
+ 'app2' => 'no',
+ )
+ )
+ );
+
+ $apps = \OC_App::getEnabledApps();
+ $this->assertEquals(array('files', 'app3', 'dav', 'federatedfilesharing',), $apps);
+
+ // mock should not be called again here
+ $apps = \OC_App::getEnabledApps();
+ $this->assertEquals(array('files', 'app3', 'dav', 'federatedfilesharing',), $apps);
+
+ $this->restoreAppConfig();
+ \OC_User::setUserId(null);
+
+ $user1->delete();
+ }
+
+
+ private function setupAppConfigMock() {
+ $appConfig = $this->getMock(
+ '\OC\AppConfig',
+ array('getValues'),
+ array(\OC::$server->getDatabaseConnection()),
+ '',
+ false
+ );
+
+ $this->registerAppConfig($appConfig);
+ return $appConfig;
+ }
+
+ /**
+ * Register an app config mock for testing purposes.
+ *
+ * @param IAppConfig $appConfig app config mock
+ */
+ private function registerAppConfig(IAppConfig $appConfig) {
+ \OC::$server->registerService('AppConfig', function ($c) use ($appConfig) {
+ return $appConfig;
+ });
+ \OC::$server->registerService('AppManager', function (\OC\Server $c) use ($appConfig) {
+ return new \OC\App\AppManager($c->getUserSession(), $appConfig, $c->getGroupManager(), $c->getMemCacheFactory(), $c->getEventDispatcher());
+ });
+ }
+
+ /**
+ * Restore the original app config service.
+ */
+ private function restoreAppConfig() {
+ \OC::$server->registerService('AppConfig', function (\OC\Server $c) {
+ return new \OC\AppConfig($c->getDatabaseConnection());
+ });
+ \OC::$server->registerService('AppManager', function (\OC\Server $c) {
+ return new \OC\App\AppManager($c->getUserSession(), $c->getAppConfig(), $c->getGroupManager(), $c->getMemCacheFactory(), $c->getEventDispatcher());
+ });
+
+ // Remove the cache of the mocked apps list with a forceRefresh
+ \OC_App::getEnabledApps();
+ }
+
+ /**
+ * Providers for the app data values
+ */
+ function appDataProvider() {
+ return [
+ [
+ ['description' => " \t This is a multiline \n test with \n \t \n \n some new lines "],
+ ['description' => "This is a multiline test with\n\nsome new lines"]
+ ],
+ [
+ ['description' => " \t This is a multiline \n test with \n \t some new lines "],
+ ['description' => "This is a multiline test with some new lines"]
+ ],
+ [
+ ['description' => hex2bin('5065726d657420646520732761757468656e7469666965722064616e732070697769676f20646972656374656d656e74206176656320736573206964656e74696669616e7473206f776e636c6f75642073616e73206c65732072657461706572206574206d657420c3a0206a6f757273206365757820636920656e20636173206465206368616e67656d656e74206465206d6f742064652070617373652e0d0a0d')],
+ ['description' => "Permet de s'authentifier dans piwigo directement avec ses identifiants owncloud sans les retaper et met à jours ceux ci en cas de changement de mot de passe."]
+ ],
+ [
+ ['not-a-description' => " \t This is a multiline \n test with \n \t some new lines "],
+ ['not-a-description' => " \t This is a multiline \n test with \n \t some new lines "]
+ ],
+ [
+ ['description' => [100, 'bla']],
+ ['description' => ""]
+ ],
+ ];
+ }
+
+ /**
+ * Test app info parser
+ *
+ * @dataProvider appDataProvider
+ * @param array $data
+ * @param array $expected
+ */
+ public function testParseAppInfo(array $data, array $expected) {
+ $this->assertSame($expected, \OC_App::parseAppInfo($data));
+ }
+}
+