/
Alexsey-VR
/
php-project-9
Обзор
Документация
Войти
/
Alexsey-VR
/
php-project-9
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
tests/Integration/UrlsCreateActionTest.php
225 строк
8 KB
Alexsey-VR
updated url create action test
24 май 2026, 19:31
24 май 2026, 19:31
558f0d2
Код
Авторство
О чём код?
<?php namespace Analyzer\Tests\Integration; use PHPUnit\Framework\TestCase; use PHPUnit\Framework\Attributes\CoversClass; use Analyzer\Controllers\UrlsCreateAction; use Slim\Flash\Messages; use Slim\Factory\AppFactory; use Slim\Interfaces\RouteParserInterface; use Slim\Views\PhpRenderer; use Slim\Http\Interfaces\ResponseInterface as SlimResponseInterface; use Psr\Http\Message\ResponseInterface as PsrResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Slim\Http\ServerRequest; use Analyzer\Repository\{UrlRepository, ValidatedUrlRepository}; use Analyzer\Url\Url; use PDO; #[CoversClass(UrlsCreateAction::class)] #[CoversClass(UrlRepository::class)] #[CoversClass(ValidatedUrlRepository::class)] #[CoversClass(Url::class)] class UrlsCreateActionTest extends TestCase { private PDO $connection; protected function setUp(): void { parent::setUp(); $databaseUrl = getenv('DATABASE_URL'); $databaseInfo = parse_url( htmlspecialchars( $databaseUrl ?: '' ) ); $dbPort = $databaseInfo['port'] ?? ''; $dbHost = $databaseInfo['host'] ?? ''; $dbParsedPath = $databaseInfo['path'] ?? ''; $dbPath = ltrim($dbParsedPath, '/'); $dbUser = $databaseInfo['user'] ?? ''; $dbPasswd = $databaseInfo['pass'] ?? ''; $dsn = "pgsql:host={$dbHost};port={$dbPort};dbname={$dbPath};user={$dbUser};password={$dbPasswd}"; $this->connection = new PDO($dsn); $this->connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $this->connection->beginTransaction(); } protected function tearDown(): void { $this->connection->rollBack(); parent::tearDown(); } public function testInvokeWithCreate(): void { $validatedUrlRepository = new ValidatedUrlRepository( new UrlRepository($this->connection), $this->connection ); $urlInfo = ['name' => 'https://ru.hexlet.io']; $url = Url::fromArray($urlInfo); $validatedUrlRepository->save($url); $messagesMock = $this->createMock(Messages::class); $messagesMock->method('getMessages')->willReturn(['OK']); $phpRouterMockBuilder = $this->getMockBuilder(RouteParserInterface::class); $phpRouterMock = $phpRouterMockBuilder->getMock(); $slimRenderer = new PhpRenderer(__DIR__ . '/../../templates'); $urlsCreateAction = new UrlsCreateAction( $validatedUrlRepository, $slimRenderer, $messagesMock, $phpRouterMock ); $serverRequestInterfaceMockBuilder = $this->getMockBuilder(ServerRequestInterface::class); $serverRequestInterfaceMock = $serverRequestInterfaceMockBuilder->getMock(); $serverRequestMockBuilder = $this->getMockBuilder(ServerRequest::class); $serverRequestMockBuilder->setConstructorArgs([$serverRequestInterfaceMock]); $serverRequestMock = $serverRequestMockBuilder->getMock(); $serverRequestMock->method('getParsedBodyParam')->willReturn(['name' => 'https://github.io']); $app = AppFactory::create(); $response = $app->getResponseFactory()->CreateResponse(); $responseMockBuilder = $this->getMockBuilder(SlimResponseInterface::class); $responseMock = $responseMockBuilder->getMock(); $responseMock->method('withRedirect')->willReturn($response); $psrResponse = $urlsCreateAction->__invoke( $serverRequestMock, $responseMock ); if ($psrResponse instanceof PsrResponseInterface) { $this->assertTrue($psrResponse->getStatusCode() === 200); } } public function testInvokeWithExists(): void { $validatedUrlRepository = new ValidatedUrlRepository( new UrlRepository($this->connection), $this->connection ); $urlInfo = ['name' => 'https://ru.hexlet.io']; $url = Url::fromArray($urlInfo); $validatedUrlRepository->save($url); $messagesMock = $this->createMock(Messages::class); $messagesMock->method('getMessages')->willReturn(['OK']); $phpRouterMockBuilder = $this->getMockBuilder(RouteParserInterface::class); $phpRouterMock = $phpRouterMockBuilder->getMock(); $slimRenderer = new PhpRenderer(__DIR__ . '/../../templates'); $urlsCreateAction = new UrlsCreateAction( $validatedUrlRepository, $slimRenderer, $messagesMock, $phpRouterMock ); $serverRequestInterfaceMockBuilder = $this->getMockBuilder(ServerRequestInterface::class); $serverRequestInterfaceMock = $serverRequestInterfaceMockBuilder->getMock(); $serverRequestMockBuilder = $this->getMockBuilder(ServerRequest::class); $serverRequestMockBuilder->setConstructorArgs([$serverRequestInterfaceMock]); $serverRequestMock = $serverRequestMockBuilder->getMock(); $serverRequestMock->method('getParsedBodyParam')->willReturn(['name' => 'https://github.io']); $app = AppFactory::create(); $response = $app->getResponseFactory()->CreateResponse(); $responseMockBuilder = $this->getMockBuilder(SlimResponseInterface::class); $responseMock = $responseMockBuilder->getMock(); $responseMock->method('withRedirect')->willReturn($response); $psrResponse = $urlsCreateAction->__invoke( $serverRequestMock, $responseMock ); $responseMock->method('withStatus')->willReturnSelf(); $psrResponse = $urlsCreateAction->__invoke( $serverRequestMock, $responseMock ); $urlInfo = ['name' => 'https://ru.hexlet.io']; $url = Url::fromArray($urlInfo); $validatedUrlRepository->save($url); $serverRequestMock->method('getParsedBodyParam')->willReturn(['name' => 'wrong.url']); $psrResponse = $urlsCreateAction->__invoke( $serverRequestMock, $responseMock ); if ($psrResponse instanceof PsrResponseInterface) { $this->assertTrue($psrResponse->getStatusCode() === 200); } } public function testNotValidUrl(): void { $validatedUrlRepository = new ValidatedUrlRepository( new UrlRepository($this->connection), $this->connection ); $urlInfo = ['name' => 'wrong.url']; $url = Url::fromArray($urlInfo); $validatedUrlRepository->save($url); $messagesMock = $this->createMock(Messages::class); $messagesMock->method('getMessages')->willReturn(['OK']); $slimRenderer = new PhpRenderer(__DIR__ . '/../../templates'); $phpRouterMockBuilder = $this->getMockBuilder(RouteParserInterface::class); $phpRouterMock = $phpRouterMockBuilder->getMock(); $urlsCreateAction = new UrlsCreateAction( $validatedUrlRepository, $slimRenderer, $messagesMock, $phpRouterMock ); $serverRequestInterfaceMockBuilder = $this->getMockBuilder(ServerRequestInterface::class); $serverRequestInterfaceMock = $serverRequestInterfaceMockBuilder->getMock(); $serverRequestMockBuilder = $this->getMockBuilder(ServerRequest::class); $serverRequestMockBuilder->setConstructorArgs([$serverRequestInterfaceMock]); $serverRequestMock = $serverRequestMockBuilder->getMock(); $serverRequestMock->method('getParsedBodyParam')->willReturn(['name' => 'wrong.url']); $responseMockBuilder = $this->getMockBuilder(SlimResponseInterface::class); $responseMock = $responseMockBuilder->getMock(); $responseMock->expects($this->once()) ->method('withStatus') ->with(422); $psrResponse = $urlsCreateAction->__invoke( $serverRequestMock, $responseMock ); } }