summaryrefslogtreecommitdiffstats
path: root/tests/lib/appframework/http/DispatcherTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/appframework/http/DispatcherTest.php')
-rw-r--r--tests/lib/appframework/http/DispatcherTest.php164
1 files changed, 154 insertions, 10 deletions
diff --git a/tests/lib/appframework/http/DispatcherTest.php b/tests/lib/appframework/http/DispatcherTest.php
index 9841dcaa1f7..ba1e989cce9 100644
--- a/tests/lib/appframework/http/DispatcherTest.php
+++ b/tests/lib/appframework/http/DispatcherTest.php
@@ -25,8 +25,28 @@
namespace OC\AppFramework\Http;
use OC\AppFramework\Middleware\MiddlewareDispatcher;
+use OC\AppFramework\Utility\ControllerMethodReflector;
use OCP\AppFramework\Http;
-//require_once(__DIR__ . "/../classloader.php");
+use OCP\AppFramework\Http\JSONResponse;
+use OCP\AppFramework\Controller;
+
+
+class TestController extends Controller {
+ public function __construct($appName, $request) {
+ parent::__construct($appName, $request);
+ }
+
+ /**
+ * @param int $int
+ * @param bool $bool
+ */
+ public function exec($int, $bool) {
+ $this->registerFormatter('text', function($in) {
+ return new JSONResponse(array('text' => $in));
+ });
+ return array($int, $bool);
+ }
+}
class DispatcherTest extends \PHPUnit_Framework_TestCase {
@@ -39,6 +59,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
private $lastModified;
private $etag;
private $http;
+ private $reflector;
protected function setUp() {
$this->controllerMethod = 'test';
@@ -64,8 +85,17 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
'\OCP\AppFramework\Controller',
array($this->controllerMethod), array($app, $request));
+ $this->request = $this->getMockBuilder(
+ '\OC\AppFramework\Http\Request')
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->reflector = new ControllerMethodReflector();
+
$this->dispatcher = new Dispatcher(
- $this->http, $this->middlewareDispatcher);
+ $this->http, $this->middlewareDispatcher, $this->reflector,
+ $this->request
+ );
$this->response = $this->getMockBuilder(
'\OCP\AppFramework\Http\Response')
@@ -81,7 +111,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
* @param string $out
* @param string $httpHeaders
*/
- private function setMiddlewareExpections($out=null,
+ private function setMiddlewareExpectations($out=null,
$httpHeaders=null, $responseHeaders=array(),
$ex=false, $catchEx=true) {
@@ -159,14 +189,12 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
->with($this->equalTo($this->controller),
$this->equalTo($this->controllerMethod),
$this->equalTo($out))
- ->will($this->returnValue($out));
-
-
+ ->will($this->returnValue($out));
}
public function testDispatcherReturnsArrayWith2Entries() {
- $this->setMiddlewareExpections();
+ $this->setMiddlewareExpectations();
$response = $this->dispatcher->dispatch($this->controller,
$this->controllerMethod);
@@ -180,7 +208,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
- $this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders);
+ $this->setMiddlewareExpectations($out, $httpHeaders, $responseHeaders);
$response = $this->dispatcher->dispatch($this->controller,
$this->controllerMethod);
@@ -195,7 +223,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
- $this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders, true);
+ $this->setMiddlewareExpectations($out, $httpHeaders, $responseHeaders, true);
$response = $this->dispatcher->dispatch($this->controller,
$this->controllerMethod);
@@ -210,7 +238,7 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
$out = 'yo';
$httpHeaders = 'Http';
$responseHeaders = array('hell' => 'yeah');
- $this->setMiddlewareExpections($out, $httpHeaders, $responseHeaders, true, false);
+ $this->setMiddlewareExpectations($out, $httpHeaders, $responseHeaders, true, false);
$this->setExpectedException('\Exception');
$response = $this->dispatcher->dispatch($this->controller,
@@ -218,4 +246,120 @@ class DispatcherTest extends \PHPUnit_Framework_TestCase {
}
+
+ private function dispatcherPassthrough() {
+ $this->middlewareDispatcher->expects($this->once())
+ ->method('beforeController');
+ $this->middlewareDispatcher->expects($this->once())
+ ->method('afterController')
+ ->will($this->returnCallback(function($a, $b, $in) {
+ return $in;
+ }));
+ $this->middlewareDispatcher->expects($this->once())
+ ->method('beforeOutput')
+ ->will($this->returnCallback(function($a, $b, $in) {
+ return $in;
+ }));
+ }
+
+ public function testControllerParametersInjected() {
+ $this->request = new Request(array(
+ 'post' => array(
+ 'int' => '3',
+ 'bool' => 'false'
+ ),
+ 'method' => 'POST'
+ ));
+ $this->dispatcher = new Dispatcher(
+ $this->http, $this->middlewareDispatcher, $this->reflector,
+ $this->request
+ );
+ $controller = new TestController('app', $this->request);
+
+ // reflector is supposed to be called once
+ $this->dispatcherPassthrough();
+ $response = $this->dispatcher->dispatch($controller, 'exec');
+
+ $this->assertEquals('[3,true]', $response[2]);
+ }
+
+
+ public function testResponseTransformedByUrlFormat() {
+ $this->request = new Request(array(
+ 'post' => array(
+ 'int' => '3',
+ 'bool' => 'false'
+ ),
+ 'urlParams' => array(
+ 'format' => 'text'
+ ),
+ 'method' => 'GET'
+ ));
+ $this->dispatcher = new Dispatcher(
+ $this->http, $this->middlewareDispatcher, $this->reflector,
+ $this->request
+ );
+ $controller = new TestController('app', $this->request);
+
+ // reflector is supposed to be called once
+ $this->dispatcherPassthrough();
+ $response = $this->dispatcher->dispatch($controller, 'exec');
+
+ $this->assertEquals('{"text":[3,false]}', $response[2]);
+ }
+
+
+ public function testResponseTransformedByAcceptHeader() {
+ $this->request = new Request(array(
+ 'post' => array(
+ 'int' => '3',
+ 'bool' => 'false'
+ ),
+ 'server' => array(
+ 'HTTP_ACCEPT' => 'application/text, test',
+ 'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded'
+ ),
+ 'method' => 'POST'
+ ));
+ $this->dispatcher = new Dispatcher(
+ $this->http, $this->middlewareDispatcher, $this->reflector,
+ $this->request
+ );
+ $controller = new TestController('app', $this->request);
+
+ // reflector is supposed to be called once
+ $this->dispatcherPassthrough();
+ $response = $this->dispatcher->dispatch($controller, 'exec');
+
+ $this->assertEquals('{"text":[3,false]}', $response[2]);
+ }
+
+
+ public function testResponsePrimarilyTransformedByParameterFormat() {
+ $this->request = new Request(array(
+ 'post' => array(
+ 'int' => '3',
+ 'bool' => 'false'
+ ),
+ 'get' => array(
+ 'format' => 'text'
+ ),
+ 'server' => array(
+ 'HTTP_ACCEPT' => 'application/json, test'
+ ),
+ 'method' => 'POST'
+ ));
+ $this->dispatcher = new Dispatcher(
+ $this->http, $this->middlewareDispatcher, $this->reflector,
+ $this->request
+ );
+ $controller = new TestController('app', $this->request);
+
+ // reflector is supposed to be called once
+ $this->dispatcherPassthrough();
+ $response = $this->dispatcher->dispatch($controller, 'exec');
+
+ $this->assertEquals('{"text":[3,true]}', $response[2]);
+ }
+
}