Add some Flash message tests and the flashes to the skeleton template.
This commit is contained in:
parent
76b526646e
commit
1914885d04
12
app/composer.lock
generated
12
app/composer.lock
generated
@ -2743,16 +2743,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpdoc-parser",
|
"name": "phpstan/phpdoc-parser",
|
||||||
"version": "1.29.0",
|
"version": "1.29.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
"url": "https://github.com/phpstan/phpdoc-parser.git",
|
||||||
"reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc"
|
"reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/536889f2b340489d328f5ffb7b02bb6b183ddedc",
|
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4",
|
||||||
"reference": "536889f2b340489d328f5ffb7b02bb6b183ddedc",
|
"reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -2784,9 +2784,9 @@
|
|||||||
"description": "PHPDoc parser with support for nullable, intersection and generic types",
|
"description": "PHPDoc parser with support for nullable, intersection and generic types",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
|
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
|
||||||
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.0"
|
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1"
|
||||||
},
|
},
|
||||||
"time": "2024-05-06T12:04:23+00:00"
|
"time": "2024-05-31T08:52:43+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
|
@ -73,9 +73,8 @@ class Bootstrap
|
|||||||
$containerBuilder->addDefinitions([
|
$containerBuilder->addDefinitions([
|
||||||
'config' => $config,
|
'config' => $config,
|
||||||
// more DI stuff
|
// more DI stuff
|
||||||
'flash' => function () {
|
'flash' => function (ContainerInterface $container) {
|
||||||
$messages = [];
|
return $container->get(SessionInterface::class)->getFlash();
|
||||||
return new \Slim\Flash\Messages($messages);
|
|
||||||
},
|
},
|
||||||
LoggerInterface::class => function() {
|
LoggerInterface::class => function() {
|
||||||
$logger = new Logger();
|
$logger = new Logger();
|
||||||
@ -116,10 +115,13 @@ class Bootstrap
|
|||||||
*/
|
*/
|
||||||
protected static function establishMiddleware(App $app): void
|
protected static function establishMiddleware(App $app): void
|
||||||
{
|
{
|
||||||
|
/** @var ContainerInterface $container */
|
||||||
|
$container = $app->getContainer();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Configuration
|
* @var Configuration
|
||||||
*/
|
*/
|
||||||
$config = $app->getContainer()->get('config');
|
$config = $container->get('config');
|
||||||
$app->addErrorMiddleware(true, true, true);
|
$app->addErrorMiddleware(true, true, true);
|
||||||
|
|
||||||
// Twig
|
// Twig
|
||||||
@ -132,19 +134,10 @@ class Bootstrap
|
|||||||
->addGlobal('site_name', $config->get('site.name'));
|
->addGlobal('site_name', $config->get('site.name'));
|
||||||
$twig->getEnvironment()
|
$twig->getEnvironment()
|
||||||
->addGlobal('site_description', $config->get('site.description'));
|
->addGlobal('site_description', $config->get('site.description'));
|
||||||
|
$flash = $container->get(SessionInterface::class)->getFlash();
|
||||||
|
$twig->getEnvironment()
|
||||||
|
->addGlobal('flash', $flash);
|
||||||
$app->add(TwigMiddleware::create($app, $twig));
|
$app->add(TwigMiddleware::create($app, $twig));
|
||||||
|
|
||||||
// Flash Messages
|
|
||||||
$app->add(function ($req, $next) {
|
|
||||||
if (session_status() !== PHP_SESSION_ACTIVE) {
|
|
||||||
session_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var $this ContainerInterface */
|
|
||||||
$this->get('flash')->__construct($_SESSION);
|
|
||||||
|
|
||||||
return $next->handle($req);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,6 +21,7 @@ class RegisterUserAction extends Controller
|
|||||||
$requestData = $this->request->getParsedBody();
|
$requestData = $this->request->getParsedBody();
|
||||||
|
|
||||||
if ($requestData['password'] !== $requestData['checked_password']) {
|
if ($requestData['password'] !== $requestData['checked_password']) {
|
||||||
|
$this->session->getFlash()->add('error', "Passwords do not match.");
|
||||||
$response = $this->render('user/register.twig');
|
$response = $this->render('user/register.twig');
|
||||||
return $response->withStatus(400);
|
return $response->withStatus(400);
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,11 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
|
{% for message in flash.get('error') %}
|
||||||
|
<div class="flash error">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ namespace Slovocast\Tests\Controller;
|
|||||||
use Slovocast\Tests\TestCase;
|
use Slovocast\Tests\TestCase;
|
||||||
use Slovocast\Controller\Controller;
|
use Slovocast\Controller\Controller;
|
||||||
use Psr\Http\Message\ResponseInterface as Response;
|
use Psr\Http\Message\ResponseInterface as Response;
|
||||||
|
use Odan\Session\SessionInterface;
|
||||||
|
|
||||||
class ControllerTest extends TestCase
|
class ControllerTest extends TestCase
|
||||||
{
|
{
|
||||||
@ -97,4 +98,34 @@ class ControllerTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals('<h1>Slovocast</h1>', $response->getBody());
|
$this->assertEquals('<h1>Slovocast</h1>', $response->getBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFlashMessages(): void
|
||||||
|
{
|
||||||
|
$app = $this->getAppInstance();
|
||||||
|
$session = $app->getContainer()->get(SessionInterface::class);
|
||||||
|
|
||||||
|
$testController = new class($session) extends Controller {
|
||||||
|
protected SessionInterface $session;
|
||||||
|
|
||||||
|
public function __construct(SessionInterface $session)
|
||||||
|
{
|
||||||
|
$this->session = $session;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function respond(): Response
|
||||||
|
{
|
||||||
|
$this->session->getFlash()->add("error", "Error message");
|
||||||
|
return $this->response;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$app->get('/test', $testController);
|
||||||
|
$request = $this->createRequest('GET', '/test');
|
||||||
|
|
||||||
|
$response = $app->handle($request);
|
||||||
|
$flash = $app->getContainer()->get(SessionInterface::class)->getFlash();
|
||||||
|
$errorMessages = $flash->get('error');
|
||||||
|
$this->assertEquals('Error message', $errorMessages[0]);
|
||||||
|
$this->assertEquals(1, count($errorMessages));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,9 @@ class RegisterUserActionTest extends TestCase
|
|||||||
$this->assertEquals(400, $response->getStatusCode());
|
$this->assertEquals(400, $response->getStatusCode());
|
||||||
|
|
||||||
$flash = $container->get(SessionInterface::class)->getFlash();
|
$flash = $container->get(SessionInterface::class)->getFlash();
|
||||||
$this->assertEquals('Unable to register user.', $flash->get('error')[0]);
|
$errorMessages = $flash->get('error');
|
||||||
|
$this->assertIsArray($errorMessages);
|
||||||
|
$this->assertNotNull($errorMessages);
|
||||||
|
$this->assertEquals('Unable to register user.', $errorMessage[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user