89 lines
3.7 KiB
PHP
89 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Tests\Controller;
|
|
|
|
use App\Entity\User;
|
|
use App\Service\DecoderJWT\Interfaces\JWTDecoderServiceInterface;
|
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
|
|
final class InfoclinicaControllerTest extends WebTestCase
|
|
{
|
|
public function testClvisitsovacheckpassWithoutFilial(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
// Тестируем GET запрос без filial - должен вернуть 404
|
|
$client->request('GET', '/infoclinica/clvisitsovacheckpass');
|
|
|
|
self::assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND);
|
|
}
|
|
|
|
public function testClvisitsovacheckpassWithInvalidFilial(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
// Тестируем GET запрос с невалидным filial (не число) - должен вернуть 404
|
|
// requirements: ['filial' => '\d+'] требует только цифры
|
|
$client->request('GET', '/infoclinica/clvisitsovacheckpass/abc');
|
|
|
|
self::assertResponseStatusCodeSame(Response::HTTP_NOT_FOUND);
|
|
}
|
|
|
|
public function testClvisitsovacheckpassWithPostMethod(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
// Тестируем POST запрос - должен вернуть 405 Method Not Allowed
|
|
// так как эндпоинт принимает только GET
|
|
$client->request('POST', '/infoclinica/clvisitsovacheckpass/123');
|
|
|
|
self::assertResponseStatusCodeSame(Response::HTTP_METHOD_NOT_ALLOWED);
|
|
}
|
|
|
|
public function testClvisitsovacheckpassWithValidFilial(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
// Мокируем JWTDecoderService через контейнер
|
|
$container = static::getContainer();
|
|
$jwtDecoderServiceMock = $this->createMock(JWTDecoderServiceInterface::class);
|
|
$user = $this->createMock(User::class);
|
|
$jwtDecoderServiceMock->method('getUser')->willReturn($user);
|
|
|
|
// Заменяем сервис в контейнере
|
|
$container->set(JWTDecoderServiceInterface::class, $jwtDecoderServiceMock);
|
|
|
|
// Тестируем GET запрос с валидным filial
|
|
$client->request('GET', '/infoclinica/clvisitsovacheckpass/123');
|
|
|
|
self::assertResponseIsSuccessful();
|
|
self::assertResponseHeaderSame('content-type', 'application/json');
|
|
|
|
$responseData = json_decode($client->getResponse()->getContent(), true);
|
|
self::assertTrue($responseData);
|
|
}
|
|
|
|
public function testClvisitsovacheckpassWithoutAuth(): void
|
|
{
|
|
$client = static::createClient();
|
|
|
|
// Мокируем JWTDecoderService чтобы вернуть null (нет пользователя)
|
|
$container = static::getContainer();
|
|
$jwtDecoderServiceMock = $this->createMock(JWTDecoderServiceInterface::class);
|
|
$jwtDecoderServiceMock->method('getUser')->willReturn(null);
|
|
|
|
// Заменяем сервис в контейнере
|
|
$container->set(JWTDecoderServiceInterface::class, $jwtDecoderServiceMock);
|
|
|
|
// Тестируем GET запрос без авторизации
|
|
$client->request('GET', '/infoclinica/clvisitsovacheckpass/123');
|
|
|
|
self::assertResponseStatusCodeSame(Response::HTTP_UNAUTHORIZED);
|
|
|
|
$responseData = json_decode($client->getResponse()->getContent(), true);
|
|
self::assertArrayHasKey('error', $responseData);
|
|
self::assertEquals('Пользователь не найден', $responseData['error']);
|
|
}
|
|
}
|