summaryrefslogtreecommitdiffstats
path: root/tests/lib/appframework/middleware
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-08-17 11:16:48 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2013-08-17 11:16:48 +0200
commitfde9cabe9774b67e88ee8aa8fa39fe044fe2da2f (patch)
tree6f08673a824cd19fd518e7df70115f9eb1a36900 /tests/lib/appframework/middleware
parent33bb2238aeb0fddd3ddd3fe18307c5e7548e00bc (diff)
downloadnextcloud-server-fde9cabe9774b67e88ee8aa8fa39fe044fe2da2f.tar.gz
nextcloud-server-fde9cabe9774b67e88ee8aa8fa39fe044fe2da2f.zip
initial import of appframework
Diffstat (limited to 'tests/lib/appframework/middleware')
-rw-r--r--tests/lib/appframework/middleware/MiddlewareDispatcherTest.php280
-rw-r--r--tests/lib/appframework/middleware/MiddlewareTest.php82
-rw-r--r--tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php388
3 files changed, 750 insertions, 0 deletions
diff --git a/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
new file mode 100644
index 00000000000..bfa54a48ea3
--- /dev/null
+++ b/tests/lib/appframework/middleware/MiddlewareDispatcherTest.php
@@ -0,0 +1,280 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.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 OC\AppFramework;
+
+use OC\AppFramework\Controller\Controller;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\Response;
+use OC\AppFramework\Middleware\Middleware;
+use OC\AppFramework\Middleware\MiddlewareDispatcher;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+// needed to test ordering
+class TestMiddleware extends Middleware {
+ public static $beforeControllerCalled = 0;
+ public static $afterControllerCalled = 0;
+ public static $afterExceptionCalled = 0;
+ public static $beforeOutputCalled = 0;
+
+ public $beforeControllerOrder = 0;
+ public $afterControllerOrder = 0;
+ public $afterExceptionOrder = 0;
+ public $beforeOutputOrder = 0;
+
+ public $controller;
+ public $methodName;
+ public $exception;
+ public $response;
+ public $output;
+
+ private $beforeControllerThrowsEx;
+
+ public function __construct($beforeControllerThrowsEx) {
+ self::$beforeControllerCalled = 0;
+ self::$afterControllerCalled = 0;
+ self::$afterExceptionCalled = 0;
+ self::$beforeOutputCalled = 0;
+ $this->beforeControllerThrowsEx = $beforeControllerThrowsEx;
+ }
+
+ public function beforeController($controller, $methodName){
+ self::$beforeControllerCalled++;
+ $this->beforeControllerOrder = self::$beforeControllerCalled;
+ $this->controller = $controller;
+ $this->methodName = $methodName;
+ if($this->beforeControllerThrowsEx){
+ throw new \Exception();
+ }
+ }
+
+ public function afterException($controller, $methodName, \Exception $exception){
+ self::$afterExceptionCalled++;
+ $this->afterExceptionOrder = self::$afterExceptionCalled;
+ $this->controller = $controller;
+ $this->methodName = $methodName;
+ $this->exception = $exception;
+ parent::afterException($controller, $methodName, $exception);
+ }
+
+ public function afterController($controller, $methodName, Response $response){
+ self::$afterControllerCalled++;
+ $this->afterControllerOrder = self::$afterControllerCalled;
+ $this->controller = $controller;
+ $this->methodName = $methodName;
+ $this->response = $response;
+ return parent::afterController($controller, $methodName, $response);
+ }
+
+ public function beforeOutput($controller, $methodName, $output){
+ self::$beforeOutputCalled++;
+ $this->beforeOutputOrder = self::$beforeOutputCalled;
+ $this->controller = $controller;
+ $this->methodName = $methodName;
+ $this->output = $output;
+ return parent::beforeOutput($controller, $methodName, $output);
+ }
+}
+
+
+class MiddlewareDispatcherTest extends \PHPUnit_Framework_TestCase {
+
+ private $dispatcher;
+
+
+ public function setUp() {
+ $this->dispatcher = new MiddlewareDispatcher();
+ $this->controller = $this->getControllerMock();
+ $this->method = 'method';
+ $this->response = new Response();
+ $this->output = 'hi';
+ $this->exception = new \Exception();
+ }
+
+
+ private function getAPIMock(){
+ return $this->getMock('OC\AppFramework\Core\API',
+ array('getAppName'), array('app'));
+ }
+
+
+ private function getControllerMock(){
+ return $this->getMock('OC\AppFramework\Controller\Controller', array('method'),
+ array($this->getAPIMock(), new Request()));
+ }
+
+
+ private function getMiddleware($beforeControllerThrowsEx=false){
+ $m1 = new TestMiddleware($beforeControllerThrowsEx);
+ $this->dispatcher->registerMiddleware($m1);
+ return $m1;
+ }
+
+
+ public function testAfterExceptionShouldReturnResponseOfMiddleware(){
+ $response = new Response();
+ $m1 = $this->getMock('\OC\AppFramework\Middleware\Middleware',
+ array('afterException', 'beforeController'));
+ $m1->expects($this->never())
+ ->method('afterException');
+
+ $m2 = $this->getMock('OC\AppFramework\Middleware\Middleware',
+ array('afterException', 'beforeController'));
+ $m2->expects($this->once())
+ ->method('afterException')
+ ->will($this->returnValue($response));
+
+ $this->dispatcher->registerMiddleware($m1);
+ $this->dispatcher->registerMiddleware($m2);
+
+ $this->dispatcher->beforeController($this->controller, $this->method);
+ $this->assertEquals($response, $this->dispatcher->afterException($this->controller, $this->method, $this->exception));
+ }
+
+
+ public function testAfterExceptionShouldThrowAgainWhenNotHandled(){
+ $m1 = new TestMiddleware(false);
+ $m2 = new TestMiddleware(true);
+
+ $this->dispatcher->registerMiddleware($m1);
+ $this->dispatcher->registerMiddleware($m2);
+
+ $this->setExpectedException('\Exception');
+ $this->dispatcher->beforeController($this->controller, $this->method);
+ $this->dispatcher->afterException($this->controller, $this->method, $this->exception);
+ }
+
+
+ public function testBeforeControllerCorrectArguments(){
+ $m1 = $this->getMiddleware();
+ $this->dispatcher->beforeController($this->controller, $this->method);
+
+ $this->assertEquals($this->controller, $m1->controller);
+ $this->assertEquals($this->method, $m1->methodName);
+ }
+
+
+ public function testAfterControllerCorrectArguments(){
+ $m1 = $this->getMiddleware();
+
+ $this->dispatcher->afterController($this->controller, $this->method, $this->response);
+
+ $this->assertEquals($this->controller, $m1->controller);
+ $this->assertEquals($this->method, $m1->methodName);
+ $this->assertEquals($this->response, $m1->response);
+ }
+
+
+ public function testAfterExceptionCorrectArguments(){
+ $m1 = $this->getMiddleware();
+
+ $this->setExpectedException('\Exception');
+
+ $this->dispatcher->beforeController($this->controller, $this->method);
+ $this->dispatcher->afterException($this->controller, $this->method, $this->exception);
+
+ $this->assertEquals($this->controller, $m1->controller);
+ $this->assertEquals($this->method, $m1->methodName);
+ $this->assertEquals($this->exception, $m1->exception);
+ }
+
+
+ public function testBeforeOutputCorrectArguments(){
+ $m1 = $this->getMiddleware();
+
+ $this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+
+ $this->assertEquals($this->controller, $m1->controller);
+ $this->assertEquals($this->method, $m1->methodName);
+ $this->assertEquals($this->output, $m1->output);
+ }
+
+
+ public function testBeforeControllerOrder(){
+ $m1 = $this->getMiddleware();
+ $m2 = $this->getMiddleware();
+
+ $this->dispatcher->beforeController($this->controller, $this->method);
+
+ $this->assertEquals(1, $m1->beforeControllerOrder);
+ $this->assertEquals(2, $m2->beforeControllerOrder);
+ }
+
+ public function testAfterControllerOrder(){
+ $m1 = $this->getMiddleware();
+ $m2 = $this->getMiddleware();
+
+ $this->dispatcher->afterController($this->controller, $this->method, $this->response);
+
+ $this->assertEquals(2, $m1->afterControllerOrder);
+ $this->assertEquals(1, $m2->afterControllerOrder);
+ }
+
+
+ public function testAfterExceptionOrder(){
+ $m1 = $this->getMiddleware();
+ $m2 = $this->getMiddleware();
+
+ $this->setExpectedException('\Exception');
+ $this->dispatcher->beforeController($this->controller, $this->method);
+ $this->dispatcher->afterException($this->controller, $this->method, $this->exception);
+
+ $this->assertEquals(1, $m1->afterExceptionOrder);
+ $this->assertEquals(1, $m2->afterExceptionOrder);
+ }
+
+
+ public function testBeforeOutputOrder(){
+ $m1 = $this->getMiddleware();
+ $m2 = $this->getMiddleware();
+
+ $this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+
+ $this->assertEquals(2, $m1->beforeOutputOrder);
+ $this->assertEquals(1, $m2->beforeOutputOrder);
+ }
+
+
+ public function testExceptionShouldRunAfterExceptionOfOnlyPreviouslyExecutedMiddlewares(){
+ $m1 = $this->getMiddleware();
+ $m2 = $this->getMiddleware(true);
+ $m3 = $this->getMock('\OC\AppFramework\Middleware\Middleware');
+ $m3->expects($this->never())
+ ->method('afterException');
+ $m3->expects($this->never())
+ ->method('beforeController');
+ $m3->expects($this->never())
+ ->method('afterController');
+
+ $this->dispatcher->registerMiddleware($m3);
+
+ $this->dispatcher->beforeOutput($this->controller, $this->method, $this->output);
+
+ $this->assertEquals(2, $m1->beforeOutputOrder);
+ $this->assertEquals(1, $m2->beforeOutputOrder);
+ }
+}
diff --git a/tests/lib/appframework/middleware/MiddlewareTest.php b/tests/lib/appframework/middleware/MiddlewareTest.php
new file mode 100644
index 00000000000..1adce6b3d4f
--- /dev/null
+++ b/tests/lib/appframework/middleware/MiddlewareTest.php
@@ -0,0 +1,82 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.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 OC\AppFramework;
+
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Middleware\Middleware;
+
+
+require_once(__DIR__ . "/../classloader.php");
+
+
+class ChildMiddleware extends Middleware {};
+
+
+class MiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+ private $middleware;
+ private $controller;
+ private $exception;
+ private $api;
+
+ protected function setUp(){
+ $this->middleware = new ChildMiddleware();
+
+ $this->api = $this->getMock('OC\AppFramework\Core\API',
+ array(), array('test'));
+
+ $this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
+ array(), array($this->api, new Request()));
+ $this->exception = new \Exception();
+ $this->response = $this->getMock('OC\AppFramework\Http\Response');
+ }
+
+
+ public function testBeforeController() {
+ $this->middleware->beforeController($this->controller, null, $this->exception);
+ }
+
+
+ public function testAfterExceptionRaiseAgainWhenUnhandled() {
+ $this->setExpectedException('Exception');
+ $afterEx = $this->middleware->afterException($this->controller, null, $this->exception);
+ }
+
+
+ public function testAfterControllerReturnResponseWhenUnhandled() {
+ $response = $this->middleware->afterController($this->controller, null, $this->response);
+
+ $this->assertEquals($this->response, $response);
+ }
+
+
+ public function testBeforeOutputReturnOutputhenUnhandled() {
+ $output = $this->middleware->beforeOutput($this->controller, null, 'test');
+
+ $this->assertEquals('test', $output);
+ }
+
+
+}
diff --git a/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
new file mode 100644
index 00000000000..0b2103564e4
--- /dev/null
+++ b/tests/lib/appframework/middleware/security/SecurityMiddlewareTest.php
@@ -0,0 +1,388 @@
+<?php
+
+/**
+ * ownCloud - App Framework
+ *
+ * @author Bernhard Posselt
+ * @copyright 2012 Bernhard Posselt nukeawhale@gmail.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 OC\AppFramework\Middleware\Security;
+
+use OC\AppFramework\Http\Http;
+use OC\AppFramework\Http\Request;
+use OC\AppFramework\Http\RedirectResponse;
+use OC\AppFramework\Http\JSONResponse;
+use OC\AppFramework\Middleware\Middleware;
+
+
+require_once(__DIR__ . "/../../classloader.php");
+
+
+class SecurityMiddlewareTest extends \PHPUnit_Framework_TestCase {
+
+ private $middleware;
+ private $controller;
+ private $secException;
+ private $secAjaxException;
+ private $request;
+
+ public function setUp() {
+ $api = $this->getMock('OC\AppFramework\Core\API', array(), array('test'));
+ $this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
+ array(), array($api, new Request()));
+
+ $this->request = new Request();
+ $this->middleware = new SecurityMiddleware($api, $this->request);
+ $this->secException = new SecurityException('hey', false);
+ $this->secAjaxException = new SecurityException('hey', true);
+ }
+
+
+ private function getAPI(){
+ return $this->getMock('OC\AppFramework\Core\API',
+ array('isLoggedIn', 'passesCSRFCheck', 'isAdminUser',
+ 'isSubAdminUser', 'activateNavigationEntry',
+ 'getUserId'),
+ array('app'));
+ }
+
+
+ private function checkNavEntry($method, $shouldBeActivated=false){
+ $api = $this->getAPI();
+
+ if($shouldBeActivated){
+ $api->expects($this->once())
+ ->method('activateNavigationEntry');
+ } else {
+ $api->expects($this->never())
+ ->method('activateNavigationEntry');
+ }
+
+ $sec = new SecurityMiddleware($api, $this->request);
+ $sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest', $method);
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testSetNavigationEntry(){
+ $this->checkNavEntry('testSetNavigationEntry', true);
+ }
+
+
+ private function ajaxExceptionCheck($method, $shouldBeAjax=false){
+ $api = $this->getAPI();
+ $api->expects($this->any())
+ ->method('passesCSRFCheck')
+ ->will($this->returnValue(false));
+
+ $sec = new SecurityMiddleware($api, $this->request);
+
+ try {
+ $sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
+ $method);
+ } catch (SecurityException $ex){
+ if($shouldBeAjax){
+ $this->assertTrue($ex->isAjax());
+ } else {
+ $this->assertFalse($ex->isAjax());
+ }
+
+ }
+ }
+
+
+ /**
+ * @Ajax
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testAjaxException(){
+ $this->ajaxExceptionCheck('testAjaxException');
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testNoAjaxException(){
+ $this->ajaxExceptionCheck('testNoAjaxException');
+ }
+
+
+ private function ajaxExceptionStatus($method, $test, $status) {
+ $api = $this->getAPI();
+ $api->expects($this->any())
+ ->method($test)
+ ->will($this->returnValue(false));
+
+ $sec = new SecurityMiddleware($api, $this->request);
+
+ try {
+ $sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
+ $method);
+ } catch (SecurityException $ex){
+ $this->assertEquals($status, $ex->getCode());
+ }
+ }
+
+ /**
+ * @Ajax
+ */
+ public function testAjaxStatusLoggedInCheck() {
+ $this->ajaxExceptionStatus(
+ 'testAjaxStatusLoggedInCheck',
+ 'isLoggedIn',
+ Http::STATUS_UNAUTHORIZED
+ );
+ }
+
+ /**
+ * @Ajax
+ * @IsLoggedInExemption
+ */
+ public function testAjaxNotAdminCheck() {
+ $this->ajaxExceptionStatus(
+ 'testAjaxNotAdminCheck',
+ 'isAdminUser',
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ /**
+ * @Ajax
+ * @IsLoggedInExemption
+ * @IsAdminExemption
+ */
+ public function testAjaxNotSubAdminCheck() {
+ $this->ajaxExceptionStatus(
+ 'testAjaxNotSubAdminCheck',
+ 'isSubAdminUser',
+ Http::STATUS_FORBIDDEN
+ );
+ }
+
+ /**
+ * @Ajax
+ * @IsLoggedInExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testAjaxStatusCSRFCheck() {
+ $this->ajaxExceptionStatus(
+ 'testAjaxStatusCSRFCheck',
+ 'passesCSRFCheck',
+ Http::STATUS_PRECONDITION_FAILED
+ );
+ }
+
+ /**
+ * @Ajax
+ * @CSRFExemption
+ * @IsLoggedInExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testAjaxStatusAllGood() {
+ $this->ajaxExceptionStatus(
+ 'testAjaxStatusAllGood',
+ 'isLoggedIn',
+ 0
+ );
+ $this->ajaxExceptionStatus(
+ 'testAjaxStatusAllGood',
+ 'isAdminUser',
+ 0
+ );
+ $this->ajaxExceptionStatus(
+ 'testAjaxStatusAllGood',
+ 'isSubAdminUser',
+ 0
+ );
+ $this->ajaxExceptionStatus(
+ 'testAjaxStatusAllGood',
+ 'passesCSRFCheck',
+ 0
+ );
+ }
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testNoChecks(){
+ $api = $this->getAPI();
+ $api->expects($this->never())
+ ->method('passesCSRFCheck')
+ ->will($this->returnValue(true));
+ $api->expects($this->never())
+ ->method('isAdminUser')
+ ->will($this->returnValue(true));
+ $api->expects($this->never())
+ ->method('isSubAdminUser')
+ ->will($this->returnValue(true));
+ $api->expects($this->never())
+ ->method('isLoggedIn')
+ ->will($this->returnValue(true));
+
+ $sec = new SecurityMiddleware($api, $this->request);
+ $sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest',
+ 'testNoChecks');
+ }
+
+
+ private function securityCheck($method, $expects, $shouldFail=false){
+ $api = $this->getAPI();
+ $api->expects($this->once())
+ ->method($expects)
+ ->will($this->returnValue(!$shouldFail));
+
+ $sec = new SecurityMiddleware($api, $this->request);
+
+ if($shouldFail){
+ $this->setExpectedException('\OC\AppFramework\Middleware\Security\SecurityException');
+ }
+
+ $sec->beforeController('\OC\AppFramework\Middleware\Security\SecurityMiddlewareTest', $method);
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testCsrfCheck(){
+ $this->securityCheck('testCsrfCheck', 'passesCSRFCheck');
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testFailCsrfCheck(){
+ $this->securityCheck('testFailCsrfCheck', 'passesCSRFCheck', true);
+ }
+
+
+ /**
+ * @CSRFExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testLoggedInCheck(){
+ $this->securityCheck('testLoggedInCheck', 'isLoggedIn');
+ }
+
+
+ /**
+ * @CSRFExemption
+ * @IsAdminExemption
+ * @IsSubAdminExemption
+ */
+ public function testFailLoggedInCheck(){
+ $this->securityCheck('testFailLoggedInCheck', 'isLoggedIn', true);
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsSubAdminExemption
+ */
+ public function testIsAdminCheck(){
+ $this->securityCheck('testIsAdminCheck', 'isAdminUser');
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsSubAdminExemption
+ */
+ public function testFailIsAdminCheck(){
+ $this->securityCheck('testFailIsAdminCheck', 'isAdminUser', true);
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsAdminExemption
+ */
+ public function testIsSubAdminCheck(){
+ $this->securityCheck('testIsSubAdminCheck', 'isSubAdminUser');
+ }
+
+
+ /**
+ * @IsLoggedInExemption
+ * @CSRFExemption
+ * @IsAdminExemption
+ */
+ public function testFailIsSubAdminCheck(){
+ $this->securityCheck('testFailIsSubAdminCheck', 'isSubAdminUser', true);
+ }
+
+
+
+ public function testAfterExceptionNotCaughtThrowsItAgain(){
+ $ex = new \Exception();
+ $this->setExpectedException('\Exception');
+ $this->middleware->afterException($this->controller, 'test', $ex);
+ }
+
+
+ public function testAfterExceptionReturnsRedirect(){
+ $api = $this->getMock('OC\AppFramework\Core\API', array(), array('test'));
+ $this->controller = $this->getMock('OC\AppFramework\Controller\Controller',
+ array(), array($api, new Request()));
+
+ $this->request = new Request(
+ array('server' => array('HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')));
+ $this->middleware = new SecurityMiddleware($api, $this->request);
+ $response = $this->middleware->afterException($this->controller, 'test',
+ $this->secException);
+
+ $this->assertTrue($response instanceof RedirectResponse);
+ }
+
+
+ public function testAfterAjaxExceptionReturnsJSONError(){
+ $response = $this->middleware->afterException($this->controller, 'test',
+ $this->secAjaxException);
+
+ $this->assertTrue($response instanceof JSONResponse);
+ }
+
+
+}