diff options
author | Igor Scheller <igor.scheller@igorshp.de> | 2018-01-18 19:01:34 +0100 |
---|---|---|
committer | Igor Scheller <igor.scheller@igorshp.de> | 2018-08-07 16:54:08 +0200 |
commit | 3c088292050982505726f5136ff4d0f1a918b879 (patch) | |
tree | 8d0e03947935ceb994ef6f8fe01af81bbb268b14 | |
parent | 2f41b9e4418def9b69cf237312bc592364585025 (diff) |
Added Http\Response and Psr7{Request,Response}
-rw-r--r-- | composer.json | 4 | ||||
-rw-r--r-- | config/app.php | 2 | ||||
-rw-r--r-- | src/Http/Psr7ServiceProvider.php | 31 | ||||
-rw-r--r-- | src/Http/Response.php | 9 | ||||
-rw-r--r-- | src/Http/ResponseServiceProvider.php | 14 | ||||
-rw-r--r-- | tests/Unit/Http/Psr7ServiceProviderTest.php | 65 | ||||
-rw-r--r-- | tests/Unit/Http/RequestTest.php | 10 | ||||
-rw-r--r-- | tests/Unit/Http/ResponseServiceProviderTest.php | 29 | ||||
-rw-r--r-- | tests/Unit/Http/ResponseTest.php | 19 |
9 files changed, 182 insertions, 1 deletions
diff --git a/composer.json b/composer.json index 9c0602b6..df9ee57b 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,9 @@ "psr/container": "^1.0", "psr/log": "^1.0", "symfony/http-foundation": "^3.3", - "twbs/bootstrap": "^3.3" + "symfony/psr-http-message-bridge": "^1.0", + "twbs/bootstrap": "^3.3", + "zendframework/zend-diactoros": "^1.7" }, "require-dev": { "filp/whoops": "^2.1", diff --git a/config/app.php b/config/app.php index 74eb2991..480b19d4 100644 --- a/config/app.php +++ b/config/app.php @@ -13,5 +13,7 @@ return [ \Engelsystem\Database\DatabaseServiceProvider::class, \Engelsystem\Http\RequestServiceProvider::class, \Engelsystem\Http\SessionServiceProvider::class, + \Engelsystem\Http\ResponseServiceProvider::class, + \Engelsystem\Http\Psr7ServiceProvider::class, ], ]; diff --git a/src/Http/Psr7ServiceProvider.php b/src/Http/Psr7ServiceProvider.php new file mode 100644 index 00000000..ff7c13ee --- /dev/null +++ b/src/Http/Psr7ServiceProvider.php @@ -0,0 +1,31 @@ +<?php + +namespace Engelsystem\Http; + +use Engelsystem\Container\ServiceProvider; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; +use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory; + + +class Psr7ServiceProvider extends ServiceProvider +{ + public function register() + { + /** @var DiactorosFactory $psr7Factory */ + $psr7Factory = $this->app->make(DiactorosFactory::class); + $this->app->instance('psr7.factory', $psr7Factory); + + /** @var Request $request */ + $request = $this->app->get('request'); + $psr7request = $psr7Factory->createRequest($request); + $this->app->instance('psr7.request', $psr7request); + $this->app->bind(ServerRequestInterface::class, 'psr7.request'); + + /** @var Response $response */ + $response = $this->app->get('response'); + $psr7response = $psr7Factory->createResponse($response); + $this->app->instance('psr7.response', $psr7response); + $this->app->bind(ResponseInterface::class, 'psr7.response'); + } +} diff --git a/src/Http/Response.php b/src/Http/Response.php new file mode 100644 index 00000000..70698fd5 --- /dev/null +++ b/src/Http/Response.php @@ -0,0 +1,9 @@ +<?php + +namespace Engelsystem\Http; + +use Symfony\Component\HttpFoundation\Response as SymfonyResponse; + +class Response extends SymfonyResponse +{ +} diff --git a/src/Http/ResponseServiceProvider.php b/src/Http/ResponseServiceProvider.php new file mode 100644 index 00000000..f0d238ef --- /dev/null +++ b/src/Http/ResponseServiceProvider.php @@ -0,0 +1,14 @@ +<?php + +namespace Engelsystem\Http; + +use Engelsystem\Container\ServiceProvider; + +class ResponseServiceProvider extends ServiceProvider +{ + public function register() + { + $response = $this->app->make(Response::class); + $this->app->instance('response', $response); + } +} diff --git a/tests/Unit/Http/Psr7ServiceProviderTest.php b/tests/Unit/Http/Psr7ServiceProviderTest.php new file mode 100644 index 00000000..b4c3c042 --- /dev/null +++ b/tests/Unit/Http/Psr7ServiceProviderTest.php @@ -0,0 +1,65 @@ +<?php + +namespace Engelsystem\Test\Unit\Http; + +use Engelsystem\Http\Psr7ServiceProvider; +use Engelsystem\Http\Request; +use Engelsystem\Http\Response; +use Engelsystem\Test\Unit\ServiceProviderTest; +use PHPUnit_Framework_MockObject_MockObject as MockObject; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface as RequestInterface; +use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory; + +class Psr7ServiceProviderTest extends ServiceProviderTest +{ + /** + * @covers \Engelsystem\Http\Psr7ServiceProvider::register() + */ + public function testRegister() + { + /** @var MockObject|DiactorosFactory $psr7Factory */ + $psr7Factory = $this->createMock(DiactorosFactory::class); + /** @var MockObject|Request $request */ + $request = $this->createMock(Request::class); + /** @var MockObject|Response $response */ + $response = $this->createMock(Response::class); + /** @var MockObject|RequestInterface $psr7request */ + $psr7request = $this->createMock(Request::class); + /** @var MockObject|ResponseInterface $psr7response */ + $psr7response = $this->createMock(Response::class); + + $app = $this->getApp(['make', 'instance', 'get', 'bind']); + $this->setExpects($app, 'make', [DiactorosFactory::class], $psr7Factory); + + $app->expects($this->atLeastOnce()) + ->method('get') + ->withConsecutive(['request'], ['response']) + ->willReturnOnConsecutiveCalls($request, $response); + $app->expects($this->atLeastOnce()) + ->method('instance') + ->withConsecutive( + ['psr7.factory', $psr7Factory], + ['psr7.request', $psr7request], + ['psr7.response', $psr7response] + ); + $app->expects($this->atLeastOnce()) + ->method('bind') + ->withConsecutive( + [RequestInterface::class, 'psr7.request'], + [ResponseInterface::class, 'psr7.response'] + ); + + $psr7Factory->expects($this->once()) + ->method('createRequest') + ->with($request) + ->willReturn($psr7request); + $psr7Factory->expects($this->once()) + ->method('createResponse') + ->with($response) + ->willReturn($psr7response); + + $serviceProvider = new Psr7ServiceProvider($app); + $serviceProvider->register(); + } +} diff --git a/tests/Unit/Http/RequestTest.php b/tests/Unit/Http/RequestTest.php index a68f8b8f..f8444b84 100644 --- a/tests/Unit/Http/RequestTest.php +++ b/tests/Unit/Http/RequestTest.php @@ -5,10 +5,20 @@ namespace Engelsystem\Test\Unit\Http; use Engelsystem\Http\Request; use PHPUnit\Framework\TestCase; use PHPUnit_Framework_MockObject_MockObject as MockObject; +use Symfony\Component\HttpFoundation\Request as SymfonyRequest; class RequestTest extends TestCase { /** + * @covers \Engelsystem\Http\Request + */ + public function testCreate() + { + $response = new Request(); + $this->assertInstanceOf(SymfonyRequest::class, $response); + } + + /** * @covers \Engelsystem\Http\Request::postData */ public function testPostData() diff --git a/tests/Unit/Http/ResponseServiceProviderTest.php b/tests/Unit/Http/ResponseServiceProviderTest.php new file mode 100644 index 00000000..52e95714 --- /dev/null +++ b/tests/Unit/Http/ResponseServiceProviderTest.php @@ -0,0 +1,29 @@ +<?php + +namespace Engelsystem\Test\Unit\Http; + +use Engelsystem\Http\Response; +use Engelsystem\Http\ResponseServiceProvider; +use Engelsystem\Test\Unit\ServiceProviderTest; +use PHPUnit_Framework_MockObject_MockObject as MockObject; + +class ResponseServiceProviderTest extends ServiceProviderTest +{ + /** + * @covers \Engelsystem\Http\ResponseServiceProvider::register() + */ + public function testRegister() + { + /** @var MockObject|Response $response */ + $response = $this->getMockBuilder(Response::class) + ->getMock(); + + $app = $this->getApp(); + + $this->setExpects($app, 'make', [Response::class], $response); + $this->setExpects($app, 'instance', ['response', $response]); + + $serviceProvider = new ResponseServiceProvider($app); + $serviceProvider->register(); + } +} diff --git a/tests/Unit/Http/ResponseTest.php b/tests/Unit/Http/ResponseTest.php new file mode 100644 index 00000000..6bedf5c1 --- /dev/null +++ b/tests/Unit/Http/ResponseTest.php @@ -0,0 +1,19 @@ +<?php + +namespace Engelsystem\Test\Unit\Http; + +use Engelsystem\Http\Response; +use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\Response as SymfonyResponse; + +class ResponseTest extends TestCase +{ + /** + * @covers \Engelsystem\Http\Response + */ + public function testCreate() + { + $response = new Response(); + $this->assertInstanceOf(SymfonyResponse::class, $response); + } +} |