Tester un login JSON avec la classe ApiTestCase d'API Platform
Publié le 31/10/2021 • Actualisé le 31/10/2021
typo ApiTestCase
d'API Platform. On passe le nom d'utilisateur et le mot de passe grâce à l'option json
; puis, on convertit la réponse en tableau pour récupérer le jeton de sécurité.
<?php
declare(strict_types=1);
namespace App\Tests\Api\Security;
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\HttpClient\ResponseInterface;
use function Symfony\Component\String\u;
final class JsonLoginTest extends ApiTestCase
{
public function testLoginOK(): void
{
$response = $this->login('reader', 'test');
self::assertResponseIsSuccessful();
$arrayResponse = $response->toArray();
self::assertArrayHasKey('token', $arrayResponse);
self::assertNotTrue(u($response->toArray()['token'])->isEmpty());
}
public function testLoginNOK(): void
{
$this->login('reader', 'wrong password');
self::assertResponseStatusCodeSame(Response::HTTP_UNAUTHORIZED);
self::assertResponseHeaderSame('content-type', 'application/json');
self::assertJsonEquals([
'code' => Response::HTTP_UNAUTHORIZED,
'message' => 'Invalid credentials.',
]);
self::assertJsonContains([
'message' => 'Invalid credentials.',
]);
}
/**
* JSON Login try with a given email and password.
*/
public function login(string $username, string $password): ResponseInterface
{
return self::createClient()->request('POST', '/api/login_check', [
'json' => compact('username', 'password'),
]);
}
}
Plus sur Stackoverflow Lire la doc Plus sur le web Snippet aléatoire