diff options
author | Arnold Daniels <arnold@jasny.net> | 2016-11-19 18:00:01 +0100 |
---|---|---|
committer | Arnold Daniels <arnold@jasny.net> | 2016-11-19 18:00:01 +0100 |
commit | 6528ca8d1b058760da858f5c38aef20e5c1b4a22 (patch) | |
tree | 287e4e101b3745f2ac4b801db08b686f3e166d86 /tests/Controller | |
parent | 1132955bb52fd32c0669c817ddae94e8e6b2de48 (diff) | |
download | controller-6528ca8d1b058760da858f5c38aef20e5c1b4a22.zip controller-6528ca8d1b058760da858f5c38aef20e5c1b4a22.tar.gz controller-6528ca8d1b058760da858f5c38aef20e5c1b4a22.tar.bz2 |
Implemented Input trait
Diffstat (limited to 'tests/Controller')
-rw-r--r-- | tests/Controller/InputTest.php | 224 | ||||
-rw-r--r-- | tests/Controller/OutputTest.php | 3 |
2 files changed, 224 insertions, 3 deletions
diff --git a/tests/Controller/InputTest.php b/tests/Controller/InputTest.php new file mode 100644 index 0000000..a76370a --- /dev/null +++ b/tests/Controller/InputTest.php @@ -0,0 +1,224 @@ +<?php + +namespace Jasny\Controller; + +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\UploadedFileInterface; +use Jasny\Controller\TestHelper; + +/** + * @covers Jasny\Controller\Input + */ +class InputTest extends \PHPUnit_Framework_TestCase +{ + use TestHelper; + + public function queryParamsProvider() + { + return [ + [null, null, 'wall',[]], + [[], null, 'wall', []], + [['foo' => 10], 10, 'wall', []], + [ + ['foo' => 10, 'bar' => '', 'zoo' => ['monkey', 'lion'], 'qux' => ['a' => 10, 'b' => 20]], + 10, '', ['a' => 10, 'b' => 20] + ] + ]; + } + + /** + * @dataProvider queryParamsProvider + * + * @param array|null $data + */ + public function testGetQueryParams($data) + { + $request = $this->createMock(ServerRequestInterface::class); + $request->expects($this->once())->method('getQueryParams')->willReturn($data); + + $controller = $this->getController(['getRequest']); + $controller->method('getRequest')->willReturn($request); + + $params = $controller->getQueryParams(); + $this->assertSame((array)$data, $params); + } + + /** + * @dataProvider queryParamsProvider + * + * @param array|null $data + * @param int $foo + * @param string $bar + * @param array $qux + */ + public function testListQueryParams($data, $foo, $bar, $qux) + { + $request = $this->createMock(ServerRequestInterface::class); + $request->expects($this->once())->method('getQueryParams')->willReturn($data); + + $controller = $this->getController(['getRequest']); + $controller->method('getRequest')->willReturn($request); + + $list = $controller->getQueryParams(['bar' => 'wall', 'foo', 'qux' => []]); + $this->assertEquals([$bar, $foo, $qux], $list); + } + + + + public function testHasQueryParams() + { + $request = $this->createMock(ServerRequestInterface::class); + $request->expects($this->any())->method('getQueryParams') + ->willReturn(['foo' => 10, 'bar' => '', 'buz' => null, 'qux' => ['a' => 10, 'b' => 20]]); + + $controller = $this->getController(['getRequest']); + $controller->method('getRequest')->willReturn($request); + + $this->assertTrue($controller->hasQueryParam('foo'), 'foo'); + $this->assertTrue($controller->hasQueryParam('bar'), 'bar'); + $this->assertTrue($controller->hasQueryParam('qux'), 'qux'); + + $this->assertFalse($controller->hasQueryParam('nop'), 'nop'); + $this->assertFalse($controller->hasQueryParam('buz'), 'buz'); + } + + public function getQueryParamProvider() + { + return [ + [10, 'foo'], + ['', 'bar'], + [null, 'buz'], + [['a' => 10], 'qux'], + [null, 'nop'], + + [10, 'foo', 22], + ['', 'bar', 'woop'], + ['woop', 'buz', 'woop'], + ['woop', 'nop', 'woop'], + + [10, 'foo', null, FILTER_SANITIZE_NUMBER_INT], + [10, 'fox', null, FILTER_SANITIZE_NUMBER_INT], + [22, 'nop', '22 pigs', FILTER_SANITIZE_NUMBER_INT], + [null, 'nop', 'woop', FILTER_SANITIZE_NUMBER_INT], + + [10, 'foo', null, FILTER_VALIDATE_INT], + [false, 'fox', null, FILTER_VALIDATE_INT], + [false, 'nop', '22 pigs', FILTER_VALIDATE_INT], + [null, 'nop', null, FILTER_VALIDATE_INT], + + [10, 'foo', null, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE], + [null, 'fox', null, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE], + [null, 'nop', '22 pigs', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE], + [null, 'nop', null, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE] + ]; + } + + /** + * @dataProvider getQueryParamProvider + * + * @param mixed $expect + * @param array $param + * @param string $default + * @param int $filter + * @param array $filterOptions + */ + public function testGetQueryParam($expect, ...$args) + { + $request = $this->createMock(ServerRequestInterface::class); + $request->expects($this->any())->method('getQueryParams') + ->willReturn(['foo' => 10, 'fox' => '10 foxes', 'bar' => '', 'buz' => null, 'qux' => ['a' => 10]]); + + $controller = $this->getController(['getRequest']); + $controller->method('getRequest')->willReturn($request); + + $value = $controller->getQueryParam(...(array)$args); + + $this->assertEquals($expect, $value); + } + + + public function inputProvider() + { + $file = $this->createMock(UploadedFileInterface::class); + $qux = $this->createMock(UploadedFileInterface::class); + + return [ + [ + [], + [], + [], + ], + [ + ['foo' => 10], + [], + ['foo' => 10], + ], + [ + ['foo' => 10], + null, + ['foo' => 10], + ], + [ + ['foo' => 10, 'bar' => '', 'buz' => null, 'qux' => ['a' => 10, 'b' => 20]], + [], + ['foo' => 10, 'bar' => '', 'buz' => null, 'qux' => ['a' => 10, 'b' => 20]], + ], + [ + ['foo' => 10, 'qux' => ['a' => 10, 'b' => 20]], + ['file' => $file], + ['foo' => 10, 'qux' => ['a' => 10, 'b' => 20], 'file' => $file], + ], + [ + ['foo' => 10, 'qux' => ['a' => 10, 'b' => 20]], + ['foo' => $file], + ['foo' => $file, 'qux' => ['a' => 10, 'b' => 20]], + ], + [ + ['foo' => 10, 'qux' => ['a' => 10, 'b' => 20]], + ['file' => $file, 'qux' => ['c' => $qux]], + ['foo' => 10, 'qux' => ['a' => 10, 'b' => 20, 'c' => $qux], 'file' => $file], + ], + [ + ['foo' => 10, 'qux' => ['a' => 10, 'b' => 20]], + ['file' => $file, 'qux' => ['b' => $qux]], + ['foo' => 10, 'qux' => ['a' => 10, 'b' => $qux], 'file' => $file], + ], + [ + [], + ['foo' => $file], + ['foo' => $file] + ], + [ + null, + ['foo' => $file], + null + ], + [ + new \stdClass(), + ['foo' => $file], + new \stdClass(), + ] + ]; + } + + /** + * @dataProvider inputProvider + * + * @param array|mixed $data + * @param array|null $files + * @param array|mixed $expect + */ + public function testGetInput($data, $files, $expect) + { + $request = $this->createMock(ServerRequestInterface::class); + $request->expects($this->any())->method('getParsedBody')->willReturn($data); + $request->expects($this->any())->method('getUploadedFiles')->willReturn($files); + + $controller = $this->getController(['getRequest']); + $controller->method('getRequest')->willReturn($request); + + $input = $controller->getInput(); + + $this->assertEquals($expect, $input); + } +} diff --git a/tests/Controller/OutputTest.php b/tests/Controller/OutputTest.php index 2793a14..7ca0aa4 100644 --- a/tests/Controller/OutputTest.php +++ b/tests/Controller/OutputTest.php @@ -2,9 +2,6 @@ namespace Jasny\Controller; -use Jasny\Controller; -use Jasny\Flash; -use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; use Jasny\Controller\TestHelper; |