summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/settings/controller/groupscontrollertest.php217
-rw-r--r--tests/settings/controller/userscontrollertest.php310
-rw-r--r--tests/settings/middleware/subadminmiddlewaretest.php91
3 files changed, 618 insertions, 0 deletions
diff --git a/tests/settings/controller/groupscontrollertest.php b/tests/settings/controller/groupscontrollertest.php
new file mode 100644
index 00000000000..ac4619cfdb3
--- /dev/null
+++ b/tests/settings/controller/groupscontrollertest.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Settings\Controller;
+
+use OC\Group\Group;
+use \OC\Settings\Application;
+use OCP\AppFramework\Http\DataResponse;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class GroupsControllerTest extends \Test\TestCase {
+
+ /** @var \OCP\AppFramework\IAppContainer */
+ private $container;
+
+ /** @var GroupsController */
+ private $groupsController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['AppName'] = 'settings';
+ $this->container['GroupManager'] = $this->getMockBuilder('\OCP\IGroupManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['IsAdmin'] = true;
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($text, $parameters = array()) {
+ return vsprintf($text, $parameters);
+ }));
+ $this->groupsController = $this->container['GroupsController'];
+
+ }
+
+ /**
+ * TODO: Since GroupManager uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testIndex() {
+ $firstGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $firstGroup
+ ->method('getGID')
+ ->will($this->returnValue('firstGroup'));
+ $firstGroup
+ ->method('count')
+ ->will($this->returnValue(12));
+ $secondGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $secondGroup
+ ->method('getGID')
+ ->will($this->returnValue('secondGroup'));
+ $secondGroup
+ ->method('count')
+ ->will($this->returnValue(25));
+ $thirdGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $thirdGroup
+ ->method('getGID')
+ ->will($this->returnValue('thirdGroup'));
+ $thirdGroup
+ ->method('count')
+ ->will($this->returnValue(14));
+ $fourthGroup = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $fourthGroup
+ ->method('getGID')
+ ->will($this->returnValue('admin'));
+ $fourthGroup
+ ->method('count')
+ ->will($this->returnValue(18));
+ /** @var \OC\Group\Group[] $groups */
+ $groups = array();
+ $groups[] = $firstGroup;
+ $groups[] = $secondGroup;
+ $groups[] = $thirdGroup;
+ $groups[] = $fourthGroup;
+
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserSession']
+ ->expects($this->once())
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('MyAdminUser'));
+ $this->container['GroupManager']
+ ->method('search')
+ ->will($this->returnValue($groups));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'data' => array(
+ 'adminGroups' => array(
+ 0 => array(
+ 'id' => 'admin',
+ 'name' => 'admin',
+ 'usercount' => 18
+ )
+ ),
+ 'groups' =>
+ array(
+ 0 => array(
+ 'id' => 'secondGroup',
+ 'name' => 'secondGroup',
+ 'usercount' => 25
+ ),
+ 1 => array(
+ 'id' => 'thirdGroup',
+ 'name' => 'thirdGroup',
+ 'usercount' => 14
+ ),
+ 2 => array(
+ 'id' => 'firstGroup',
+ 'name' => 'firstGroup',
+ 'usercount' => 12
+ )
+ )
+ )
+ )
+ );
+ $response = $this->groupsController->index();
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testCreateWithExistingGroup() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('groupExists')
+ ->with('ExistingGroup')
+ ->will($this->returnValue(true));
+
+ $expectedResponse = new DataResponse(array('status' => 'error', 'data' => array('message' => 'Group already exists.')));
+ $response = $this->groupsController->create('ExistingGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testCreateSuccessful() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('groupExists')
+ ->with('NewGroup')
+ ->will($this->returnValue(false));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('createGroup')
+ ->with('NewGroup')
+ ->will($this->returnValue(true));
+
+ $expectedResponse = new DataResponse(array('status' => 'success', 'data' => array('groupname' => 'NewGroup')));
+ $response = $this->groupsController->create('NewGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testCreateUnsuccessful() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('groupExists')
+ ->with('NewGroup')
+ ->will($this->returnValue(false));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('createGroup')
+ ->with('NewGroup')
+ ->will($this->returnValue(false));
+
+ $expectedResponse = new DataResponse(array('status' => 'error', 'data' => array('message' => 'Unable to add group.')));
+ $response = $this->groupsController->create('NewGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDestroySuccessful() {
+ $group = $this->getMockBuilder('\OC\Group\Group')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('get')
+ ->with('ExistingGroup')
+ ->will($this->returnValue($group));
+ $group
+ ->expects($this->once())
+ ->method('delete')
+ ->will($this->returnValue(true));
+
+ $expectedResponse = new DataResponse(array('status' => 'success', 'data' => array('groupname' => 'ExistingGroup')));
+ $response = $this->groupsController->destroy('ExistingGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ public function testDestroyUnsuccessful() {
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('get')
+ ->with('ExistingGroup')
+ ->will($this->returnValue(null));
+
+ $expectedResponse = new DataResponse(array('status' => 'error', 'data' => array('message' => 'Unable to delete group.')));
+ $response = $this->groupsController->destroy('ExistingGroup');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+}
diff --git a/tests/settings/controller/userscontrollertest.php b/tests/settings/controller/userscontrollertest.php
new file mode 100644
index 00000000000..8aee2b2dd5a
--- /dev/null
+++ b/tests/settings/controller/userscontrollertest.php
@@ -0,0 +1,310 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Settings\Controller;
+
+use \OC\Settings\Application;
+use OCP\AppFramework\Http\DataResponse;
+
+/**
+ * @package OC\Settings\Controller
+ */
+class UsersControllerTest extends \Test\TestCase {
+
+ /** @var \OCP\AppFramework\IAppContainer */
+ private $container;
+
+ /** @var UsersController */
+ private $usersController;
+
+ protected function setUp() {
+ $app = new Application();
+ $this->container = $app->getContainer();
+ $this->container['AppName'] = 'settings';
+ $this->container['GroupManager'] = $this->getMockBuilder('\OCP\IGroupManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserManager'] = $this->getMockBuilder('\OCP\IUserManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['UserSession'] = $this->getMockBuilder('\OC\User\Session')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['L10N'] = $this->getMockBuilder('\OCP\IL10N')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['Config'] = $this->getMockBuilder('\OCP\IConfig')
+ ->disableOriginalConstructor()->getMock();
+ $this->container['IsAdmin'] = true;
+ $this->container['L10N']
+ ->expects($this->any())
+ ->method('t')
+ ->will($this->returnCallback(function($text, $parameters = array()) {
+ return vsprintf($text, $parameters);
+ }));
+ $this->usersController = $this->container['UsersController'];
+
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testIndex() {
+ $admin = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $admin
+ ->method('getLastLogin')
+ ->will($this->returnValue(12));
+ $admin
+ ->method('getHome')
+ ->will($this->returnValue('/home/admin'));
+ $foo = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $foo
+ ->method('getLastLogin')
+ ->will($this->returnValue(500));
+ $foo
+ ->method('getHome')
+ ->will($this->returnValue('/home/foo'));
+ $bar = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $bar
+ ->method('getLastLogin')
+ ->will($this->returnValue(3999));
+ $bar
+ ->method('getHome')
+ ->will($this->returnValue('/home/bar'));
+
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('displayNamesInGroup')
+ ->will($this->returnValue(array('foo' => 'M. Foo', 'admin' => 'S. Admin', 'bar' => 'B. Ar')));
+ $this->container['GroupManager']
+ ->expects($this->exactly(3))
+ ->method('getUserGroupIds')
+ ->will($this->onConsecutiveCalls(array('Users', 'Support'), array('admins', 'Support'), array('External Users')));
+ $this->container['UserManager']
+ ->expects($this->exactly(3))
+ ->method('get')
+ ->will($this->onConsecutiveCalls($foo, $admin, $bar));
+ $this->container['Config']
+ ->expects($this->exactly(3))
+ ->method('getUserValue')
+ ->will($this->onConsecutiveCalls(1024, 404, 2323));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 0 => array(
+ 'name' => 'foo',
+ 'displayname' => 'M. Foo',
+ 'groups' => array('Users', 'Support'),
+ 'subadmin' => array(),
+ 'quota' => 1024,
+ 'storageLocation' => '/home/foo',
+ 'lastLogin' => 500
+ ),
+ 1 => array(
+ 'name' => 'admin',
+ 'displayname' => 'S. Admin',
+ 'groups' => array('admins', 'Support'),
+ 'subadmin' => array(),
+ 'quota' => 404,
+ 'storageLocation' => '/home/admin',
+ 'lastLogin' => 12
+ ),
+ 2 => array(
+ 'name' => 'bar',
+ 'displayname' => 'B. Ar',
+ 'groups' => array('External Users'),
+ 'subadmin' => array(),
+ 'quota' => 2323,
+ 'storageLocation' => '/home/bar',
+ 'lastLogin' => 3999
+ ),
+ )
+ )
+ );
+ $response = $this->usersController->index(0, 10, 'pattern');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testCreateSuccessfulWithoutGroup() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('createUser')
+ ->will($this->onConsecutiveCalls($user));
+
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'username' => 'foo',
+ 'groups' => null,
+ 'storageLocation' => '/home/user'
+ )
+ )
+ );
+ $response = $this->usersController->create('foo', 'password', array());
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testCreateSuccessfulWithGroup() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $user
+ ->method('getHome')
+ ->will($this->returnValue('/home/user'));
+ $existingGroup = $this->getMockBuilder('\OCP\IGroup')
+ ->disableOriginalConstructor()->getMock();
+ $existingGroup
+ ->expects($this->once())
+ ->method('addUser')
+ ->with($user);
+ $newGroup = $this->getMockBuilder('\OCP\IGroup')
+ ->disableOriginalConstructor()->getMock();
+ $newGroup
+ ->expects($this->once())
+ ->method('addUser')
+ ->with($user);
+
+ $this->container['UserManager']
+ ->expects($this->once())
+ ->method('createUser')
+ ->will($this->onConsecutiveCalls($user));
+ $this->container['GroupManager']
+ ->expects($this->exactly(2))
+ ->method('get')
+ ->will($this->onConsecutiveCalls(null, $existingGroup));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('createGroup')
+ ->with('NewGroup')
+ ->will($this->onConsecutiveCalls($newGroup));
+ $this->container['GroupManager']
+ ->expects($this->once())
+ ->method('getUserGroupIds')
+ ->with($user)
+ ->will($this->onConsecutiveCalls(array('NewGroup', 'ExistingGroup')));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'username' => 'foo',
+ 'groups' => array('NewGroup', 'ExistingGroup'),
+ 'storageLocation' => '/home/user'
+ )
+ )
+ );
+ $response = $this->usersController->create('foo', 'password', array('NewGroup', 'ExistingGroup'));
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testCreateUnsuccessful() {
+ $this->container['UserManager']
+ ->method('createUser')
+ ->will($this->throwException(new \Exception()));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => 'Unable to create user.'
+ )
+ )
+ );
+ $response = $this->usersController->create('foo', 'password', array());
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testDestroySelf() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('myself'));
+ $this->container['UserSession']
+ ->method('getUser')
+ ->will($this->returnValue($user));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'error',
+ 'data' => array(
+ 'message' => 'Unable to delete user.'
+ )
+ )
+ );
+ $response = $this->usersController->destroy('myself');
+ $this->assertEquals($expectedResponse, $response);
+ }
+
+ /**
+ * TODO: Since the function uses the static OC_Subadmin class it can't be mocked
+ * to test for subadmins. Thus the test always assumes you have admin permissions...
+ */
+ public function testDestroy() {
+ $user = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $user
+ ->expects($this->once())
+ ->method('getUID')
+ ->will($this->returnValue('Admin'));
+ $toDeleteUser = $this->getMockBuilder('\OC\User\User')
+ ->disableOriginalConstructor()->getMock();
+ $toDeleteUser
+ ->expects($this->once())
+ ->method('delete')
+ ->will($this->returnValue(true));
+ $this->container['UserSession']
+ ->method('getUser')
+ ->will($this->returnValue($user));
+ $this->container['UserManager']
+ ->method('get')
+ ->with('UserToDelete')
+ ->will($this->returnValue($toDeleteUser));
+
+ $expectedResponse = new DataResponse(
+ array(
+ 'status' => 'success',
+ 'data' => array(
+ 'username' => 'UserToDelete'
+ )
+ )
+ );
+ $response = $this->usersController->destroy('UserToDelete');
+ $this->assertEquals($expectedResponse, $response);
+ }
+}
diff --git a/tests/settings/middleware/subadminmiddlewaretest.php b/tests/settings/middleware/subadminmiddlewaretest.php
new file mode 100644
index 00000000000..e5572cfba52
--- /dev/null
+++ b/tests/settings/middleware/subadminmiddlewaretest.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * @author Lukas Reschke
+ * @copyright 2014 Lukas Reschke lukas@owncloud.com
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Settings\Middleware;
+
+use OC\AppFramework\Utility\ControllerMethodReflector;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\TemplateResponse;
+
+/**
+ * Verifies whether an user has at least subadmin rights.
+ * To bypass use the `@NoSubadminRequired` annotation
+ *
+ * @package OC\Settings\Middleware
+ */
+class SubadminMiddlewareTest extends \Test\TestCase {
+ /** @var SubadminMiddleware */
+ private $subadminMiddlewareAsSubAdmin;
+ /** @var SubadminMiddleware */
+ private $subadminMiddleware;
+ /** @var ControllerMethodReflector */
+ private $reflector;
+ /** @var Controller */
+ private $controller;
+
+ protected function setUp() {
+ $this->reflector = $this->getMockBuilder('\OC\AppFramework\Utility\ControllerMethodReflector')
+ ->disableOriginalConstructor()->getMock();
+ $this->controller = $this->getMockBuilder('\OCP\AppFramework\Controller')
+ ->disableOriginalConstructor()->getMock();
+
+ $this->subadminMiddlewareAsSubAdmin = new SubadminMiddleware($this->reflector, true);
+ $this->subadminMiddleware = new SubadminMiddleware($this->reflector, false);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Logged in user must be a subadmin
+ */
+ public function testBeforeControllerAsUserWithExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(false));
+ $this->subadminMiddleware->beforeController($this->controller, 'foo');
+ }
+
+
+ public function testBeforeControllerAsUserWithoutExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(true));
+ $this->subadminMiddleware->beforeController($this->controller, 'foo');
+ }
+
+ public function testBeforeControllerAsSubAdminWithoutExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(false));
+ $this->subadminMiddlewareAsSubAdmin->beforeController($this->controller, 'foo');
+ }
+
+ public function testBeforeControllerAsSubAdminWithExemption() {
+ $this->reflector
+ ->expects($this->once())
+ ->method('hasAnnotation')
+ ->with('NoSubadminRequired')
+ ->will($this->returnValue(true));
+ $this->subadminMiddlewareAsSubAdmin->beforeController($this->controller, 'foo');
+ }
+
+
+
+
+ public function testAfterException() {
+ $expectedResponse = new TemplateResponse('core', '403', array(), 'guest');
+ $this->assertEquals($expectedResponse, $this->subadminMiddleware->afterException($this->controller, 'foo', new \Exception()));
+ }
+} \ No newline at end of file