From 7969f107610e0d70fec6a86480fcc17b0fe566e3 Mon Sep 17 00:00:00 2001 From: Julius Haertl Date: Sun, 30 Oct 2016 14:05:47 +0100 Subject: [PATCH] More SharingMiddleware testing --- lib/Middleware/SharingMiddleware.php | 3 +- .../unit/Middleware/SharingMiddlewareTest.php | 74 +++++++++++++++++-- 2 files changed, 69 insertions(+), 8 deletions(-) diff --git a/lib/Middleware/SharingMiddleware.php b/lib/Middleware/SharingMiddleware.php index abd1a11ed..85e866f60 100644 --- a/lib/Middleware/SharingMiddleware.php +++ b/lib/Middleware/SharingMiddleware.php @@ -128,8 +128,7 @@ class SharingMiddleware extends Middleware { private function checkPermissions($userId, $controller, $method, $params, $methodName) { // no permission checks needed for plain html page or RequireNoPermission - if ( - $controller instanceof PageController || + if ($controller instanceof PageController || $this->reflector->hasAnnotation('RequireNoPermission') ) { return true; diff --git a/tests/unit/Middleware/SharingMiddlewareTest.php b/tests/unit/Middleware/SharingMiddlewareTest.php index fa6d934c5..d5351f3fa 100644 --- a/tests/unit/Middleware/SharingMiddlewareTest.php +++ b/tests/unit/Middleware/SharingMiddlewareTest.php @@ -26,6 +26,8 @@ namespace OCA\Deck\Middleware; use OC\AppFramework\DependencyInjection\DIContainer; use OC\AppFramework\Utility\ControllerMethodReflector; use OC\AppFramework\Utility\SimpleContainer; +use OCA\Deck\Db\DeckMapper; +use OCA\Deck\Db\IPermissionMapper; use OCA\Deck\NoPermissionException; use OCA\Deck\NotFoundException; use OCA\Deck\Service\BoardService; @@ -35,6 +37,7 @@ use OCP\AppFramework\Http\JSONResponse; use OCP\IContainer; use OCP\IGroupManager; use OCP\IRequest; +use OCP\IUser; use OCP\IUserSession; use OCA\Deck\Db\AclMapper; @@ -48,13 +51,15 @@ class SharingMiddlewareTest extends \PHPUnit_Framework_TestCase { private $permissionService; public function setUp() { - $this->container = new SimpleContainer(); + $this->container = $this->getMockBuilder(IContainer::class) + ->disableOriginalConstructor()->getMock(); $this->request = $this->getMockBuilder(IRequest::class) ->disableOriginalConstructor()->getMock(); $this->userSession = $this->getMockBuilder(IUserSession::class) ->disableOriginalConstructor()->getMock(); - $this->reflector = $this->getMockBuilder(ControllerMethodReflector::class) - ->disableOriginalConstructor()->getMock(); + $this->reflector = new ControllerMethodReflector(); + //$this->getMockBuilder(ControllerMethodReflector::class) + // ->disableOriginalConstructor()->getMock(); $this->permissionService = $this->getMockBuilder(PermissionService::class) ->disableOriginalConstructor()->getMock(); $this->sharingMiddleware = new SharingMiddleware( @@ -66,10 +71,59 @@ class SharingMiddlewareTest extends \PHPUnit_Framework_TestCase { ); } - public function testBeforeController() { - $controller = $this->getMockBuilder(Controller::class) + public function dataBeforeController() { + return [ + ['GET', '\OCA\Deck\Controller\PageController', 'index', null, true], + ['GET', '\OCA\Deck\Controller\BoardController', 'index', null, true], + ['GET', '\OCA\Deck\Controller\BoardController', 'read', true, true], + ['GET', '\OCA\Deck\Controller\BoardController', 'read', false, true, NoPermissionException::class], + ['GET', '\OCA\Deck\Controller\CardController', 'read', false, true, NoPermissionException::class], + ['POST', '\OCA\Deck\Controller\CardController', 'reorder', false, true, NoPermissionException::class], + ]; + } + + /** + * @dataProvider dataBeforeController + * @param $controllerClass + * @param $methodName + */ + public function testBeforeController($method, $controllerClass, $methodName, $getPermission, $success, $exception=null) { + $controller = $this->getMockBuilder($controllerClass) ->disableOriginalConstructor()->getMock(); - $methodName = ''; + $mapper = $this->getMockBuilder(IPermissionMapper::class) + ->disableOriginalConstructor()->getMock(); + $mapper->expects($this->any())->method('findBoardId')->willReturn(123); + $mapper->expects($this->any())->method('isOwner')->willReturn(false); + $user = $this->getMockBuilder(IUser::class) + ->disableOriginalConstructor()->getMock(); + $user->expects($this->once())->method('getUID')->willReturn('user1'); + $this->reflector->reflect($controller, $methodName); + + $this->container->expects($this->any()) + ->method('query')->willReturn($mapper); + $this->userSession->expects($this->exactly(2))->method('getUser')->willReturn($user); + $this->request->expects($this->once())->method('getMethod')->willReturn($method); + if($getPermission) { + $this->permissionService->expects($this->any())->method('getPermission')->willReturn($getPermission); + } + + if($success) { + $this->sharingMiddleware->beforeController($controller, $methodName); + } else { + try { + $this->sharingMiddleware->beforeController($controller, $methodName); + } catch (\Exception $e) { + $this->assertInstanceOf($exception, $e); + } + } + + } + + public function setUpPermissions() { + $this->permissionService->expects($this->once()) + ->method('getPermission') + ->with(123, Acl::PERMISSION_READ) + ->willReturn(true); } @@ -91,4 +145,12 @@ class SharingMiddlewareTest extends \PHPUnit_Framework_TestCase { $this->assertEquals($expected, $result); } + public function testAfterExceptionFail() { + try { + $result = $this->sharingMiddleware->afterException('Foo', 'bar', new \Exception('failed hard')); + } catch (\Exception $e) { + $this->assertEquals('failed hard', $e->getMessage()); + } + } + } \ No newline at end of file