summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2018-01-18 19:01:34 +0100
committerIgor Scheller <igor.scheller@igorshp.de>2018-08-07 16:54:08 +0200
commit3c088292050982505726f5136ff4d0f1a918b879 (patch)
tree8d0e03947935ceb994ef6f8fe01af81bbb268b14
parent2f41b9e4418def9b69cf237312bc592364585025 (diff)
Added Http\Response and Psr7{Request,Response}
-rw-r--r--composer.json4
-rw-r--r--config/app.php2
-rw-r--r--src/Http/Psr7ServiceProvider.php31
-rw-r--r--src/Http/Response.php9
-rw-r--r--src/Http/ResponseServiceProvider.php14
-rw-r--r--tests/Unit/Http/Psr7ServiceProviderTest.php65
-rw-r--r--tests/Unit/Http/RequestTest.php10
-rw-r--r--tests/Unit/Http/ResponseServiceProviderTest.php29
-rw-r--r--tests/Unit/Http/ResponseTest.php19
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);
+ }
+}