summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIgor Scheller <igor.scheller@igorshp.de>2019-11-27 19:11:37 +0100
committerIgor Scheller <igor.scheller@igorshp.de>2019-12-08 02:12:56 +0100
commit89742ecd5542c740f3625af76c843a7471dbe98a (patch)
tree71c0c78ceb6a3a24b63c51c94a655cf5b33dc044 /tests
parentbe39c63f46562eea173747d80cd91ac81e0b8e09 (diff)
Response: Added with and withInput methods and back/redirect functions
Diffstat (limited to 'tests')
-rw-r--r--tests/Unit/HelpersTest.php47
-rw-r--r--tests/Unit/Http/RedirectServiceProviderTest.php23
-rw-r--r--tests/Unit/Http/RedirectorTest.php53
-rw-r--r--tests/Unit/Http/ResponseTest.php57
-rw-r--r--tests/Unit/Middleware/ErrorHandlerTest.php9
5 files changed, 187 insertions, 2 deletions
diff --git a/tests/Unit/HelpersTest.php b/tests/Unit/HelpersTest.php
index 09362a90..710deff5 100644
--- a/tests/Unit/HelpersTest.php
+++ b/tests/Unit/HelpersTest.php
@@ -7,6 +7,7 @@ use Engelsystem\Config\Config;
use Engelsystem\Container\Container;
use Engelsystem\Helpers\Authenticator;
use Engelsystem\Helpers\Translation\Translator;
+use Engelsystem\Http\Redirector;
use Engelsystem\Http\Request;
use Engelsystem\Http\Response;
use Engelsystem\Http\UrlGeneratorInterface;
@@ -99,6 +100,29 @@ class HelpersTest extends TestCase
}
/**
+ * @covers \back
+ */
+ public function testBack()
+ {
+ $response = new Response();
+ /** @var Redirector|MockObject $redirect */
+ $redirect = $this->createMock(Redirector::class);
+ $redirect->expects($this->exactly(2))
+ ->method('back')
+ ->withConsecutive([302, []], [303, ['test' => 'ing']])
+ ->willReturn($response);
+
+ $app = new Application();
+ $app->instance('redirect', $redirect);
+
+ $return = back();
+ $this->assertEquals($response, $return);
+
+ $return = back(303, ['test' => 'ing']);
+ $this->assertEquals($response, $return);
+ }
+
+ /**
* @covers \config_path
*/
public function testConfigPath()
@@ -118,6 +142,29 @@ class HelpersTest extends TestCase
}
/**
+ * @covers \redirect
+ */
+ public function testRedirect()
+ {
+ $response = new Response();
+ /** @var Redirector|MockObject $redirect */
+ $redirect = $this->createMock(Redirector::class);
+ $redirect->expects($this->exactly(2))
+ ->method('to')
+ ->withConsecutive(['/lorem', 302, []], ['/ipsum', 303, ['test' => 'er']])
+ ->willReturn($response);
+
+ $app = new Application();
+ $app->instance('redirect', $redirect);
+
+ $return = redirect('/lorem');
+ $this->assertEquals($response, $return);
+
+ $return = redirect('/ipsum', 303, ['test' => 'er']);
+ $this->assertEquals($response, $return);
+ }
+
+ /**
* @covers \request
*/
public function testRequest()
diff --git a/tests/Unit/Http/RedirectServiceProviderTest.php b/tests/Unit/Http/RedirectServiceProviderTest.php
new file mode 100644
index 00000000..9c2a07fc
--- /dev/null
+++ b/tests/Unit/Http/RedirectServiceProviderTest.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Engelsystem\Test\Unit\Http;
+
+use Engelsystem\Application;
+use Engelsystem\Http\RedirectServiceProvider;
+use Engelsystem\Test\Unit\ServiceProviderTest;
+
+class RedirectServiceProviderTest extends ServiceProviderTest
+{
+ /**
+ * @covers \Engelsystem\Http\RedirectServiceProvider::register
+ */
+ public function testRegister()
+ {
+ $app = new Application();
+
+ $serviceProvider = new RedirectServiceProvider($app);
+ $serviceProvider->register();
+
+ $this->assertTrue($app->has('redirect'));
+ }
+}
diff --git a/tests/Unit/Http/RedirectorTest.php b/tests/Unit/Http/RedirectorTest.php
new file mode 100644
index 00000000..300b0180
--- /dev/null
+++ b/tests/Unit/Http/RedirectorTest.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Engelsystem\Test\Unit\Http;
+
+use Engelsystem\Http\Redirector;
+use Engelsystem\Http\Request;
+use Engelsystem\Http\Response;
+use PHPUnit\Framework\TestCase;
+
+class RedirectorTest extends TestCase
+{
+ /**
+ * @covers \Engelsystem\Http\Redirector::__construct
+ * @covers \Engelsystem\Http\Redirector::to
+ */
+ public function testTo()
+ {
+ $request = new Request();
+ $response = new Response();
+ $redirector = new Redirector($request, $response);
+
+ $return = $redirector->to('/test');
+ $this->assertEquals(['/test'], $return->getHeader('location'));
+ $this->assertEquals(302, $return->getStatusCode());
+
+ $return = $redirector->to('/foo', 303, ['test' => 'data']);
+ $this->assertEquals(['/foo'], $return->getHeader('location'));
+ $this->assertEquals(303, $return->getStatusCode());
+ $this->assertEquals(['data'], $return->getHeader('test'));
+ }
+
+ /**
+ * @covers \Engelsystem\Http\Redirector::back
+ * @covers \Engelsystem\Http\Redirector::getPreviousUrl
+ */
+ public function testBack()
+ {
+ $request = new Request();
+ $response = new Response();
+ $redirector = new Redirector($request, $response);
+
+ $return = $redirector->back();
+ $this->assertEquals(['/'], $return->getHeader('location'));
+ $this->assertEquals(302, $return->getStatusCode());
+
+ $request = $request->withHeader('referer', '/old-page');
+ $redirector = new Redirector($request, $response);
+ $return = $redirector->back(303, ['foo' => 'bar']);
+ $this->assertEquals(303, $return->getStatusCode());
+ $this->assertEquals(['/old-page'], $return->getHeader('location'));
+ $this->assertEquals(['bar'], $return->getHeader('foo'));
+ }
+}
diff --git a/tests/Unit/Http/ResponseTest.php b/tests/Unit/Http/ResponseTest.php
index b8e6e527..56d8410f 100644
--- a/tests/Unit/Http/ResponseTest.php
+++ b/tests/Unit/Http/ResponseTest.php
@@ -10,6 +10,8 @@ use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\ResponseInterface;
use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
+use Symfony\Component\HttpFoundation\Session\Session;
+use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
class ResponseTest extends TestCase
{
@@ -116,4 +118,59 @@ class ResponseTest extends TestCase
$newResponse->getHeaders()
);
}
+
+ /**
+ * @covers \Engelsystem\Http\Response::with
+ */
+ public function testWith()
+ {
+ $session = new Session(new MockArraySessionStorage());
+ $response = new Response('', 200, [], null, $session);
+
+ $response->with('foo', 'bar');
+ $this->assertEquals('bar', $session->get('foo'));
+
+ $response->with('lorem', ['ipsum', 'dolor' => ['foo' => 'bar']]);
+ $this->assertEquals(['ipsum', 'dolor' => ['foo' => 'bar']], $session->get('lorem'));
+
+ $response->with('lorem', ['dolor' => ['test' => 'er']]);
+ $this->assertEquals(['ipsum', 'dolor' => ['foo' => 'bar', 'test' => 'er']], $session->get('lorem'));
+ }
+
+ /**
+ * @covers \Engelsystem\Http\Response::with
+ */
+ public function testWithNoSession()
+ {
+ $this->expectException(InvalidArgumentException::class);
+
+ $response = new Response();
+ $response->with('foo', 'bar');
+ }
+
+ /**
+ * @covers \Engelsystem\Http\Response::withInput
+ */
+ public function testWithInput()
+ {
+ $session = new Session(new MockArraySessionStorage());
+ $response = new Response('', 200, [], null, $session);
+
+ $response->withInput(['some' => 'value']);
+ $this->assertEquals(['some' => 'value'], $session->get('form-data'));
+
+ $response->withInput(['lorem' => 'ipsum']);
+ $this->assertEquals(['lorem' => 'ipsum'], $session->get('form-data'));
+ }
+
+ /**
+ * @covers \Engelsystem\Http\Response::withInput
+ */
+ public function testWithInputNoSession()
+ {
+ $this->expectException(InvalidArgumentException::class);
+
+ $response = new Response();
+ $response->withInput(['some' => 'value']);
+ }
}
diff --git a/tests/Unit/Middleware/ErrorHandlerTest.php b/tests/Unit/Middleware/ErrorHandlerTest.php
index ef2f7be0..91b59507 100644
--- a/tests/Unit/Middleware/ErrorHandlerTest.php
+++ b/tests/Unit/Middleware/ErrorHandlerTest.php
@@ -6,6 +6,7 @@ use Engelsystem\Application;
use Engelsystem\Http\Exceptions\HttpException;
use Engelsystem\Http\Exceptions\ValidationException;
use Engelsystem\Http\Psr7ServiceProvider;
+use Engelsystem\Http\RedirectServiceProvider;
use Engelsystem\Http\Request;
use Engelsystem\Http\Response;
use Engelsystem\Http\ResponseServiceProvider;
@@ -18,6 +19,7 @@ use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
+use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
use Twig\Loader\LoaderInterface as TwigLoader;
@@ -155,7 +157,7 @@ class ErrorHandlerTest extends TestCase
/**
* @covers \Engelsystem\Middleware\ErrorHandler::process
- * @covers \Engelsystem\Middleware\ErrorHandler::getPreviousUrl
+ * @covers \Engelsystem\Middleware\ErrorHandler::redirectBack
*/
public function testProcessValidationException()
{
@@ -185,11 +187,13 @@ class ErrorHandlerTest extends TestCase
/** @var Application $app */
$app = app();
+ $app->instance(Session::class, $session);
+ $app->bind(SessionInterface::class, Session::class);
(new ResponseServiceProvider($app))->register();
(new Psr7ServiceProvider($app))->register();
+ (new RedirectServiceProvider($app))->register();
$errorHandler = new ErrorHandler($twigLoader);
-
$return = $errorHandler->process($request, $handler);
$this->assertEquals(302, $return->getStatusCode());
@@ -209,6 +213,7 @@ class ErrorHandlerTest extends TestCase
], $session->all());
$request = $request->withAddedHeader('referer', '/foo/batz');
+ $app->instance(Request::class, $request);
$return = $errorHandler->process($request, $handler);
$this->assertEquals('/foo/batz', $return->getHeaderLine('location'));