* `ERR_NAME_NOT_RESOLVED` + ~3 s de timeout DNS. Cf. ApiLogoutSuccessListener. * * @internal */ final class LogoutApiTest extends AbstractApiTestCase { public function testLogoutReturns204WithoutRedirectAndClearsBearerCookie(): void { $client = $this->authenticatedClient('admin', 'admin'); $response = $client->request('POST', '/api/logout'); self::assertSame(204, $response->getStatusCode(), 'Le logout API doit renvoyer 204 No Content.'); $headers = $response->getHeaders(false); // Aucune redirection : un fetch ne doit pas avoir de Location a suivre. self::assertArrayNotHasKey( 'location', $headers, 'Le logout API ne doit pas rediriger (fetch suivrait un Location absolu => ERR_NAME_NOT_RESOLVED).', ); // Le cookie BEARER est efface (Set-Cookie expire / supprime). $clearsBearer = false; foreach ($headers['set-cookie'] ?? [] as $cookie) { if (str_starts_with($cookie, 'BEARER=') && (str_contains($cookie, 'BEARER=deleted') || str_contains($cookie, 'Max-Age=0')) ) { $clearsBearer = true; } } self::assertTrue($clearsBearer, 'Le cookie BEARER doit etre efface au logout.'); } }