From 938d2b3784c1792257d231a39afc17cf61c63e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= <58430570+mateuszdebinski@users.noreply.github.com> Date: Wed, 20 Sep 2023 14:57:50 +0200 Subject: [PATCH] [Tests] Corrected field type integration test for external link For more details see https://github.com/ezsystems/ezplatform-richtext/pull/240 --- phpstan-baseline.neon | 7 ++- .../API/RichTextFieldTypeIntegrationTest.php | 53 ++++++++++++++----- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 2c8f17f4..61341fa8 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1662,9 +1662,12 @@ parameters: - message: "#^Cannot access property \\$id on eZ\\\\Publish\\\\API\\\\Repository\\\\Values\\\\Content\\\\Field\\|null\\.$#" - count: 2 + count: 1 + path: tests/integration/eZ/API/RichTextFieldTypeIntegrationTest.php + - + message: "#^Cannot call method fetchOne\\(\\) on Doctrine\\\\DBAL\\\\ForwardCompatibility\\\\Result\\|int\\|string\\.$#" + count: 1 path: tests/integration/eZ/API/RichTextFieldTypeIntegrationTest.php - - message: "#^Cannot access property \\$value on eZ\\\\Publish\\\\API\\\\Repository\\\\Values\\\\Content\\\\Field\\|null\\.$#" count: 1 diff --git a/tests/integration/eZ/API/RichTextFieldTypeIntegrationTest.php b/tests/integration/eZ/API/RichTextFieldTypeIntegrationTest.php index af6e087b..aff08aab 100644 --- a/tests/integration/eZ/API/RichTextFieldTypeIntegrationTest.php +++ b/tests/integration/eZ/API/RichTextFieldTypeIntegrationTest.php @@ -16,6 +16,8 @@ use eZ\Publish\API\Repository\Tests\FieldType\RelationSearchBaseIntegrationTestTrait; use eZ\Publish\API\Repository\Tests\FieldType\SearchBaseIntegrationTest; use eZ\Publish\API\Repository\Values\Content\Location; +use eZ\Publish\Core\Base\Exceptions\NotFoundException; +use eZ\Publish\Core\Persistence\Legacy\URL\Gateway\DoctrineDatabase; use EzSystems\EzPlatformRichText\eZ\FieldType\RichText\Value as RichTextValue; use eZ\Publish\API\Repository\Values\Content\Field; use DOMDocument; @@ -636,14 +638,15 @@ public function testConvertRemoteObjectIdToObjectId($test, $expected): void } /** + * @throws \Doctrine\DBAL\Driver\Exception + * @throws \Doctrine\DBAL\Exception * @throws \ErrorException - * @throws \eZ\Publish\API\Repository\Exceptions\ForbiddenException - * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException - * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException + * @throws \eZ\Publish\API\Repository\Exceptions\Exception */ public function testExternalLinkStoringAfterUpdate(): void { - $xmlDocument = $this->createXmlDocumentWithExternalLink(['https://ez.no/', 'https://support.ez.no/']); + $testLink = 'https://support.ez.no/'; + $xmlDocument = $this->createXmlDocumentWithExternalLink(['https://ez.no/', $testLink]); $repository = $this->getRepository(); $contentService = $repository->getContentService(); @@ -663,12 +666,8 @@ public function testExternalLinkStoringAfterUpdate(): void $content = $contentService->publishVersion( $content->versionInfo ); - $urlIds = $this->getUrlIdsForContentObjectAttributeIdAndVersionNo( - $content->getField('description')->id, - $content->contentInfo->currentVersionNo - ); - $xmlDocument = $this->createXmlDocumentWithExternalLink(['https://support.ez.no/']); + $xmlDocument = $this->createXmlDocumentWithExternalLink([$testLink]); $contentUpdateStruct = $contentService->newContentUpdateStruct(); $contentUpdateStruct->setField('description', $xmlDocument, 'eng-GB'); $contentDraft = $contentService->updateContent( @@ -681,7 +680,37 @@ public function testExternalLinkStoringAfterUpdate(): void $content->contentInfo->currentVersionNo ); - $this->assertNotContains(reset($urlIds), $urlIdsAfterUpdate); + $urlId = $this->getUrlIdForLink($testLink); + + self::assertContains($urlId, $urlIdsAfterUpdate); + } + + /** + * @throws \eZ\Publish\API\Repository\Exceptions\NotFoundException + * @throws \Doctrine\DBAL\Driver\Exception + * @throws \Doctrine\DBAL\Exception + * @throws \ErrorException + */ + private function getUrlIdForLink(string $link): int + { + $connection = $this->getRawDatabaseConnection(); + $query = $connection->createQueryBuilder(); + $query + ->select( + $connection->quoteIdentifier('id') + ) + ->from(DoctrineDatabase::URL_TABLE) + ->where('url = :url') + ->setParameter(':url', $link, ParameterType::STRING) + ; + + $id = $query->execute()->fetchOne(); + + if ($id === false) { + throw new NotFoundException('ezurl', $link); + } + + return (int)$id; } /** @@ -911,7 +940,7 @@ public function testInternalLinkValidatorIgnoresMissingRelationOnNotUpdatedField $repository = $this->getRepository(); $contentService = $repository->getContentService(); - list(, $contentB) = $this->prepareInternalLinkValidatorBrokenLinksTestCase($repository); + [, $contentB] = $this->prepareInternalLinkValidatorBrokenLinksTestCase($repository); // update field w/o erroneous link to trigger validation $contentUpdateStruct = $contentService->newContentUpdateStruct(); @@ -939,7 +968,7 @@ public function testInternalLinkValidatorReturnsErrorOnMissingRelationInUpdatedF $repository = $this->getRepository(); $contentService = $repository->getContentService(); - list($deletedLocation, $brokenContent) = $this->prepareInternalLinkValidatorBrokenLinksTestCase( + [$deletedLocation, $brokenContent] = $this->prepareInternalLinkValidatorBrokenLinksTestCase( $repository );