Skip to content

Commit

Permalink
DecoratorManager tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mabar authored and Milan Felix Šulc committed Aug 21, 2018
1 parent 3975885 commit 39cb21f
Show file tree
Hide file tree
Showing 4 changed files with 165 additions and 0 deletions.
104 changes: 104 additions & 0 deletions tests/cases/Decorator/DecoratorManager.phpt
@@ -0,0 +1,104 @@
<?php declare(strict_types = 1);

/**
* Test: Decorator\DecoratorManager
*/

require_once __DIR__ . '/../../bootstrap.php';

use Apitte\Core\Decorator\DecoratorManager;
use Apitte\Core\Decorator\IDecorator;
use Contributte\Psr7\Psr7ResponseFactory;
use Contributte\Psr7\Psr7ServerRequestFactory;
use Tester\Assert;
use Tests\Fixtures\Decorator\ReturnNullDecorator;
use Tests\Fixtures\Decorator\ReturnRequestDecorator;
use Tests\Fixtures\Decorator\ReturnResponseDecorator;

// Decorate request
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

$manager->addDecorator(IDecorator::ON_HANDLER_BEFORE, new ReturnRequestDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_BEFORE, new ReturnRequestDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_BEFORE, new ReturnRequestDecorator());

Assert::same($request, $manager->decorateRequest(IDecorator::ON_HANDLER_BEFORE, $request, $response));
});

// Decorate request - return null
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

$manager->addDecorator(IDecorator::ON_HANDLER_BEFORE, new ReturnRequestDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_BEFORE, new ReturnNullDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_BEFORE, new ReturnRequestDecorator());

Assert::same(null, $manager->decorateRequest(IDecorator::ON_HANDLER_BEFORE, $request, $response));
});

// Decorate request - no decorators
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

Assert::same($request, $manager->decorateRequest(IDecorator::ON_HANDLER_BEFORE, $request, $response));
});

// Decorate response
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

$manager->addDecorator(IDecorator::ON_HANDLER_AFTER, new ReturnResponseDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_AFTER, new ReturnResponseDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_AFTER, new ReturnResponseDecorator());

Assert::same($response, $manager->decorateResponse(IDecorator::ON_HANDLER_AFTER, $request, $response));
});

// Decorate response - return null
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

$manager->addDecorator(IDecorator::ON_HANDLER_AFTER, new ReturnResponseDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_AFTER, new ReturnNullDecorator());
$manager->addDecorator(IDecorator::ON_HANDLER_AFTER, new ReturnResponseDecorator());

Assert::same(null, $manager->decorateResponse(IDecorator::ON_HANDLER_AFTER, $request, $response));
});

// Decorate response - no decorators
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

Assert::same($response, $manager->decorateResponse(IDecorator::ON_HANDLER_AFTER, $request, $response));
});

// Decorate response - no decorators
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

Assert::same($response, $manager->decorateResponse(IDecorator::ON_HANDLER_AFTER, $request, $response));
});

// Decorate response exception - no decorators
test(function (): void {
$manager = new DecoratorManager();
$request = Psr7ServerRequestFactory::fromSuperGlobal();
$response = Psr7ResponseFactory::fromGlobal();

Assert::same(null, $manager->decorateResponse(IDecorator::ON_DISPATCHER_EXCEPTION, $request, $response));
});
21 changes: 21 additions & 0 deletions tests/fixtures/Decorator/ReturnNullDecorator.php
@@ -0,0 +1,21 @@
<?php declare(strict_types = 1);

namespace Tests\Fixtures\Decorator;

use Apitte\Core\Decorator\IDecorator;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class ReturnNullDecorator implements IDecorator
{

/**
* @param mixed[] $context
* @return null
*/
public function decorate(ServerRequestInterface $request, ResponseInterface $response, array $context = [])
{
return null;
}

}
20 changes: 20 additions & 0 deletions tests/fixtures/Decorator/ReturnRequestDecorator.php
@@ -0,0 +1,20 @@
<?php declare(strict_types = 1);

namespace Tests\Fixtures\Decorator;

use Apitte\Core\Decorator\IDecorator;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class ReturnRequestDecorator implements IDecorator
{

/**
* @param mixed[] $context
*/
public function decorate(ServerRequestInterface $request, ResponseInterface $response, array $context = []): ServerRequestInterface
{
return $request;
}

}
20 changes: 20 additions & 0 deletions tests/fixtures/Decorator/ReturnResponseDecorator.php
@@ -0,0 +1,20 @@
<?php declare(strict_types = 1);

namespace Tests\Fixtures\Decorator;

use Apitte\Core\Decorator\IDecorator;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class ReturnResponseDecorator implements IDecorator
{

/**
* @param mixed[] $context
*/
public function decorate(ServerRequestInterface $request, ResponseInterface $response, array $context = []): ResponseInterface
{
return $response;
}

}

0 comments on commit 39cb21f

Please sign in to comment.