diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index e6bf9775b..be4c95f34 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -46,7 +46,10 @@ class Application extends App { $container, $server->getRequest(), $server->getUserSession(), - $container->query('ControllerMethodReflector') + $container->query('ControllerMethodReflector'), + $container->query('OCP\IGroupManager'), + $container->query('OCA\Deck\Db\AclMapper'), + $container->query('OCA\Deck\Service\BoardService') ); }); /** @noinspection PhpMethodOrClassCallIsNotCaseSensitiveInspection */ diff --git a/lib/Middleware/SharingMiddleware.php b/lib/Middleware/SharingMiddleware.php index 70498b924..9dc40bb3d 100644 --- a/lib/Middleware/SharingMiddleware.php +++ b/lib/Middleware/SharingMiddleware.php @@ -29,11 +29,14 @@ use OCA\Deck\Controller\LabelController; use OCA\Deck\Controller\PageController; +use OCA\Deck\Db\AclMapper; use OCA\Deck\NoPermissionException; use OCA\Deck\NotFoundException; +use OCA\Deck\Service\BoardService; use \OCP\AppFramework\Middleware; use OCP\IContainer; +use OCP\IGroupManager; use OCP\IRequest; use OCA\Deck\Controller\StackController; use OCP\IUserSession; @@ -56,15 +59,18 @@ class SharingMiddleware extends Middleware { IContainer $container, IRequest $request, IUserSession $userSession, - ControllerMethodReflector $reflector + ControllerMethodReflector $reflector, + IGroupManager $groupManager, + AclMapper $aclMapper, + BoardService $boardService ) { $this->container = $container; $this->request = $request; $this->userSession = $userSession; $this->reflector = $reflector; - $this->aclMapper = $this->container->query('OCA\Deck\Db\AclMapper'); - $this->groupManager = $this->container->query('\OCP\IGroupManager'); - $this->boardService = $this->container->query('OCA\Deck\Service\BoardService'); + $this->aclMapper = $aclMapper; + $this->groupManager = $groupManager; + $this->boardService = $boardService; } /** diff --git a/tests/unit/Middleware/SharingMiddlewareTest.php b/tests/unit/Middleware/SharingMiddlewareTest.php new file mode 100644 index 000000000..38b0e88d0 --- /dev/null +++ b/tests/unit/Middleware/SharingMiddlewareTest.php @@ -0,0 +1,102 @@ + + * + * @author Julius Härtl + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program 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 program. If not, see . + * + */ + +namespace OCA\Deck\Middleware; + +use OC\AppFramework\DependencyInjection\DIContainer; +use OC\AppFramework\Utility\ControllerMethodReflector; +use OC\AppFramework\Utility\SimpleContainer; +use OCA\Deck\NoPermissionException; +use OCA\Deck\NotFoundException; +use OCA\Deck\Service\BoardService; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\JSONResponse; +use OCP\IContainer; +use OCP\IGroupManager; +use OCP\IRequest; +use OCP\IUserSession; +use OCA\Deck\Db\AclMapper; + +class SharingMiddlewareTest extends \PHPUnit_Framework_TestCase { + + private $sharingMiddleware; + private $container; + private $request; + private $userSession; + private $reflector; + private $groupManager; + private $aclMapper; + private $boardService; + + public function setUp() { + $this->container = new SimpleContainer(); + $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->groupManager = $this->getMockBuilder(IGroupManager::class) + ->disableOriginalConstructor()->getMock(); + $this->aclMapper = $this->getMockBuilder(AclMapper::class) + ->disableOriginalConstructor()->getMock(); + $this->boardService = $this->getMockBuilder(BoardService::class) + ->disableOriginalConstructor()->getMock(); + $this->sharingMiddleware = new SharingMiddleware( + $this->container, + $this->request, + $this->userSession, + $this->reflector, + $this->groupManager, + $this->aclMapper, + $this->boardService + ); + } + + public function testBeforeController() { + $controller = $this->getMockBuilder(Controller::class) + ->disableOriginalConstructor()->getMock(); + $methodName = ''; + } + + + public function dataAfterException() { + return [ + [new NoPermissionException('No permission'), 401, 'No permission'], + [new NotFoundException('Not found'), 404, 'Not found'] + ]; + } + /** + * @dataProvider dataAfterException + */ + public function testAfterException($exception, $status, $message) { + $result = $this->sharingMiddleware->afterException('Foo', 'bar', $exception); + $expected = new JSONResponse([ + "status" => $status, + "message" => $message + ], $status); + $this->assertEquals($expected, $result); + + } + +} \ No newline at end of file