85 lines
2.8 KiB
PHP
85 lines
2.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace TorstenHettstedt\OptLogin\Tests\unit\Application\Actions\User;
|
|
|
|
use Codeception\Stub\Expected;
|
|
use DI\Container;
|
|
use Exception;
|
|
use Slim\Middleware\ErrorMiddleware;
|
|
use TorstenHettstedt\OptLogin\Application\Actions\ActionError;
|
|
use TorstenHettstedt\OptLogin\Application\Actions\ActionPayload;
|
|
use TorstenHettstedt\OptLogin\Application\Handlers\HttpErrorHandler;
|
|
use TorstenHettstedt\OptLogin\Domain\User\User;
|
|
use TorstenHettstedt\OptLogin\Domain\User\UserNotFoundException;
|
|
use TorstenHettstedt\OptLogin\Domain\User\UserRepository;
|
|
use TorstenHettstedt\OptLogin\Tests\unit\TestCase;
|
|
|
|
class ViewUserActionTest extends TestCase
|
|
{
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function testAction()
|
|
{
|
|
$app = $this->getAppInstance();
|
|
|
|
/** @var Container $container */
|
|
$container = $app->getContainer();
|
|
|
|
$user = new User(1, 'bill.gates', 'Bill', 'Gates');
|
|
|
|
$userRepository = $this->makeEmpty(UserRepository::class, [
|
|
'findUserOfId' => Expected::once($user)
|
|
]);
|
|
|
|
$container->set(UserRepository::class, $userRepository);
|
|
|
|
$request = $this->createRequest('GET', '/users/1');
|
|
$response = $app->handle($request);
|
|
|
|
$payload = (string) $response->getBody();
|
|
$expectedPayload = new ActionPayload(200, $user);
|
|
$serializedPayload = json_encode($expectedPayload, JSON_PRETTY_PRINT);
|
|
|
|
$this->assertEquals($serializedPayload, $payload);
|
|
}
|
|
|
|
/**
|
|
* @throws Exception
|
|
*/
|
|
public function testActionThrowsUserNotFoundException()
|
|
{
|
|
$app = $this->getAppInstance();
|
|
|
|
$callableResolver = $app->getCallableResolver();
|
|
$responseFactory = $app->getResponseFactory();
|
|
|
|
$errorHandler = new HttpErrorHandler($callableResolver, $responseFactory);
|
|
$errorMiddleware = new ErrorMiddleware($callableResolver, $responseFactory, true, false, false);
|
|
$errorMiddleware->setDefaultErrorHandler($errorHandler);
|
|
|
|
$app->add($errorMiddleware);
|
|
|
|
/** @var Container $container */
|
|
$container = $app->getContainer();
|
|
|
|
$userRepository = $this->makeEmpty(UserRepository::class, [
|
|
'findUserOfId' => Expected::once(function() {throw new UserNotFoundException();})
|
|
]);
|
|
|
|
$container->set(UserRepository::class, $userRepository);
|
|
|
|
$request = $this->createRequest('GET', '/users/1');
|
|
$response = $app->handle($request);
|
|
|
|
$payload = (string) $response->getBody();
|
|
$expectedError = new ActionError(ActionError::RESOURCE_NOT_FOUND, 'The user you requested does not exist.');
|
|
$expectedPayload = new ActionPayload(404, null, $expectedError);
|
|
$serializedPayload = json_encode($expectedPayload, JSON_PRETTY_PRINT);
|
|
|
|
$this->assertEquals($serializedPayload, $payload);
|
|
}
|
|
}
|