]> source.dussan.org Git - nextcloud-server.git/commitdiff
Extend Test\TestCase and do not use uniqid()
authorJoas Schilling <nickvergessen@gmx.de>
Wed, 7 Jan 2015 09:34:42 +0000 (10:34 +0100)
committerJoas Schilling <nickvergessen@gmx.de>
Wed, 7 Jan 2015 09:34:42 +0000 (10:34 +0100)
apps/provisioning_api/tests/AppsTest.php [deleted file]
apps/provisioning_api/tests/appstest.php [new file with mode: 0644]
apps/provisioning_api/tests/groupsTest.php [deleted file]
apps/provisioning_api/tests/groupstest.php [new file with mode: 0644]
apps/provisioning_api/tests/testcase.php [new file with mode: 0644]
apps/provisioning_api/tests/usersTest.php [deleted file]
apps/provisioning_api/tests/userstest.php [new file with mode: 0644]

diff --git a/apps/provisioning_api/tests/AppsTest.php b/apps/provisioning_api/tests/AppsTest.php
deleted file mode 100644 (file)
index c68259d..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-<?php
-
-/**
- * ownCloud
- *
- * @copyright (C) 2014 ownCloud, Inc.
- *
- * @author Tom <tom@owncloud.com>
- * @author Thomas Müller <deepdiver@owncloud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-class Test_Provisioning_Api_Apps extends PHPUnit_Framework_TestCase {
-
-       private $users = array();
-
-       function setUp() {
-               OC_Group::createGroup('admin');
-       }
-       /**
-        * Generates a temp user
-        * @param $num int number of users to generate
-        */
-       function generateUsers($num=1) {
-               for($i=0; $i<$num; $i++) {
-                       $user = uniqid();
-                       \OC_User::createUser($user, 'password');
-                       $this->users[] = $user;
-                       $users[] = $user;
-               }
-               return count($users) == 1 ? reset($users) : $users;
-       }
-
-       function testGetAppInfo() {
-
-               $result = \OCA\provisioning_API\Apps::getAppInfo(array('appid' => 'provisioning_api'));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-
-       }
-
-       function testGetAppInfoOnBadAppID() {
-
-               $result = \OCA\provisioning_API\Apps::getAppInfo(array('appid' => 'not_provisioning_api'));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(\OC_API::RESPOND_NOT_FOUND, $result->getStatusCode());
-
-       }
-
-       public function testGetApps() {
-
-               $user = $this->generateUsers();
-               \OC_Group::addToGroup($user, 'admin');
-               \OC_User::setUserId($user);
-
-               $result = \OCA\provisioning_API\Apps::getApps(array());
-
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals(count(\OC_App::listAllApps()), count($data['apps']));
-
-       }
-
-       public function testGetAppsEnabled() {
-
-               $_GET['filter'] = 'enabled';
-               $result = \OCA\provisioning_API\Apps::getApps(array('filter' => 'enabled'));
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps']));
-
-       }
-
-       public function testGetAppsDisabled() {
-
-               $_GET['filter'] = 'disabled';
-               $result = \OCA\provisioning_API\Apps::getApps(array('filter' => 'disabled'));
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $apps = \OC_App::listAllApps();
-               $list =  array();
-               foreach($apps as $app) {
-                       $list[] = $app['id'];
-               }
-               $disabled = array_diff($list, \OC_App::getEnabledApps());
-               $this->assertEquals(count($disabled), count($data['apps']));
-
-       }
-
-       function tearDown() {
-               OC_Group::deleteGroup('admin');
-       }
-
-}
diff --git a/apps/provisioning_api/tests/appstest.php b/apps/provisioning_api/tests/appstest.php
new file mode 100644 (file)
index 0000000..1d5642b
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+class AppsTest extends TestCase {
+       public function testGetAppInfo() {
+               $result = \OCA\provisioning_API\Apps::getAppInfo(array('appid' => 'provisioning_api'));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+
+       }
+
+       public function testGetAppInfoOnBadAppID() {
+
+               $result = \OCA\provisioning_API\Apps::getAppInfo(array('appid' => 'not_provisioning_api'));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(\OC_API::RESPOND_NOT_FOUND, $result->getStatusCode());
+
+       }
+
+       public function testGetApps() {
+
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+
+               $result = \OCA\provisioning_API\Apps::getApps(array());
+
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals(count(\OC_App::listAllApps()), count($data['apps']));
+
+       }
+
+       public function testGetAppsEnabled() {
+
+               $_GET['filter'] = 'enabled';
+               $result = \OCA\provisioning_API\Apps::getApps(array('filter' => 'enabled'));
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps']));
+
+       }
+
+       public function testGetAppsDisabled() {
+
+               $_GET['filter'] = 'disabled';
+               $result = \OCA\provisioning_API\Apps::getApps(array('filter' => 'disabled'));
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $apps = \OC_App::listAllApps();
+               $list =  array();
+               foreach($apps as $app) {
+                       $list[] = $app['id'];
+               }
+               $disabled = array_diff($list, \OC_App::getEnabledApps());
+               $this->assertEquals(count($disabled), count($data['apps']));
+
+       }
+}
diff --git a/apps/provisioning_api/tests/groupsTest.php b/apps/provisioning_api/tests/groupsTest.php
deleted file mode 100644 (file)
index 280e479..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-
-/**
- * ownCloud
- *
- * @copyright (C) 2014 ownCloud, Inc.
- *
- * @author Tom <tom@owncloud.com>
- * @author Thomas Müller <deepdiver@owncloud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-class Test_Provisioning_Api_Groups extends PHPUnit_Framework_TestCase {
-
-       private $users = array();
-
-       public function setUp() {
-               // These seems to be deleted by another test.
-               OC_Group::createGroup('admin');
-       }
-
-       /**
-        * Generates a temp user
-        * @param $num int number of users to generate
-        */
-       function generateUsers($num=1) {
-               for($i=0; $i<$num; $i++) {
-                       $user = uniqid();
-                       \OC_User::createUser($user, 'password');
-                       $this->users[] = $user;
-                       $users[] = $user;
-               }
-               return count($users) == 1 ? reset($users) : $users;
-       }
-
-       function testGetGroupAsUser() {
-
-               $users = $this->generateUsers(2);
-               \OC_User::setUserId($users[0]);
-
-               $group = uniqid();
-               \OC_Group::createGroup($group);
-               \OC_Group::addToGroup($users[1], $group);
-
-               $result = \OCA\provisioning_api\Groups::getGroup(array(
-                       'groupid' => $group,
-               ));
-
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(\OC_API::RESPOND_UNAUTHORISED, $result->getStatusCode());
-
-       }
-
-       function testGetGroupAsSubadmin() {
-
-               $users = $this->generateUsers(2);
-               \OC_User::setUserId($users[0]);
-
-               $group = uniqid();
-               \OC_Group::createGroup($group);
-               \OC_Group::addToGroup($users[0], $group);
-               \OC_Group::addToGroup($users[1], $group);
-
-               \OC_SubAdmin::createSubAdmin($users[0], $group);
-
-               $result = \OCA\provisioning_api\Groups::getGroup(array(
-                       'groupid' => $group,
-               ));
-
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertEquals(array('users' => $users), $result->getData());
-
-       }
-
-       function testGetGroupAsIrrelevantSubadmin() {
-
-               $users = $this->generateUsers(2);
-               \OC_User::setUserId($users[0]);
-
-               $group = uniqid();
-               \OC_Group::createGroup($group);
-               $group2 = uniqid();
-               \OC_Group::createGroup($group2);
-               \OC_Group::addToGroup($users[1], $group);
-               \OC_Group::addToGroup($users[0], $group2);
-
-               \OC_SubAdmin::createSubAdmin($users[0], $group2);
-
-               $result = \OCA\provisioning_api\Groups::getGroup(array(
-                       'groupid' => $group,
-               ));
-
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(\OC_API::RESPOND_UNAUTHORISED, $result->getStatusCode());
-
-       }
-
-       function testGetGroupAsAdmin() {
-
-               $users = $this->generateUsers(2);
-               \OC_User::setUserId($users[0]);
-
-               $group = uniqid();
-               \OC_Group::createGroup($group);
-
-               \OC_Group::addToGroup($users[1], $group);
-               \OC_Group::addToGroup($users[0], 'admin');
-
-               $result = \OCA\provisioning_api\Groups::getGroup(array(
-                       'groupid' => $group,
-               ));
-
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertEquals(array('users' => array($users[1])), $result->getData());
-
-       }
-
-       function testGetSubAdminsOfGroup() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_SubAdmin::createSubAdmin($user2, $group1);
-               $result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
-                       'groupid' => $group1,
-               ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals($user2, reset($data));
-               OC_Group::deleteGroup($group1);
-
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
-                       'groupid' => uniqid(),
-               ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(101, $result->getStatusCode());
-       }
-
-       /**
-        * Remove all the temporary users
-        */
-       function tearDown() {
-               foreach($this->users as $user) {
-                       \OC_User::deleteUser($user);
-               }
-               OC_Group::deleteGroup('admin');
-       }
-
-
-}
diff --git a/apps/provisioning_api/tests/groupstest.php b/apps/provisioning_api/tests/groupstest.php
new file mode 100644 (file)
index 0000000..a25ebfb
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+class GroupsTest extends TestCase {
+       public function testGetGroupAsUser() {
+
+               $users = $this->generateUsers(2);
+               \OC_User::setUserId($users[0]);
+
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::addToGroup($users[1], $group);
+
+               $result = \OCA\provisioning_api\Groups::getGroup(array(
+                       'groupid' => $group,
+               ));
+
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(\OC_API::RESPOND_UNAUTHORISED, $result->getStatusCode());
+
+       }
+
+       public function testGetGroupAsSubadmin() {
+
+               $users = $this->generateUsers(2);
+               \OC_User::setUserId($users[0]);
+
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::addToGroup($users[0], $group);
+               \OC_Group::addToGroup($users[1], $group);
+
+               \OC_SubAdmin::createSubAdmin($users[0], $group);
+
+               $result = \OCA\provisioning_api\Groups::getGroup(array(
+                       'groupid' => $group,
+               ));
+
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertEquals(array('users' => $users), $result->getData());
+
+       }
+
+       public function testGetGroupAsIrrelevantSubadmin() {
+
+               $users = $this->generateUsers(2);
+               \OC_User::setUserId($users[0]);
+
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               $group2 = $this->getUniqueID();
+               \OC_Group::createGroup($group2);
+               \OC_Group::addToGroup($users[1], $group);
+               \OC_Group::addToGroup($users[0], $group2);
+
+               \OC_SubAdmin::createSubAdmin($users[0], $group2);
+
+               $result = \OCA\provisioning_api\Groups::getGroup(array(
+                       'groupid' => $group,
+               ));
+
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(\OC_API::RESPOND_UNAUTHORISED, $result->getStatusCode());
+
+       }
+
+       public function testGetGroupAsAdmin() {
+
+               $users = $this->generateUsers(2);
+               \OC_User::setUserId($users[0]);
+
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+
+               \OC_Group::addToGroup($users[1], $group);
+               \OC_Group::addToGroup($users[0], 'admin');
+
+               $result = \OCA\provisioning_api\Groups::getGroup(array(
+                       'groupid' => $group,
+               ));
+
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertEquals(array('users' => array($users[1])), $result->getData());
+
+       }
+
+       public function testGetSubAdminsOfGroup() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_SubAdmin::createSubAdmin($user2, $group1);
+               $result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
+                       'groupid' => $group1,
+               ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals($user2, reset($data));
+               \OC_Group::deleteGroup($group1);
+
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $result = \OCA\provisioning_api\Groups::getSubAdminsOfGroup(array(
+                       'groupid' => $this->getUniqueID(),
+               ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(101, $result->getStatusCode());
+       }
+}
diff --git a/apps/provisioning_api/tests/testcase.php b/apps/provisioning_api/tests/testcase.php
new file mode 100644 (file)
index 0000000..d6e196b
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ * @author Thomas Müller <deepdiver@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+abstract class TestCase extends \Test\TestCase {
+       protected $users = array();
+
+       protected function setUp() {
+               parent::setUp();
+               \OC_Group::createGroup('admin');
+       }
+
+       /**
+        * Generates a temp user
+        * @param int $num number of users to generate
+        * @return array
+        */
+       protected function generateUsers($num = 1) {
+               $users = array();
+               for ($i = 0; $i < $num; $i++) {
+                       $user = $this->getUniqueID();
+                       \OC_User::createUser($user, 'password');
+                       $this->users[] = $user;
+                       $users[] = $user;
+               }
+               return count($users) == 1 ? reset($users) : $users;
+       }
+
+       protected function tearDown() {
+               foreach($this->users as $user) {
+                       \OC_User::deleteUser($user);
+               }
+
+               \OC_Group::deleteGroup('admin');
+
+               parent::tearDown();
+       }
+}
diff --git a/apps/provisioning_api/tests/usersTest.php b/apps/provisioning_api/tests/usersTest.php
deleted file mode 100644 (file)
index 381baa6..0000000
+++ /dev/null
@@ -1,799 +0,0 @@
-<?php
-
-/**
- * ownCloud
- *
- * @copyright (C) 2014 ownCloud, Inc.
- *
- * @author Tom <tom@owncloud.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
- *
- * You should have received a copy of the GNU Affero General Public
- * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-class Test_Provisioning_Api_Users extends PHPUnit_Framework_TestCase {
-
-       private $users = array();
-
-       public function setUp() {
-               OC_Group::createGroup('admin');
-       }
-
-       /**
-        * Generates a temp user
-        * @param $num int number of users to generate
-        */
-       function generateUsers($num=1) {
-               $users = array();
-               for($i=0; $i<$num; $i++) {
-                       $user = uniqid();
-                       \OC_User::createUser($user, 'password');
-                       $this->users[] = $user;
-                       $users[] = $user;
-               }
-               return count($users) == 1 ? reset($users) : $users;
-       }
-
-       function resetParams() {
-               $_GET = null;
-               $_POST = null;
-       }
-
-       // Test getting the list of users
-       function testGetUsers() {
-               $result = \OCA\provisioning_API\Users::getUsers(array());
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $count = $result->getData();
-               $count = count($count['users']);
-               $this->assertEquals(count(\OC_User::getUsers()), $count);
-
-               $user = $this->generateUsers();
-               $_GET['search'] = $user;
-               $result = \OCA\provisioning_API\Users::getUsers(array());
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals($user, reset($data['users']));
-
-               // Add several users
-               $this->generateUsers(10);
-               $this->resetParams();
-               $_GET['limit'] = 2;
-               $result = \OCA\provisioning_API\Users::getUsers(array());
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $count = $result->getData();
-               $count = count($count['users']);
-               $this->assertEquals(2, $count);
-
-               $this->resetParams();
-               $_GET['limit'] = 1;
-               $_GET['offset'] = 1;
-               $result = \OCA\provisioning_API\Users::getUsers(array());
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals(\OC_User::getUsers('', 1, 1), $data['users']);
-       }
-
-       function testAddUser() {
-               $this->resetParams();
-               $_POST['userid'] = uniqid();
-               $_POST['password'] = 'password';
-               $result = \OCA\provisioning_API\Users::addUser(array());
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertTrue(\OC_User::userExists($_POST['userid']));
-               $this->assertEquals($_POST['userid'], \OC_User::checkPassword($_POST['userid'], $_POST['password']));
-               $this->users[] = $_POST['userid'];
-       }
-
-       function testGetUserOnSelf() {
-               $user = $this->generateUsers();
-               \OC_User::setUserId($user);
-               $params['userid'] = $user;
-               $result = \OCA\provisioning_API\Users::getUser($params);
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-       }
-
-       function testGetUserOnNonExistingUser() {
-               $user = $this->generateUsers();
-               \OC_Group::addToGroup($user, 'admin');
-               \OC_User::setUserId($user);
-               $params = array();
-               $params['userid'] = uniqid();
-               while(\OC_User::userExists($params['userid'])) {
-                       $params['userid'] = uniqid();
-               }
-               $result = \OCA\provisioning_API\Users::getUser($params);
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(\OC_API::RESPOND_NOT_FOUND, $result->getStatusCode());
-
-       }
-
-       function testGetUserOnOtherUser() {
-               $users = $this->generateUsers(2);
-               $params['userid'] = $users[0];
-               \OC_User::setUserId($users[1]);
-               $result = \OCA\provisioning_API\Users::getUser($params);
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-
-               // Now as as admin
-               $users = $this->generateUsers(2);
-               $params['userid'] = $users[0];
-               \OC_Group::addToGroup($users[1], 'admin');
-               \OC_User::setUserId($users[1]);
-               $result = \OCA\provisioning_API\Users::getUser($params);
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals(\OC::$server->getConfig()->getUserValue($users[0], 'core', 'enabled', 'true'), $data['enabled']);
-       }
-
-       function testEditOwnDisplayName() {
-
-               // Test editing own name
-               $user = $this->generateUsers();
-               \OC_User::setUserId($user);
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user,
-                               '_put' => array(
-                                       'key' => 'display',
-                                       'value' => 'newname',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertEquals('newname', \OC_User::getDisplayName($user));
-
-       }
-
-       function testAdminEditDisplayNameOfUser() {
-
-               // Test admin editing users name
-               $user = $this->generateUsers();
-               \OC_Group::addToGroup($user, 'admin');
-               \OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user2,
-                               '_put' => array(
-                                       'key' => 'display',
-                                       'value' => 'newname',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertEquals('newname', \OC_User::getDisplayName($user2));
-
-       }
-
-       function testUserEditOtherUserDisplayName() {
-
-               // Test editing other users name
-               $user = $this->generateUsers();
-               \OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user2,
-                               '_put' => array(
-                                       'key' => 'display',
-                                       'value' => 'newname',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-
-       }
-
-       function testEditOwnQuota() {
-               $user = $this->generateUsers();
-               \OC_User::setUserId($user);
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user,
-                               '_put' => array(
-                                       'key' => 'quota',
-                                       'value' => '20G',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-       }
-
-       function testAdminEditOwnQuota() {
-               $user = $this->generateUsers();
-               \OC_Group::addToGroup($user, 'admin');
-               \OC_User::setUserId($user);
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user,
-                               '_put' => array(
-                                       'key' => 'quota',
-                                       'value' => '20G',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-       }
-
-       function testAdminEditOtherUserQuota() {
-               $user = $this->generateUsers();
-               \OC_Group::addToGroup($user, 'admin');
-               \OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user2,
-                               '_put' => array(
-                                       'key' => 'quota',
-                                       'value' => '20G',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-       }
-
-       function testUserEditOtherUserQuota() {
-               $user = $this->generateUsers();
-               \OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user2,
-                               '_put' => array(
-                                       'key' => 'quota',
-                                       'value' => '20G',
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-       }
-
-       function testUserEditOwnEmail() {
-               $user = $this->generateUsers();
-               $email = 'test@example.com';
-               \OC_User::setUserId($user);
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $user,
-                               '_put' => array(
-                                       'key' => 'email',
-                                       'value' => $email,
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertEquals($email, \OC::$server->getConfig()->getUserValue($user, 'settings', 'email', null));
-       }
-
-       function testUserEditOtherUserEmailAsUser() {
-               $users = $this->generateUsers(2);
-               $email = 'test@example.com';
-               \OC_User::setUserId($users[0]);
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $users[1],
-                               '_put' => array(
-                                       'key' => 'email',
-                                       'value' => $email,
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-       }
-
-       function testUserEditOtherUserEmailAsAdmin() {
-               $users = $this->generateUsers(2);
-               $email = 'test@example.com';
-               \OC_User::setUserId($users[0]);
-               \OC_Group::addToGroup($users[0], 'admin');
-               $result = \OCA\provisioning_API\Users::editUser(
-                       array(
-                               'userid' => $users[1],
-                               '_put' => array(
-                                       'key' => 'email',
-                                       'value' => $email,
-                                       ),
-                               )
-                       );
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertEquals($email, \OC::$server->getConfig()->getUserValue($users[1], 'settings', 'email', null));
-       }
-
-       function testDeleteSelf() {
-               $user = $this->generateUsers();
-               OC_User::setUserId($user);
-               $result = \OCA\provisioning_API\Users::deleteUser(array(
-                       'userid' => $user,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-       }
-
-       function testDeleteOtherAsUser() {
-               $user = $this->generateUsers();
-               OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $result = \OCA\provisioning_API\Users::deleteUser(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-       }
-
-       function testDeleteOtherAsSubAdmin() {
-               $user = $this->generateUsers();
-               OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $group = uniqid();
-               OC_Group::createGroup($group);
-               OC_Group::addToGroup($user, $group);
-               OC_Group::addToGroup($user2, $group);
-               OC_SubAdmin::createSubAdmin($user, $group);
-               $result = \OCA\provisioning_API\Users::deleteUser(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               OC_Group::deleteGroup($group);
-       }
-
-       function testDeleteOtherAsIrelevantSubAdmin() {
-               $user = $this->generateUsers();
-               OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $group = uniqid();
-               $group2 = uniqid();
-               OC_Group::createGroup($group);
-               OC_Group::createGroup($group2);
-               OC_Group::addToGroup($user, $group);
-               OC_Group::addToGroup($user2, $group2);
-               OC_SubAdmin::createSubAdmin($user, $group);
-               $result = \OCA\provisioning_API\Users::deleteUser(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               OC_Group::deleteGroup($group);
-               OC_Group::deleteGroup($group2);
-       }
-
-       function testDeleteOtherAsAdmin() {
-               $user = $this->generateUsers();
-               OC_Group::addToGroup($user, 'admin');
-               OC_User::setUserId($user);
-               $user2 = $this->generateUsers();
-               $result = \OCA\provisioning_API\Users::deleteUser(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-       }
-
-       function testDeleteSelfAsAdmin() {
-               $user = $this->generateUsers();
-               OC_Group::addToGroup($user, 'admin');
-               OC_User::setUserId($user);
-               $result = \OCA\provisioning_API\Users::deleteUser(array(
-                       'userid' => $user,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-       }
-
-       function testGetUsersGroupsOnSelf() {
-               $user = $this->generateUsers();
-               OC_User::setUserId($user);
-               $group = uniqid();
-               OC_Group::createGroup($group);
-               OC_Group::addToGroup($user, $group);
-               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
-                       'userid' => $user,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals($group, reset($data['groups']));
-               $this->assertEquals(1, count($data['groups']));
-               OC_Group::deleteGroup($group);
-       }
-
-       function testGetUsersGroupOnOther() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group = uniqid();
-               OC_Group::createGroup($group);
-               OC_Group::addToGroup($user2, $group);
-               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               OC_Group::deleteGroup($group);
-       }
-
-       function testGetUsersGroupOnOtherAsAdmin() {
-               $user1 = $this->generateUsers();
-               OC_Group::addToGroup($user1, 'admin');
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group = uniqid();
-               OC_Group::createGroup($group);
-               OC_Group::addToGroup($user2, $group);
-               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals($group, reset($data['groups']));
-               $this->assertEquals(1, count($data['groups']));
-               OC_Group::deleteGroup($group);
-       }
-
-       function testGetUsersGroupsOnOtherAsSubAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group1 = uniqid();
-               $group2 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::createGroup($group2);
-               OC_Group::addToGroup($user2, $group1);
-               OC_Group::addToGroup($user2, $group2);
-               OC_Group::addToGroup($user1, $group1);
-               OC_SubAdmin::createSubAdmin($user1, $group1);
-               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals($group1, reset($data['groups']));
-               $this->assertEquals(1, count($data['groups']));
-               OC_Group::deleteGroup($group1);
-               OC_Group::deleteGroup($group2);
-       }
-
-       function testGetUsersGroupsOnOtherAsIrelevantSubAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group1 = uniqid();
-               $group2 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::createGroup($group2);
-               OC_Group::addToGroup($user2, $group2);
-               OC_Group::addToGroup($user1, $group1);
-               OC_SubAdmin::createSubAdmin($user1, $group1);
-               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               OC_Group::deleteGroup($group1);
-               OC_Group::deleteGroup($group2);
-       }
-
-       function testAddToGroup() {
-               $user = $this->generateUsers();
-               $group = uniqid();
-               OC_Group::createGroup($group);
-               OC_User::setUserId($user);
-               $_POST['groupid'] = $group;
-               $result = \OCA\provisioning_API\Users::addToGroup(array(
-                       'userid' => $user,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertFalse(OC_Group::inGroup($user, $group));
-               OC_Group::deleteGroup($group);
-       }
-
-       function testAddToGroupAsAdmin() {
-               $user = $this->generateUsers();
-               OC_Group::addToGroup($user, 'admin');
-               $group = uniqid();
-               OC_Group::createGroup($group);
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user);
-               $_POST['groupid'] = $group;
-               $result = \OCA\provisioning_API\Users::addToGroup(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertTrue(OC_Group::inGroup($user2, $group));
-               OC_Group::deleteGroup($group);
-       }
-
-       function testAddToGroupAsSubAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_SubAdmin::createSubAdmin($user1, $group1);
-               $_POST['groupid'] = $group1;
-               $result = \OCA\provisioning_API\Users::addToGroup(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertFalse(OC_Group::inGroup($user2, $group1));
-               OC_Group::deleteGroup($group1);
-       }
-
-       function testAddToGroupAsIrelevantSubAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group1 = uniqid();
-               $group2 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::createGroup($group2);
-               OC_SubAdmin::createSubAdmin($user1, $group1);
-               $_POST['groupid'] = $group2;
-               $result = \OCA\provisioning_API\Users::addToGroup(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertFalse(OC_Group::inGroup($user2, $group2));
-               OC_Group::deleteGroup($group1);
-               OC_Group::deleteGroup($group2);
-       }
-
-       // test delete /cloud/users/{userid}/groups
-       function testRemoveFromGroupAsSelf() {
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::addToGroup($user1, $group1);
-               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
-                       'userid' => $user1,
-                       '_delete' => array(
-                               'groupid' => $group1,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertTrue(OC_Group::inGroup($user1, $group1));
-               OC_Group::deleteGroup($group1);
-       }
-
-       function testRemoveFromGroupAsAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::addToGroup($user2, $group1);
-               OC_Group::addToGroup($user1, 'admin');
-               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
-                       'userid' => $user2,
-                       '_delete' => array(
-                               'groupid' => $group1,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertFalse(OC_Group::inGroup($user2, $group1));
-               OC_Group::deleteGroup($group1);
-       }
-
-       function testRemoveFromGroupAsSubAdmin() {
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $user2 = $this->generateUsers();
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::addToGroup($user1, $group1);
-               OC_Group::addToGroup($user2, $group1);
-               OC_SubAdmin::createSubAdmin($user1, $group1);
-               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
-                       'userid' => $user2,
-                       '_delete' => array(
-                               'groupid' => $group1,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertFalse(OC_Group::inGroup($user2, $group1));
-               OC_Group::deleteGroup($group1);
-       }
-
-       function testRemoveFromGroupAsIrelevantSubAdmin() {
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               $user2 = $this->generateUsers();
-               $group1 = uniqid();
-               $group2 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_Group::createGroup($group2);
-               OC_Group::addToGroup($user1, $group1);
-               OC_Group::addToGroup($user2, $group2);
-               OC_SubAdmin::createSubAdmin($user1, $group1);
-               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
-                       'userid' => $user2,
-                       '_delete' => array(
-                               'groupid' => $group2,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertTrue(OC_Group::inGroup($user2, $group2));
-               OC_Group::deleteGroup($group1);
-               OC_Group::deleteGroup($group2);
-       }
-
-       function testCreateSubAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               $_POST['groupid'] = $group1;
-               $result = \OCA\provisioning_api\Users::addSubAdmin(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertTrue(OC_SubAdmin::isSubAdminofGroup($user2, $group1));
-               OC_Group::deleteGroup($group1);
-
-               $this->resetParams();
-
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $_POST['groupid'] = 'admin';
-               $result = \OCA\provisioning_api\Users::addSubAdmin(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertEquals(103, $result->getStatusCode());
-               $this->assertFalse($result->succeeded());
-
-               $this->resetParams();
-
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               $_POST['groupid'] = $group1;
-               $result = \OCA\provisioning_api\Users::addSubAdmin(array(
-                       'userid' => uniqid(),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(101, $result->getStatusCode());
-               OC_Group::deleteGroup($group1);
-       }
-
-       function testRemoveSubAdmin() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_SubAdmin::createSubAdmin($user2, $group1);
-               $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
-                       'userid' => $user2,
-                       '_delete' => array(
-                               'groupid' => $group1,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $this->assertTrue(!OC_SubAdmin::isSubAdminofGroup($user2, $group1));
-               OC_Group::deleteGroup($group1);
-
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
-                       'userid' => uniqid(),
-                       '_delete' => array(
-                               'groupid' => $group1,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertEquals(101, $result->getStatusCode());
-               $this->assertFalse($result->succeeded());
-
-               $this->resetParams();
-
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               $_POST['groupid'] = $group1;
-               $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
-                       'userid' => $user2,
-                       '_delete' => array(
-                               'groupid' => $group1,
-                               ),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(102, $result->getStatusCode());
-               OC_Group::deleteGroup($group1);
-       }
-
-       function testGetSubAdminGroups() {
-               $user1 = $this->generateUsers();
-               $user2 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               OC_Group::createGroup($group1);
-               OC_SubAdmin::createSubAdmin($user2, $group1);
-               $result = \OCA\provisioning_api\Users::getUserSubAdminGroups(array(
-                       'userid' => $user2,
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertTrue($result->succeeded());
-               $data = $result->getData();
-               $this->assertEquals($group1, reset($data));
-               OC_Group::deleteGroup($group1);
-
-               $user1 = $this->generateUsers();
-               OC_User::setUserId($user1);
-               OC_Group::addToGroup($user1, 'admin');
-               $group1 = uniqid();
-               $result = \OCA\provisioning_api\Users::getUserSubAdminGroups(array(
-                       'userid' => uniqid(),
-                       ));
-               $this->assertInstanceOf('OC_OCS_Result', $result);
-               $this->assertFalse($result->succeeded());
-               $this->assertEquals(101, $result->getStatusCode());
-       }
-
-       // Remove all the temporary users
-       function tearDown() {
-               foreach($this->users as $user) {
-                       \OC_User::deleteUser($user);
-               }
-               OC_Group::deleteGroup('admin');
-       }
-
-}
diff --git a/apps/provisioning_api/tests/userstest.php b/apps/provisioning_api/tests/userstest.php
new file mode 100644 (file)
index 0000000..917d06a
--- /dev/null
@@ -0,0 +1,770 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @copyright (C) 2014 ownCloud, Inc.
+ *
+ * @author Tom <tom@owncloud.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Provisioning_API\Tests;
+
+class UsersTest extends TestCase {
+       protected function resetParams() {
+               $_GET = null;
+               $_POST = null;
+       }
+
+       // Test getting the list of users
+       public function testGetUsers() {
+               $result = \OCA\provisioning_API\Users::getUsers(array());
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $count = $result->getData();
+               $count = count($count['users']);
+               $this->assertEquals(count(\OC_User::getUsers()), $count);
+
+               $user = $this->generateUsers();
+               $_GET['search'] = $user;
+               $result = \OCA\provisioning_API\Users::getUsers(array());
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals($user, reset($data['users']));
+
+               // Add several users
+               $this->generateUsers(10);
+               $this->resetParams();
+               $_GET['limit'] = 2;
+               $result = \OCA\provisioning_API\Users::getUsers(array());
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $count = $result->getData();
+               $count = count($count['users']);
+               $this->assertEquals(2, $count);
+
+               $this->resetParams();
+               $_GET['limit'] = 1;
+               $_GET['offset'] = 1;
+               $result = \OCA\provisioning_API\Users::getUsers(array());
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals(\OC_User::getUsers('', 1, 1), $data['users']);
+       }
+
+       public function testAddUser() {
+               $this->resetParams();
+               $_POST['userid'] = $this->getUniqueID();
+               $_POST['password'] = 'password';
+               $result = \OCA\provisioning_API\Users::addUser(array());
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertTrue(\OC_User::userExists($_POST['userid']));
+               $this->assertEquals($_POST['userid'], \OC_User::checkPassword($_POST['userid'], $_POST['password']));
+               $this->users[] = $_POST['userid'];
+       }
+
+       public function testGetUserOnSelf() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $params['userid'] = $user;
+               $result = \OCA\provisioning_API\Users::getUser($params);
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+       }
+
+       public function testGetUserOnNonExistingUser() {
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+               $params = array();
+               $params['userid'] = $this->getUniqueID();
+               while(\OC_User::userExists($params['userid'])) {
+                       $params['userid'] = $this->getUniqueID();
+               }
+               $result = \OCA\provisioning_API\Users::getUser($params);
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(\OC_API::RESPOND_NOT_FOUND, $result->getStatusCode());
+
+       }
+
+       public function testGetUserOnOtherUser() {
+               $users = $this->generateUsers(2);
+               $params['userid'] = $users[0];
+               \OC_User::setUserId($users[1]);
+               $result = \OCA\provisioning_API\Users::getUser($params);
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+
+               // Now as as admin
+               $users = $this->generateUsers(2);
+               $params['userid'] = $users[0];
+               \OC_Group::addToGroup($users[1], 'admin');
+               \OC_User::setUserId($users[1]);
+               $result = \OCA\provisioning_API\Users::getUser($params);
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals(\OC::$server->getConfig()->getUserValue($users[0], 'core', 'enabled', 'true'), $data['enabled']);
+       }
+
+       public function testEditOwnDisplayName() {
+
+               // Test editing own name
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user,
+                               '_put' => array(
+                                       'key' => 'display',
+                                       'value' => 'newname',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertEquals('newname', \OC_User::getDisplayName($user));
+
+       }
+
+       public function testAdminEditDisplayNameOfUser() {
+
+               // Test admin editing users name
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user2,
+                               '_put' => array(
+                                       'key' => 'display',
+                                       'value' => 'newname',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertEquals('newname', \OC_User::getDisplayName($user2));
+
+       }
+
+       public function testUserEditOtherUserDisplayName() {
+
+               // Test editing other users name
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user2,
+                               '_put' => array(
+                                       'key' => 'display',
+                                       'value' => 'newname',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+
+       }
+
+       public function testEditOwnQuota() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user,
+                               '_put' => array(
+                                       'key' => 'quota',
+                                       'value' => '20G',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+       }
+
+       public function testAdminEditOwnQuota() {
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user,
+                               '_put' => array(
+                                       'key' => 'quota',
+                                       'value' => '20G',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+       }
+
+       public function testAdminEditOtherUserQuota() {
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user2,
+                               '_put' => array(
+                                       'key' => 'quota',
+                                       'value' => '20G',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+       }
+
+       public function testUserEditOtherUserQuota() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user2,
+                               '_put' => array(
+                                       'key' => 'quota',
+                                       'value' => '20G',
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+       }
+
+       public function testUserEditOwnEmail() {
+               $user = $this->generateUsers();
+               $email = 'test@example.com';
+               \OC_User::setUserId($user);
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $user,
+                               '_put' => array(
+                                       'key' => 'email',
+                                       'value' => $email,
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertEquals($email, \OC::$server->getConfig()->getUserValue($user, 'settings', 'email', null));
+       }
+
+       public function testUserEditOtherUserEmailAsUser() {
+               $users = $this->generateUsers(2);
+               $email = 'test@example.com';
+               \OC_User::setUserId($users[0]);
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $users[1],
+                               '_put' => array(
+                                       'key' => 'email',
+                                       'value' => $email,
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+       }
+
+       public function testUserEditOtherUserEmailAsAdmin() {
+               $users = $this->generateUsers(2);
+               $email = 'test@example.com';
+               \OC_User::setUserId($users[0]);
+               \OC_Group::addToGroup($users[0], 'admin');
+               $result = \OCA\provisioning_API\Users::editUser(
+                       array(
+                               'userid' => $users[1],
+                               '_put' => array(
+                                       'key' => 'email',
+                                       'value' => $email,
+                                       ),
+                               )
+                       );
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertEquals($email, \OC::$server->getConfig()->getUserValue($users[1], 'settings', 'email', null));
+       }
+
+       public function testDeleteSelf() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $result = \OCA\provisioning_API\Users::deleteUser(array(
+                       'userid' => $user,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+       }
+
+       public function testDeleteOtherAsUser() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $result = \OCA\provisioning_API\Users::deleteUser(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+       }
+
+       public function testDeleteOtherAsSubAdmin() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::addToGroup($user, $group);
+               \OC_Group::addToGroup($user2, $group);
+               \OC_SubAdmin::createSubAdmin($user, $group);
+               $result = \OCA\provisioning_API\Users::deleteUser(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               \OC_Group::deleteGroup($group);
+       }
+
+       public function testDeleteOtherAsIrelevantSubAdmin() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $group = $this->getUniqueID();
+               $group2 = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::createGroup($group2);
+               \OC_Group::addToGroup($user, $group);
+               \OC_Group::addToGroup($user2, $group2);
+               \OC_SubAdmin::createSubAdmin($user, $group);
+               $result = \OCA\provisioning_API\Users::deleteUser(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               \OC_Group::deleteGroup($group);
+               \OC_Group::deleteGroup($group2);
+       }
+
+       public function testDeleteOtherAsAdmin() {
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+               $user2 = $this->generateUsers();
+               $result = \OCA\provisioning_API\Users::deleteUser(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+       }
+
+       public function testDeleteSelfAsAdmin() {
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               \OC_User::setUserId($user);
+               $result = \OCA\provisioning_API\Users::deleteUser(array(
+                       'userid' => $user,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+       }
+
+       public function testGetUsersGroupsOnSelf() {
+               $user = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::addToGroup($user, $group);
+               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+                       'userid' => $user,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals($group, reset($data['groups']));
+               $this->assertEquals(1, count($data['groups']));
+               \OC_Group::deleteGroup($group);
+       }
+
+       public function testGetUsersGroupOnOther() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::addToGroup($user2, $group);
+               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               \OC_Group::deleteGroup($group);
+       }
+
+       public function testGetUsersGroupOnOtherAsAdmin() {
+               $user1 = $this->generateUsers();
+               \OC_Group::addToGroup($user1, 'admin');
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_Group::addToGroup($user2, $group);
+               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals($group, reset($data['groups']));
+               $this->assertEquals(1, count($data['groups']));
+               \OC_Group::deleteGroup($group);
+       }
+
+       public function testGetUsersGroupsOnOtherAsSubAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group1 = $this->getUniqueID();
+               $group2 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::createGroup($group2);
+               \OC_Group::addToGroup($user2, $group1);
+               \OC_Group::addToGroup($user2, $group2);
+               \OC_Group::addToGroup($user1, $group1);
+               \OC_SubAdmin::createSubAdmin($user1, $group1);
+               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals($group1, reset($data['groups']));
+               $this->assertEquals(1, count($data['groups']));
+               \OC_Group::deleteGroup($group1);
+               \OC_Group::deleteGroup($group2);
+       }
+
+       public function testGetUsersGroupsOnOtherAsIrelevantSubAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group1 = $this->getUniqueID();
+               $group2 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::createGroup($group2);
+               \OC_Group::addToGroup($user2, $group2);
+               \OC_Group::addToGroup($user1, $group1);
+               \OC_SubAdmin::createSubAdmin($user1, $group1);
+               $result = \OCA\provisioning_API\Users::getUsersGroups(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               \OC_Group::deleteGroup($group1);
+               \OC_Group::deleteGroup($group2);
+       }
+
+       public function testAddToGroup() {
+               $user = $this->generateUsers();
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               \OC_User::setUserId($user);
+               $_POST['groupid'] = $group;
+               $result = \OCA\provisioning_API\Users::addToGroup(array(
+                       'userid' => $user,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertFalse(\OC_Group::inGroup($user, $group));
+               \OC_Group::deleteGroup($group);
+       }
+
+       public function testAddToGroupAsAdmin() {
+               $user = $this->generateUsers();
+               \OC_Group::addToGroup($user, 'admin');
+               $group = $this->getUniqueID();
+               \OC_Group::createGroup($group);
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user);
+               $_POST['groupid'] = $group;
+               $result = \OCA\provisioning_API\Users::addToGroup(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertTrue(\OC_Group::inGroup($user2, $group));
+               \OC_Group::deleteGroup($group);
+       }
+
+       public function testAddToGroupAsSubAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_SubAdmin::createSubAdmin($user1, $group1);
+               $_POST['groupid'] = $group1;
+               $result = \OCA\provisioning_API\Users::addToGroup(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertFalse(\OC_Group::inGroup($user2, $group1));
+               \OC_Group::deleteGroup($group1);
+       }
+
+       public function testAddToGroupAsIrelevantSubAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group1 = $this->getUniqueID();
+               $group2 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::createGroup($group2);
+               \OC_SubAdmin::createSubAdmin($user1, $group1);
+               $_POST['groupid'] = $group2;
+               $result = \OCA\provisioning_API\Users::addToGroup(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertFalse(\OC_Group::inGroup($user2, $group2));
+               \OC_Group::deleteGroup($group1);
+               \OC_Group::deleteGroup($group2);
+       }
+
+       // test delete /cloud/users/{userid}/groups
+       public function testRemoveFromGroupAsSelf() {
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::addToGroup($user1, $group1);
+               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+                       'userid' => $user1,
+                       '_delete' => array(
+                               'groupid' => $group1,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertTrue(\OC_Group::inGroup($user1, $group1));
+               \OC_Group::deleteGroup($group1);
+       }
+
+       public function testRemoveFromGroupAsAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::addToGroup($user2, $group1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+                       'userid' => $user2,
+                       '_delete' => array(
+                               'groupid' => $group1,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertFalse(\OC_Group::inGroup($user2, $group1));
+               \OC_Group::deleteGroup($group1);
+       }
+
+       public function testRemoveFromGroupAsSubAdmin() {
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $user2 = $this->generateUsers();
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::addToGroup($user1, $group1);
+               \OC_Group::addToGroup($user2, $group1);
+               \OC_SubAdmin::createSubAdmin($user1, $group1);
+               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+                       'userid' => $user2,
+                       '_delete' => array(
+                               'groupid' => $group1,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertFalse(\OC_Group::inGroup($user2, $group1));
+               \OC_Group::deleteGroup($group1);
+       }
+
+       public function testRemoveFromGroupAsIrelevantSubAdmin() {
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               $user2 = $this->generateUsers();
+               $group1 = $this->getUniqueID();
+               $group2 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_Group::createGroup($group2);
+               \OC_Group::addToGroup($user1, $group1);
+               \OC_Group::addToGroup($user2, $group2);
+               \OC_SubAdmin::createSubAdmin($user1, $group1);
+               $result = \OCA\provisioning_api\Users::removeFromGroup(array(
+                       'userid' => $user2,
+                       '_delete' => array(
+                               'groupid' => $group2,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertTrue(\OC_Group::inGroup($user2, $group2));
+               \OC_Group::deleteGroup($group1);
+               \OC_Group::deleteGroup($group2);
+       }
+
+       public function testCreateSubAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               $_POST['groupid'] = $group1;
+               $result = \OCA\provisioning_api\Users::addSubAdmin(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertTrue(\OC_SubAdmin::isSubAdminofGroup($user2, $group1));
+               \OC_Group::deleteGroup($group1);
+
+               $this->resetParams();
+
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $_POST['groupid'] = 'admin';
+               $result = \OCA\provisioning_api\Users::addSubAdmin(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertEquals(103, $result->getStatusCode());
+               $this->assertFalse($result->succeeded());
+
+               $this->resetParams();
+
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               $_POST['groupid'] = $group1;
+               $result = \OCA\provisioning_api\Users::addSubAdmin(array(
+                       'userid' => $this->getUniqueID(),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(101, $result->getStatusCode());
+               \OC_Group::deleteGroup($group1);
+       }
+
+       public function testRemoveSubAdmin() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_SubAdmin::createSubAdmin($user2, $group1);
+               $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
+                       'userid' => $user2,
+                       '_delete' => array(
+                               'groupid' => $group1,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $this->assertTrue(!\OC_SubAdmin::isSubAdminofGroup($user2, $group1));
+               \OC_Group::deleteGroup($group1);
+
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
+                       'userid' => $this->getUniqueID(),
+                       '_delete' => array(
+                               'groupid' => $group1,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertEquals(101, $result->getStatusCode());
+               $this->assertFalse($result->succeeded());
+
+               $this->resetParams();
+
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               $_POST['groupid'] = $group1;
+               $result = \OCA\provisioning_api\Users::removeSubAdmin(array(
+                       'userid' => $user2,
+                       '_delete' => array(
+                               'groupid' => $group1,
+                               ),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(102, $result->getStatusCode());
+               \OC_Group::deleteGroup($group1);
+       }
+
+       public function testGetSubAdminGroups() {
+               $user1 = $this->generateUsers();
+               $user2 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               \OC_Group::createGroup($group1);
+               \OC_SubAdmin::createSubAdmin($user2, $group1);
+               $result = \OCA\provisioning_api\Users::getUserSubAdminGroups(array(
+                       'userid' => $user2,
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertTrue($result->succeeded());
+               $data = $result->getData();
+               $this->assertEquals($group1, reset($data));
+               \OC_Group::deleteGroup($group1);
+
+               $user1 = $this->generateUsers();
+               \OC_User::setUserId($user1);
+               \OC_Group::addToGroup($user1, 'admin');
+               $group1 = $this->getUniqueID();
+               $result = \OCA\provisioning_api\Users::getUserSubAdminGroups(array(
+                       'userid' => $this->getUniqueID(),
+                       ));
+               $this->assertInstanceOf('OC_OCS_Result', $result);
+               $this->assertFalse($result->succeeded());
+               $this->assertEquals(101, $result->getStatusCode());
+       }
+}