diff --git a/.gitignore b/.gitignore index ae2b60b4ef..0a5395c8d0 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ yarn-error.log package-lock.json .DS_Store .phpunit.result.cache +.phpunit.cache/ composer.lock /var tsconfig.json diff --git a/composer.json b/composer.json index 2097b7a1bb..c7252bf676 100644 --- a/composer.json +++ b/composer.json @@ -76,11 +76,12 @@ "ibexa/test-core": "~6.0.x-dev", "ibexa/test-rest": "~6.0.x-dev", "ibexa/translations": "~6.0.x-dev", - "matthiasnoback/symfony-dependency-injection-test": "^5.0", + "matthiasnoback/symfony-dependency-injection-test": "^6.0", "phpstan/phpstan": "^2.0", "phpstan/phpstan-phpunit": "^2.0", "phpstan/phpstan-symfony": "^2.0", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^11.5", + "symfony/phpunit-bridge": "^7.4", "webmozart/assert": "^2.3" }, "config": { diff --git a/phpunit.integration.xml b/phpunit.integration.xml index 6f2eb4cef6..49d565acb3 100644 --- a/phpunit.integration.xml +++ b/phpunit.integration.xml @@ -1,22 +1,17 @@ - - - - tests/integration - - - - - - - - - - + + + + + tests/integration + + + + + + + + + + + diff --git a/phpunit.xml b/phpunit.xml index 1185dc16a6..89b80af6a1 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,19 +1,19 @@ - - - - tests/bundle - - - tests/lib - - - - - src - - + + + + + tests/bundle + + + tests/lib + + + + + src + + + + + diff --git a/tests/bundle/ControllerArgumentResolver/ContentTreeChildrenQueryArgumentResolverTest.php b/tests/bundle/ControllerArgumentResolver/ContentTreeChildrenQueryArgumentResolverTest.php index 3c2ae8781a..87f3e66e0c 100644 --- a/tests/bundle/ControllerArgumentResolver/ContentTreeChildrenQueryArgumentResolverTest.php +++ b/tests/bundle/ControllerArgumentResolver/ContentTreeChildrenQueryArgumentResolverTest.php @@ -16,6 +16,8 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\LogicalAnd; use Ibexa\Contracts\Core\Repository\Values\Content\Query\CriterionInterface; use Ibexa\Contracts\Rest\Input\Parser\Query\Criterion\CriterionProcessorInterface; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Controller\ValueResolverInterface; @@ -26,9 +28,8 @@ * @phpstan-type TCriterionProcessor \Ibexa\Contracts\Rest\Input\Parser\Query\Criterion\CriterionProcessorInterface< * \Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion * > - * - * @covers \Ibexa\Bundle\AdminUi\ValueResolver\ContentTreeChildrenQueryValueResolver */ +#[CoversClass(ContentTreeChildrenQueryValueResolver::class)] final class ContentTreeChildrenQueryArgumentResolverTest extends TestCase { private ValueResolverInterface $resolver; @@ -44,9 +45,7 @@ protected function setUp(): void ); } - /** - * @dataProvider provideDataForUnsupported - */ + #[DataProvider('provideDataForUnsupported')] public function testUnsupported(ArgumentMetadata $argumentMetadata): void { $actualResult = $this->resolver->resolve( @@ -62,21 +61,21 @@ public function testUnsupported(ArgumentMetadata $argumentMetadata): void * \Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata * }> */ - public function provideDataForUnsupported(): iterable + public static function provideDataForUnsupported(): iterable { yield 'Not supported' => [ - $this->createMock(ArgumentMetadata::class), + self::createStub(ArgumentMetadata::class), ]; yield 'Not supported - invalid argument type' => [ - $this->createArgumentMetadata( + self::createArgumentMetadata( 'filter', 'foo', ), ]; yield 'Not supported - invalid argument name' => [ - $this->createArgumentMetadata( + self::createArgumentMetadata( 'foo', Criterion::class, ), @@ -84,13 +83,12 @@ public function provideDataForUnsupported(): iterable } /** - * @dataProvider provideDataForTestResolve - * * @param array> $criteriaToProcess * @param Traversable<\Ibexa\Contracts\Core\Repository\Values\Content\Query\CriterionInterface> $expectedCriteria * * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException */ + #[DataProvider('provideDataForTestResolve')] public function testResolve( CriterionInterface $expected, Request $request, @@ -130,17 +128,17 @@ public function testResolve( * * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidCriterionArgumentException */ - public function provideDataForTestResolve(): iterable + public static function provideDataForTestResolve(): iterable { yield 'Return null - missing filter query param' => [ new LogicalAnd([]), - $this->createRequest(null), + self::createRequest(null), new ArrayIterator(), ]; yield 'Return null - empty value for filter query param' => [ new LogicalAnd([]), - $this->createRequest([]), + self::createRequest([]), new ArrayIterator(), ]; @@ -153,7 +151,7 @@ public function provideDataForTestResolve(): iterable yield 'Return filter with ContentTypeIdentifier criterion' => [ new LogicalAnd($expectedCriteria), - $this->createRequest($criteriaToProcess), + self::createRequest($criteriaToProcess), new ArrayIterator($expectedCriteria), $criteriaToProcess, ]; @@ -176,7 +174,7 @@ private function mockCriterionProcessorProcessCriteria( /** * @param array|null $filter */ - private function createRequest(?array $filter): Request + private static function createRequest(?array $filter): Request { $request = Request::create('/'); @@ -187,7 +185,7 @@ private function createRequest(?array $filter): Request return $request; } - private function createArgumentMetadata( + private static function createArgumentMetadata( string $name, string $type ): ArgumentMetadata { diff --git a/tests/bundle/DependencyInjection/Compiler/FieldTypeFormMapperDispatcherPassTest.php b/tests/bundle/DependencyInjection/Compiler/FieldTypeFormMapperDispatcherPassTest.php index 63a0ccb1ab..062283a800 100644 --- a/tests/bundle/DependencyInjection/Compiler/FieldTypeFormMapperDispatcherPassTest.php +++ b/tests/bundle/DependencyInjection/Compiler/FieldTypeFormMapperDispatcherPassTest.php @@ -10,6 +10,7 @@ use Ibexa\Bundle\AdminUi\DependencyInjection\Compiler\FieldTypeFormMapperDispatcherPass; use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractCompilerPassTestCase; +use PHPUnit\Framework\Attributes\DataProvider; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; @@ -28,9 +29,7 @@ protected function registerCompilerPass(ContainerBuilder $container): void $container->addCompilerPass(new FieldTypeFormMapperDispatcherPass()); } - /** - * @dataProvider tagsProvider - */ + #[DataProvider('tagsProvider')] public function testRegisterMappers(string $tag): void { $fieldTypeIdentifier = 'field_type_identifier'; @@ -51,7 +50,7 @@ public function testRegisterMappers(string $tag): void /** * @return array> */ - public function tagsProvider(): array + public static function tagsProvider(): array { return [ [FieldTypeFormMapperDispatcherPass::FIELD_TYPE_FORM_MAPPER_DEFINITION_SERVICE_TAG], diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php index 7b5d3c44c4..e4c48456b9 100644 --- a/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php +++ b/tests/bundle/DependencyInjection/Configuration/Parser/AdminUiFormsTest.php @@ -51,22 +51,22 @@ public function testContentEditFormTemplatesAreMapped(): void 'my_template-01.html.twig', 'my_template-02.html.twig', ]; + $matcher = self::atLeast(2); $this->contextualizer - ->expects(self::atLeast(2)) - ->method('setContextualParameter') - ->withConsecutive( - [ - AdminUiForms::FORM_TEMPLATES_PARAM, - $currentScope, - $expectedTemplatesList, - ], - [ - AdminUiForms::FIELD_TYPES_PARAM, - $currentScope, - [], - ], - ); + ->expects($matcher) + ->method('setContextualParameter')->willReturnCallback(function (...$parameters) use ($matcher, $currentScope, $expectedTemplatesList): void { + if ($matcher->numberOfInvocations() === 1) { + $this->assertSame(AdminUiForms::FORM_TEMPLATES_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame($expectedTemplatesList, $parameters[2]); + } + if ($matcher->numberOfInvocations() === 2) { + $this->assertSame(AdminUiForms::FIELD_TYPES_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame([], $parameters[2]); + } + }); $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); } @@ -92,22 +92,22 @@ public function testContentEditFieldTypesAreMapped(): void 'my_fieldtype' => ['meta' => true], 'my_fieldtype_2' => ['meta' => false], ]; + $matcher = self::atLeast(2); $this->contextualizer - ->expects(self::atLeast(2)) - ->method('setContextualParameter') - ->withConsecutive( - [ - AdminUiForms::FORM_TEMPLATES_PARAM, - $currentScope, - [], - ], - [ - AdminUiForms::FIELD_TYPES_PARAM, - $currentScope, - $expectedFieldTypeSettings, - ], - ); + ->expects($matcher) + ->method('setContextualParameter')->willReturnCallback(function (...$parameters) use ($matcher, $currentScope, $expectedFieldTypeSettings): void { + if ($matcher->numberOfInvocations() === 1) { + $this->assertSame(AdminUiForms::FORM_TEMPLATES_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame([], $parameters[2]); + } + if ($matcher->numberOfInvocations() === 2) { + $this->assertSame(AdminUiForms::FIELD_TYPES_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame($expectedFieldTypeSettings, $parameters[2]); + } + }); $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); } @@ -128,27 +128,27 @@ public function testContentEditMetaFieldgroupListIsMapped(): void ], ]; $currentScope = 'admin_group'; + $matcher = self::atLeast(2); $this->contextualizer - ->expects(self::atLeast(2)) - ->method('setContextualParameter') - ->withConsecutive( - [ - AdminUiForms::FORM_TEMPLATES_PARAM, - $currentScope, - [], - ], - [ - AdminUiForms::FIELD_TYPES_PARAM, - $currentScope, - [], - ], - [ - AdminUiForms::META_FIELD_GROUPS_LIST_PARAM, - $currentScope, - ['metadata', 'seo'], - ], - ); + ->expects($matcher) + ->method('setContextualParameter')->willReturnCallback(function (...$parameters) use ($matcher, $currentScope): void { + if ($matcher->numberOfInvocations() === 1) { + $this->assertSame(AdminUiForms::FORM_TEMPLATES_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame([], $parameters[2]); + } + if ($matcher->numberOfInvocations() === 2) { + $this->assertSame(AdminUiForms::FIELD_TYPES_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame([], $parameters[2]); + } + if ($matcher->numberOfInvocations() === 3) { + $this->assertSame(AdminUiForms::META_FIELD_GROUPS_LIST_PARAM, $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame(['metadata', 'seo'], $parameters[2]); + } + }); $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); } diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/ContentTypeFieldsByExpressionTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/ContentTypeFieldsByExpressionTest.php index 37e20ea281..58299b39ca 100644 --- a/tests/bundle/DependencyInjection/Configuration/Parser/ContentTypeFieldsByExpressionTest.php +++ b/tests/bundle/DependencyInjection/Configuration/Parser/ContentTypeFieldsByExpressionTest.php @@ -10,11 +10,10 @@ use Ibexa\Bundle\AdminUi\DependencyInjection\Configuration\Parser\ContentTypeFieldsByExpression; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; -/** - * @covers \Ibexa\Bundle\AdminUi\DependencyInjection\Configuration\Parser\SubtreeOperations - */ +#[CoversClass(ContentTypeFieldsByExpression::class)] final class ContentTypeFieldsByExpressionTest extends TestCase { private ContentTypeFieldsByExpression $parser; diff --git a/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php b/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php index f5929379fe..3ef8fb120b 100644 --- a/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php +++ b/tests/bundle/DependencyInjection/Configuration/Parser/SubtreeOperationsTest.php @@ -10,11 +10,11 @@ use Ibexa\Bundle\AdminUi\DependencyInjection\Configuration\Parser\SubtreeOperations; use Ibexa\Bundle\Core\DependencyInjection\Configuration\SiteAccessAware\ContextualizerInterface; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; -/** - * @covers \Ibexa\Bundle\AdminUi\DependencyInjection\Configuration\Parser\SubtreeOperations - */ +#[CoversClass(SubtreeOperations::class)] final class SubtreeOperationsTest extends TestCase { private SubtreeOperations $parser; @@ -25,7 +25,7 @@ final class SubtreeOperationsTest extends TestCase /** * @return iterable */ - public function getExpectedCopySubtreeLimit(): iterable + public static function getExpectedCopySubtreeLimit(): iterable { yield 'default = 100' => [100]; yield 'no limit = -1' => [-1]; @@ -35,7 +35,7 @@ public function getExpectedCopySubtreeLimit(): iterable /** * @return iterable */ - public function getExpectedQuerySubtreeLimit(): iterable + public static function getExpectedQuerySubtreeLimit(): iterable { yield 'no limit = -1' => [-1]; yield 'custom limit = 1000' => [1000]; @@ -48,9 +48,7 @@ protected function setUp(): void $this->contextualizer = $this->createMock(ContextualizerInterface::class); } - /** - * @dataProvider getExpectedCopySubtreeLimit - */ + #[DataProvider('getExpectedCopySubtreeLimit')] public function testCopySubtreeLimit(int $expectedCopySubtreeLimit): void { $scopeSettings = [ @@ -88,9 +86,7 @@ public function testCopySubtreeLimitNotSet(): void $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); } - /** - * @dataProvider getExpectedQuerySubtreeLimit - */ + #[DataProvider('getExpectedQuerySubtreeLimit')] public function testQuerySubtreeLimit(int $expectedQuerySubtreeLimit): void { $scopeSettings = [ @@ -143,22 +139,22 @@ public function testBothSubtreeOperationsSet(): void ], ]; $currentScope = 'admin_group'; + $matcher = self::exactly(2); $this->contextualizer - ->expects(self::exactly(2)) - ->method('setContextualParameter') - ->withConsecutive( - [ - 'subtree_operations.copy_subtree.limit', - $currentScope, - 200, - ], - [ - 'subtree_operations.query_subtree.limit', - $currentScope, - 500, - ] - ); + ->expects($matcher) + ->method('setContextualParameter')->willReturnCallback(function (...$parameters) use ($matcher, $currentScope): void { + if ($matcher->numberOfInvocations() === 1) { + $this->assertSame('subtree_operations.copy_subtree.limit', $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame(200, $parameters[2]); + } + if ($matcher->numberOfInvocations() === 2) { + $this->assertSame('subtree_operations.query_subtree.limit', $parameters[0]); + $this->assertSame($currentScope, $parameters[1]); + $this->assertSame(500, $parameters[2]); + } + }); $this->parser->mapConfig($scopeSettings, $currentScope, $this->contextualizer); } diff --git a/tests/bundle/Templating/Twig/EmbeddedItemEditFormExtensionTest.php b/tests/bundle/Templating/Twig/EmbeddedItemEditFormExtensionTest.php index d3f1b232fe..95080ad2ed 100644 --- a/tests/bundle/Templating/Twig/EmbeddedItemEditFormExtensionTest.php +++ b/tests/bundle/Templating/Twig/EmbeddedItemEditFormExtensionTest.php @@ -11,14 +11,15 @@ use Ibexa\AdminUi\Form\Data\Content\Draft\ContentEditData; use Ibexa\AdminUi\Form\Factory\FormFactory; use Ibexa\Bundle\AdminUi\Templating\Twig\EmbeddedItemEditFormExtension; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; use Symfony\Component\Routing\RouterInterface; use Twig\Test\IntegrationTestCase; -/** - * @covers \Ibexa\Bundle\AdminUi\Templating\Twig\EmbeddedItemEditFormExtension - */ +#[CoversClass(EmbeddedItemEditFormExtension::class)] final class EmbeddedItemEditFormExtensionTest extends IntegrationTestCase { private const string FORM_ACTION = '/admin/content/edit'; @@ -34,10 +35,6 @@ protected function getExtensions(): array } /** - * @dataProvider getLegacyTests - * - * @group legacy - * * @param string $file * @param string $message * @param string $condition @@ -46,6 +43,8 @@ protected function getExtensions(): array * @param array $outputs * @param string $deprecation */ + #[Group('legacy')] + #[DataProvider('provideLegacyTests')] public function testLegacyIntegration( $file, $message, @@ -59,7 +58,7 @@ public function testLegacyIntegration( self::markTestSkipped('This package does not contain Twig legacy integration test cases'); } - protected function getFixturesDir(): string + protected static function getFixturesDirectory(): string { return __DIR__ . '/_fixtures/render_embedded_item_edit_form/'; } @@ -73,7 +72,7 @@ private function createEditForm(): FormInterface $editForm ->method('createView') ->willReturn( - $this->createMock(FormView::class) + self::createStub(FormView::class) ); return $editForm; diff --git a/tests/bundle/Templating/Twig/FieldEditRenderingExtensionTest.php b/tests/bundle/Templating/Twig/FieldEditRenderingExtensionTest.php index 6104225752..add34bee72 100644 --- a/tests/bundle/Templating/Twig/FieldEditRenderingExtensionTest.php +++ b/tests/bundle/Templating/Twig/FieldEditRenderingExtensionTest.php @@ -14,6 +14,8 @@ use Ibexa\Core\MVC\Symfony\Templating\Twig\ResourceProviderInterface; use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; use Ibexa\Tests\Core\MVC\Symfony\Templating\Twig\Extension\FileSystemTwigIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; use Twig\Environment; final class FieldEditRenderingExtensionTest extends FileSystemTwigIntegrationTestCase @@ -42,7 +44,7 @@ public function getExtensions(): array ]); $fieldBlockRenderer = new FieldBlockRenderer( - $this->createMock(Environment::class), + self::createStub(Environment::class), $resourceProvider, $this->getTemplatePath('base.html.twig') ); @@ -73,10 +75,6 @@ public function getFieldDefinitionData( } /** - * @dataProvider getLegacyTests - * - * @group legacy - * * @param string $file * @param string $message * @param string $condition @@ -85,6 +83,8 @@ public function getFieldDefinitionData( * @param array $outputs * @param string $deprecation */ + #[Group('legacy')] + #[DataProvider('provideLegacyTests')] public function testLegacyIntegration( $file, $message, diff --git a/tests/bundle/Templating/Twig/FocusModeExtensionTest.php b/tests/bundle/Templating/Twig/FocusModeExtensionTest.php index 6ad03bb7d8..fb90f2fa67 100644 --- a/tests/bundle/Templating/Twig/FocusModeExtensionTest.php +++ b/tests/bundle/Templating/Twig/FocusModeExtensionTest.php @@ -29,7 +29,7 @@ protected function getExtensions(): array ]; } - protected function getFixturesDir(): string + protected static function getFixturesDirectory(): string { return __DIR__ . '/_fixtures/focus_mode/'; } diff --git a/tests/bundle/Templating/Twig/LocationExtensionTest.php b/tests/bundle/Templating/Twig/LocationExtensionTest.php index c1baee526f..eafc990706 100644 --- a/tests/bundle/Templating/Twig/LocationExtensionTest.php +++ b/tests/bundle/Templating/Twig/LocationExtensionTest.php @@ -21,7 +21,7 @@ protected function getExtensions(): array ]; } - protected function getFixturesDir(): string + protected static function getFixturesDirectory(): string { return __DIR__ . '/_fixtures/location/'; } diff --git a/tests/bundle/ValueResolver/ContentInfoValueResolverTest.php b/tests/bundle/ValueResolver/ContentInfoValueResolverTest.php index 96eb61312e..f71e16286e 100644 --- a/tests/bundle/ValueResolver/ContentInfoValueResolverTest.php +++ b/tests/bundle/ValueResolver/ContentInfoValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ContentInfoValueResolver; use Ibexa\Contracts\Core\Repository\ContentService; use Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void ContentInfoValueResolver::ATTRIBUTE_CONTENT_INFO_ID => '1', ]); - $mockContentInfo = $this->createMock(ContentInfo::class); + $mockContentInfo = self::createStub(ContentInfo::class); $this->contentServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing contentInfoId' => [ diff --git a/tests/bundle/ValueResolver/ContentTypeDraftValueResolverTest.php b/tests/bundle/ValueResolver/ContentTypeDraftValueResolverTest.php index 30b74c13cf..eb1400a72f 100644 --- a/tests/bundle/ValueResolver/ContentTypeDraftValueResolverTest.php +++ b/tests/bundle/ValueResolver/ContentTypeDraftValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ContentTypeDraftValueResolver; use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentTypeDraft; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'contentTypeId' => '1', ]); - $mockContentTypeDraft = $this->createMock(ContentTypeDraft::class); + $mockContentTypeDraft = self::createStub(ContentTypeDraft::class); $this->contentTypeServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing contentTypeId' => [ diff --git a/tests/bundle/ValueResolver/ContentTypeFromIdValueResolverTest.php b/tests/bundle/ValueResolver/ContentTypeFromIdValueResolverTest.php index dae23d46e4..f7197b9b10 100644 --- a/tests/bundle/ValueResolver/ContentTypeFromIdValueResolverTest.php +++ b/tests/bundle/ValueResolver/ContentTypeFromIdValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ContentTypeFromIdValueResolver; use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'contentTypeId' => '123', ]); - $mockContentType = $this->createMock(ContentType::class); + $mockContentType = self::createStub(ContentType::class); $this->contentTypeServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing contentTypeId' => [ diff --git a/tests/bundle/ValueResolver/ContentTypeFromIdentifierValueResolverTest.php b/tests/bundle/ValueResolver/ContentTypeFromIdentifierValueResolverTest.php index 5608683813..aefcd21818 100644 --- a/tests/bundle/ValueResolver/ContentTypeFromIdentifierValueResolverTest.php +++ b/tests/bundle/ValueResolver/ContentTypeFromIdentifierValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ContentTypeFromIdentifierValueResolver; use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'contentTypeIdentifier' => 'article', ]); - $mockContentType = $this->createMock(ContentType::class); + $mockContentType = self::createStub(ContentType::class); $this->contentTypeServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing contentTypeIdentifier' => [ diff --git a/tests/bundle/ValueResolver/ContentTypeGroupValueResolverTest.php b/tests/bundle/ValueResolver/ContentTypeGroupValueResolverTest.php index 2e128b79a5..e036764130 100644 --- a/tests/bundle/ValueResolver/ContentTypeGroupValueResolverTest.php +++ b/tests/bundle/ValueResolver/ContentTypeGroupValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ContentTypeGroupValueResolver; use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentTypeGroup; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'contentTypeGroupId' => '123', ]); - $mockContentTypeGroup = $this->createMock(ContentTypeGroup::class); + $mockContentTypeGroup = self::createStub(ContentTypeGroup::class); $this->contentTypeServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing contentTypeGroupId' => [ diff --git a/tests/bundle/ValueResolver/ContentValueResolverTest.php b/tests/bundle/ValueResolver/ContentValueResolverTest.php index fecb5bbf15..a2fed08a43 100644 --- a/tests/bundle/ValueResolver/ContentValueResolverTest.php +++ b/tests/bundle/ValueResolver/ContentValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ContentValueResolver; use Ibexa\Contracts\Core\Repository\ContentService; use Ibexa\Contracts\Core\Repository\Values\Content\Content; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -29,10 +30,9 @@ protected function setUp(): void } /** - * @dataProvider validAttributesProvider - * * @param array $attributes */ + #[DataProvider('validAttributesProvider')] public function testResolve(array $attributes): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -41,7 +41,7 @@ public function testResolve(array $attributes): void ->willReturn(Content::class); $request = new Request([], [], $attributes); - $mockContent = $this->createMock(Content::class); + $mockContent = self::createStub(Content::class); $this->contentServiceMock ->expects(self::once()) @@ -57,7 +57,7 @@ public function testResolve(array $attributes): void /** * @phpstan-return array}> */ - public function validAttributesProvider(): array + public static function validAttributesProvider(): array { return [ 'full valid attributes' => [ @@ -77,10 +77,9 @@ public function validAttributesProvider(): array } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -98,7 +97,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing contentId' => [ diff --git a/tests/bundle/ValueResolver/LanguageFromCodeValueResolverTest.php b/tests/bundle/ValueResolver/LanguageFromCodeValueResolverTest.php index 0a72ffbcd4..29987193cd 100644 --- a/tests/bundle/ValueResolver/LanguageFromCodeValueResolverTest.php +++ b/tests/bundle/ValueResolver/LanguageFromCodeValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\LanguageFromCodeValueResolver; use Ibexa\Contracts\Core\Repository\LanguageService; use Ibexa\Contracts\Core\Repository\Values\Content\Language; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'languageCode' => 'pol-pl', ]); - $mockLanguage = $this->createMock(Language::class); + $mockLanguage = self::createStub(Language::class); $this->languageServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing languageCode' => [ diff --git a/tests/bundle/ValueResolver/LanguageFromIdValueResolverTest.php b/tests/bundle/ValueResolver/LanguageFromIdValueResolverTest.php index 47321d4246..0ae34a8f90 100644 --- a/tests/bundle/ValueResolver/LanguageFromIdValueResolverTest.php +++ b/tests/bundle/ValueResolver/LanguageFromIdValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\LanguageFromIdValueResolver; use Ibexa\Contracts\Core\Repository\LanguageService; use Ibexa\Contracts\Core\Repository\Values\Content\Language; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'languageId' => '1', ]); - $mockLanguage = $this->createMock(Language::class); + $mockLanguage = self::createStub(Language::class); $this->languageServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing languageId' => [ diff --git a/tests/bundle/ValueResolver/ObjectStateGroupValueResolverTest.php b/tests/bundle/ValueResolver/ObjectStateGroupValueResolverTest.php index c9faa690fb..2f1bc75ffa 100644 --- a/tests/bundle/ValueResolver/ObjectStateGroupValueResolverTest.php +++ b/tests/bundle/ValueResolver/ObjectStateGroupValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ObjectStateGroupValueResolver; use Ibexa\Contracts\Core\Repository\ObjectStateService; use Ibexa\Contracts\Core\Repository\Values\ObjectState\ObjectStateGroup; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'objectStateGroupId' => '123', ]); - $mockObjectStateGroup = $this->createMock(ObjectStateGroup::class); + $mockObjectStateGroup = self::createStub(ObjectStateGroup::class); $this->objectStateServiceMock ->expects(self::once()) @@ -53,11 +54,10 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes * @param string $expectedMessage */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -75,7 +75,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing objectStateGroupId' => [ diff --git a/tests/bundle/ValueResolver/ObjectStateValueResolverTest.php b/tests/bundle/ValueResolver/ObjectStateValueResolverTest.php index aa9d0f848d..740272213e 100644 --- a/tests/bundle/ValueResolver/ObjectStateValueResolverTest.php +++ b/tests/bundle/ValueResolver/ObjectStateValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\ObjectStateValueResolver; use Ibexa\Contracts\Core\Repository\ObjectStateService; use Ibexa\Contracts\Core\Repository\Values\ObjectState\ObjectState; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -34,7 +35,7 @@ public function testResolve(): void 'objectStateId' => '123', ]); - $objectState = $this->createMock(ObjectState::class); + $objectState = self::createStub(ObjectState::class); $this->objectStateService ->method('loadObjectState') @@ -51,10 +52,9 @@ public function testResolve(): void } /** - * @dataProvider invalidRequestProvider - * * @param array $attributes */ + #[DataProvider('invalidRequestProvider')] public function testResolveInvalidRequest(array $attributes): void { $request = new Request([], [], $attributes); @@ -70,7 +70,7 @@ public function testResolveInvalidRequest(array $attributes): void /** * @phpstan-return array>> */ - public function invalidRequestProvider(): array + public static function invalidRequestProvider(): array { return [ 'missing objectStateId' => [ diff --git a/tests/bundle/ValueResolver/PolicyValueResolverTest.php b/tests/bundle/ValueResolver/PolicyValueResolverTest.php index 67860cbec6..45d7c5c9f6 100644 --- a/tests/bundle/ValueResolver/PolicyValueResolverTest.php +++ b/tests/bundle/ValueResolver/PolicyValueResolverTest.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\Values\User\PolicyDraft; use Ibexa\Contracts\Core\Repository\Values\User\Role; use Ibexa\Contracts\Core\Repository\Values\User\RoleDraft; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -95,10 +96,9 @@ public function testResolvePolicyNotFound(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $argumentMetadata = $this->createMock(ArgumentMetadata::class); diff --git a/tests/bundle/ValueResolver/RoleAssignmentValueResolverTest.php b/tests/bundle/ValueResolver/RoleAssignmentValueResolverTest.php index fa73f0b7d8..91821918e9 100644 --- a/tests/bundle/ValueResolver/RoleAssignmentValueResolverTest.php +++ b/tests/bundle/ValueResolver/RoleAssignmentValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\RoleAssignmentValueResolver; use Ibexa\Contracts\Core\Repository\RoleService; use Ibexa\Contracts\Core\Repository\Values\User\RoleAssignment; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -30,7 +31,7 @@ protected function setUp(): void public function testResolve(): void { - $roleAssignment = $this->createMock(RoleAssignment::class); + $roleAssignment = self::createStub(RoleAssignment::class); $attributes = ['roleAssignmentId' => '789']; $this->roleService->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $argumentMetadata = $this->createMock(ArgumentMetadata::class); diff --git a/tests/bundle/ValueResolver/RoleValueResolverTest.php b/tests/bundle/ValueResolver/RoleValueResolverTest.php index c532650e04..d1955fde7c 100644 --- a/tests/bundle/ValueResolver/RoleValueResolverTest.php +++ b/tests/bundle/ValueResolver/RoleValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\RoleValueResolver; use Ibexa\Contracts\Core\Repository\RoleService; use Ibexa\Contracts\Core\Repository\Values\User\Role; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -30,7 +31,7 @@ protected function setUp(): void public function testResolve(): void { - $role = $this->createMock(Role::class); + $role = self::createStub(Role::class); $attributes = ['roleId' => '456']; $this->roleService->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $argumentMetadata = $this->createMock(ArgumentMetadata::class); diff --git a/tests/bundle/ValueResolver/SectionValueResolverTest.php b/tests/bundle/ValueResolver/SectionValueResolverTest.php index a4d10206f1..05ab2b93ed 100644 --- a/tests/bundle/ValueResolver/SectionValueResolverTest.php +++ b/tests/bundle/ValueResolver/SectionValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\SectionValueResolver; use Ibexa\Contracts\Core\Repository\SectionService; use Ibexa\Contracts\Core\Repository\Values\Content\Section; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -30,7 +31,7 @@ protected function setUp(): void public function testResolve(): void { - $section = $this->createMock(Section::class); + $section = self::createStub(Section::class); $attributes = ['sectionId' => '123']; $this->sectionService->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $argumentMetadata = $this->createMock(ArgumentMetadata::class); diff --git a/tests/bundle/ValueResolver/SourceLanguageValueResolverTest.php b/tests/bundle/ValueResolver/SourceLanguageValueResolverTest.php index 6e2be6ee2c..2e613ef65d 100644 --- a/tests/bundle/ValueResolver/SourceLanguageValueResolverTest.php +++ b/tests/bundle/ValueResolver/SourceLanguageValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\SourceLanguageValueResolver; use Ibexa\Contracts\Core\Repository\LanguageService; use Ibexa\Contracts\Core\Repository\Values\Content\Language; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -30,7 +31,7 @@ protected function setUp(): void public function testResolve(): void { - $language = $this->createMock(Language::class); + $language = self::createStub(Language::class); $attributes = ['fromLanguageCode' => 'fra-FR']; $this->languageService->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $argumentMetadata = $this->createMock(ArgumentMetadata::class); diff --git a/tests/bundle/ValueResolver/TargetLanguageValueResolverTest.php b/tests/bundle/ValueResolver/TargetLanguageValueResolverTest.php index eab0c48504..f48d437e2d 100644 --- a/tests/bundle/ValueResolver/TargetLanguageValueResolverTest.php +++ b/tests/bundle/ValueResolver/TargetLanguageValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\TargetLanguageValueResolver; use Ibexa\Contracts\Core\Repository\LanguageService; use Ibexa\Contracts\Core\Repository\Values\Content\Language; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -30,7 +31,7 @@ protected function setUp(): void public function testResolve(): void { - $language = $this->createMock(Language::class); + $language = self::createStub(Language::class); $attributes = ['toLanguageCode' => 'eng-GB']; $this->languageService->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $argumentMetadata = $this->createMock(ArgumentMetadata::class); diff --git a/tests/bundle/ValueResolver/URLWildcardValueResolverTest.php b/tests/bundle/ValueResolver/URLWildcardValueResolverTest.php index 72555b1356..e2b961707a 100644 --- a/tests/bundle/ValueResolver/URLWildcardValueResolverTest.php +++ b/tests/bundle/ValueResolver/URLWildcardValueResolverTest.php @@ -11,6 +11,7 @@ use Ibexa\Bundle\AdminUi\ValueResolver\URLWildcardValueResolver; use Ibexa\Contracts\Core\Repository\URLWildcardService; use Ibexa\Contracts\Core\Repository\Values\Content\URLWildcard; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -39,7 +40,7 @@ public function testResolve(): void 'urlWildcardId' => '123', ]); - $mockURLWildcard = $this->createMock(URLWildcard::class); + $mockURLWildcard = self::createStub(URLWildcard::class); $this->urlWildcardServiceMock ->expects(self::once()) @@ -53,10 +54,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -74,7 +74,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing urlWildcardId' => [ diff --git a/tests/bundle/ValueResolver/VersionInfoValueResolverTest.php b/tests/bundle/ValueResolver/VersionInfoValueResolverTest.php index 27de65aba5..893942725c 100644 --- a/tests/bundle/ValueResolver/VersionInfoValueResolverTest.php +++ b/tests/bundle/ValueResolver/VersionInfoValueResolverTest.php @@ -12,6 +12,7 @@ use Ibexa\Contracts\Core\Repository\ContentService; use Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; @@ -41,8 +42,8 @@ public function testResolve(): void 'contentId' => '123', ]); - $mockContentInfo = $this->createMock(ContentInfo::class); - $mockVersionInfo = $this->createMock(VersionInfo::class); + $mockContentInfo = self::createStub(ContentInfo::class); + $mockVersionInfo = self::createStub(VersionInfo::class); $this->contentServiceMock ->expects(self::once()) @@ -62,10 +63,9 @@ public function testResolve(): void } /** - * @dataProvider invalidAttributesProvider - * * @param array $attributes */ + #[DataProvider('invalidAttributesProvider')] public function testResolveInvalidAttributes(array $attributes, string $expectedMessage): void { $mockArgumentMetadata = $this->createMock(ArgumentMetadata::class); @@ -83,7 +83,7 @@ public function testResolveInvalidAttributes(array $attributes, string $expected /** * @phpstan-return array, expectedMessage: string}> */ - public function invalidAttributesProvider(): array + public static function invalidAttributesProvider(): array { return [ 'missing versionNo' => [ diff --git a/tests/integration/SetupValidationTest.php b/tests/integration/SetupValidationTest.php index 0cf30d967c..83fb65b9b7 100644 --- a/tests/integration/SetupValidationTest.php +++ b/tests/integration/SetupValidationTest.php @@ -9,12 +9,11 @@ namespace Ibexa\Tests\Integration\AdminUi; use Ibexa\Contracts\Core\Test\IbexaKernelTestCase; +use PHPUnit\Framework\Attributes\CoversNothing; +use PHPUnit\Framework\Attributes\Group; -/** - * @group integration - * - * @coversNothing - */ +#[Group('integration')] +#[CoversNothing] final class SetupValidationTest extends IbexaKernelTestCase { public function testCompilesSuccessfully(): void diff --git a/tests/integration/Util/ContentTypeFieldsExtractorTest.php b/tests/integration/Util/ContentTypeFieldsExtractorTest.php index b1e1278b0f..a611bc23c9 100644 --- a/tests/integration/Util/ContentTypeFieldsExtractorTest.php +++ b/tests/integration/Util/ContentTypeFieldsExtractorTest.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\Values\ContentType\FieldDefinition; use Ibexa\Contracts\Core\Test\IbexaKernelTestCase; +use PHPUnit\Framework\Attributes\DataProvider; final class ContentTypeFieldsExtractorTest extends IbexaKernelTestCase { @@ -81,9 +82,7 @@ public function testExtractWithContentTypeAndGroupNamesFailsWithTypesOutsideGrou $this->contentTypeFieldsExtractor->extractFieldsFromExpression($expression); } - /** - * @dataProvider dataProviderForTestFieldIdWithinExpression - */ + #[DataProvider('dataProviderForTestFieldIdWithinExpression')] public function testFieldIdWithinExpression(string $expression): void { $contentType = $this->contentTypeService->loadContentTypeByIdentifier('folder'); @@ -97,9 +96,7 @@ public function testFieldIdWithinExpression(string $expression): void self::assertTrue($result); } - /** - * @dataProvider dataProviderForTestFieldIdNotWithinExpression - */ + #[DataProvider('dataProviderForTestFieldIdNotWithinExpression')] public function testFieldIdNotWithinExpression(string $expression): void { $contentType = $this->contentTypeService->loadContentTypeByIdentifier('folder'); @@ -116,7 +113,7 @@ public function testFieldIdNotWithinExpression(string $expression): void /** * @return iterable */ - public function dataProviderForTestFieldIdWithinExpression(): iterable + public static function dataProviderForTestFieldIdWithinExpression(): iterable { yield '{Media,Content}/*/name' => ['{Media,Content}/*/name']; @@ -130,7 +127,7 @@ public function dataProviderForTestFieldIdWithinExpression(): iterable /** * @return iterable */ - public function dataProviderForTestFieldIdNotWithinExpression(): iterable + public static function dataProviderForTestFieldIdNotWithinExpression(): iterable { yield '{Users}/*/name' => ['{Users}/*/name']; diff --git a/tests/lib/Config/AdminUiForms/ContentTypeFieldTypesResolverTest.php b/tests/lib/Config/AdminUiForms/ContentTypeFieldTypesResolverTest.php index 7ffc865ccb..c0c4115982 100644 --- a/tests/lib/Config/AdminUiForms/ContentTypeFieldTypesResolverTest.php +++ b/tests/lib/Config/AdminUiForms/ContentTypeFieldTypesResolverTest.php @@ -11,12 +11,12 @@ use Ibexa\AdminUi\Config\AdminUiForms\ContentTypeFieldTypesResolver; use Ibexa\AdminUi\Config\AdminUiForms\ContentTypeFieldTypesResolverInterface; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; -/** - * @covers \Ibexa\AdminUi\Config\AdminUiForms\ContentTypeFieldTypesResolver - */ +#[CoversClass(ContentTypeFieldTypesResolver::class)] final class ContentTypeFieldTypesResolverTest extends TestCase { private const string PARAM_NAME = 'admin_ui_forms.content_type_edit.field_types'; @@ -32,13 +32,12 @@ protected function setUp(): void } /** - * @dataProvider provideDataForTestGetFieldTypes - * * @param array $expectedFieldTypes */ + #[DataProvider('provideDataForTestGetFieldTypes')] public function testGetFieldTypes(bool $hasParameter, array $expectedFieldTypes): void { $this->mockConfigResolverHasParameter($hasParameter); @@ -51,8 +50,6 @@ public function testGetFieldTypes(bool $hasParameter, array $expectedFieldTypes) } /** - * @dataProvider provideDataForTestGetMetaFieldTypes - * * @param array $expectedMetaFieldTypes * $expectedMetaFieldTypes */ + #[DataProvider('provideDataForTestGetMetaFieldTypes')] public function testGetMetaFieldTypes( bool $hasParameter, array $fieldTypes, @@ -78,14 +76,13 @@ public function testGetMetaFieldTypes( } /** - * @dataProvider provideDataForTestGetMetaFieldTypeIdentifiers - * * @param array $metaFieldTypes * @param array $expectedIdentifiers */ + #[DataProvider('provideDataForTestGetMetaFieldTypeIdentifiers')] public function testGetMetaFieldTypeIdentifiers( bool $hasParameter, array $metaFieldTypes, @@ -109,7 +106,7 @@ public function testGetMetaFieldTypeIdentifiers( * }> * }> */ - public function provideDataForTestGetFieldTypes(): iterable + public static function provideDataForTestGetFieldTypes(): iterable { yield [ false, @@ -145,7 +142,7 @@ public function provideDataForTestGetFieldTypes(): iterable * }> * }> */ - public function provideDataForTestGetMetaFieldTypes(): iterable + public static function provideDataForTestGetMetaFieldTypes(): iterable { yield [ false, @@ -189,7 +186,7 @@ public function provideDataForTestGetMetaFieldTypes(): iterable * array * }> */ - public function provideDataForTestGetMetaFieldTypeIdentifiers(): iterable + public static function provideDataForTestGetMetaFieldTypeIdentifiers(): iterable { yield [ false, diff --git a/tests/lib/Event/FormActionEventTest.php b/tests/lib/Event/FormActionEventTest.php index 4cbc0ba3d6..44dd46a7ef 100644 --- a/tests/lib/Event/FormActionEventTest.php +++ b/tests/lib/Event/FormActionEventTest.php @@ -17,7 +17,7 @@ class FormActionEventTest extends TestCase { public function testConstruct(): void { - $form = $this->createMock(FormInterface::class); + $form = self::createStub(FormInterface::class); $data = new stdClass(); $clickedButton = 'fooButton'; $options = ['languageCode' => 'eng-GB', 'foo' => 'bar']; @@ -32,7 +32,7 @@ public function testConstruct(): void public function testEventDoesntHaveResponse(): void { $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new stdClass(), 'fooButton' ); @@ -43,7 +43,7 @@ public function testEventDoesntHaveResponse(): void public function testEventSetResponse(): void { $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new stdClass(), 'fooButton' ); @@ -62,7 +62,7 @@ public function testGetOption(): void $options = ['languageCode' => 'eng-GB', 'foo' => 'bar', 'obj' => $objectOption]; $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new stdClass(), 'fooButton', $options diff --git a/tests/lib/EventListener/ContentDownloadRouteReferenceListenerTest.php b/tests/lib/EventListener/ContentDownloadRouteReferenceListenerTest.php index 8466ed744b..30aa5bf251 100644 --- a/tests/lib/EventListener/ContentDownloadRouteReferenceListenerTest.php +++ b/tests/lib/EventListener/ContentDownloadRouteReferenceListenerTest.php @@ -39,7 +39,7 @@ public function testOnRouteReferenceGenerationSkipNonSupportedRoutes(): void $event = new RouteReferenceGenerationEvent( clone $expectedRouteReference, - $this->createMock(Request::class) + self::createStub(Request::class) ); $listener = new ContentDownloadRouteReferenceListener(self::EXAMPLE_SITEACCESS_GROUPS); diff --git a/tests/lib/EventListener/ContentProxyCreateDraftListenerTest.php b/tests/lib/EventListener/ContentProxyCreateDraftListenerTest.php index 60c4bcea0c..031d4873d4 100644 --- a/tests/lib/EventListener/ContentProxyCreateDraftListenerTest.php +++ b/tests/lib/EventListener/ContentProxyCreateDraftListenerTest.php @@ -37,7 +37,7 @@ public function testCreateContentAutosaveEnabled(): void $contentService = $this->createMock(ContentService::class); $contentService ->method('createContent') - ->willReturn($this->createMock(Content::class)); + ->willReturn(self::createStub(Content::class)); $router = $this->createMock(RouterInterface::class); $router @@ -50,7 +50,7 @@ public function testCreateContentAutosaveEnabled(): void ->willReturn('redirect_test_url'); $createEvent = new ContentProxyCreateEvent( - $this->createMock(ContentType::class), + self::createStub(ContentType::class), 'eng-EN', 1234 ); @@ -59,7 +59,7 @@ public function testCreateContentAutosaveEnabled(): void $eventDispatcher->addSubscriber( new ContentProxyCreateDraftListener( $contentService, - $this->createMock(LocationService::class), + self::createStub(LocationService::class), $autosaveService, $router ) @@ -79,18 +79,18 @@ public function testCreateContentOnTheFlyAutosaveEnabled(): void $autosaveService = $this->createMock(AutosaveServiceInterface::class); $autosaveService->method('isEnabled')->willReturn(true); - $contentInfo = $this->createMock(ContentInfo::class); + $contentInfo = self::createStub(ContentInfo::class); $content = $this->createMock(Content::class); $content ->method('__get') - ->will(self::returnCallback(static function ($argument) use ($contentInfo): ?ContentInfo { + ->willReturnCallback(static function ($argument) use ($contentInfo): ?ContentInfo { if ($argument === 'contentInfo') { return $contentInfo; } return null; - })); + }); $contentService = $this->createMock(ContentService::class); $contentService @@ -109,7 +109,7 @@ public function testCreateContentOnTheFlyAutosaveEnabled(): void ->willReturn('redirect_on_the_fly_test_url'); $createEvent = new ContentProxyCreateEvent( - $this->createMock(ContentType::class), + self::createStub(ContentType::class), 'eng-EN', 1234, new Options([ @@ -121,7 +121,7 @@ public function testCreateContentOnTheFlyAutosaveEnabled(): void $eventDispatcher->addSubscriber( new ContentProxyCreateDraftListener( $contentService, - $this->createMock(LocationService::class), + self::createStub(LocationService::class), $autosaveService, $router ) @@ -145,7 +145,7 @@ public function testTranslateContentAutosaveEnabled(): void $this->getFieldDefinition('field_a', true), ]); - $contentInfo = $this->createMock(ContentInfo::class); + $contentInfo = self::createStub(ContentInfo::class); $content = $this->createMock(Content::class); $content @@ -174,7 +174,7 @@ public function testTranslateContentAutosaveEnabled(): void $contentService ->method('createContentDraft') ->with($contentInfo) - ->willReturn($this->createMock(Content::class)); + ->willReturn(self::createStub(Content::class)); $router = $this->createMock(RouterInterface::class); $router @@ -197,7 +197,7 @@ public function testTranslateContentAutosaveEnabled(): void $eventDispatcher->addSubscriber( new ContentProxyCreateDraftListener( $contentService, - $this->createMock(LocationService::class), + self::createStub(LocationService::class), $autosaveService, $router ) @@ -243,9 +243,9 @@ public function testAutosaveDisabled(): void $eventDispatcher->addSubscriber( new ContentProxyCreateDraftListener( $contentService, - $this->createMock(LocationService::class), + self::createStub(LocationService::class), $autosaveService, - $this->createMock(RouterInterface::class) + self::createStub(RouterInterface::class) ) ); @@ -270,7 +270,7 @@ private function getFieldDefinition( ): FieldDefinition { return new FieldDefinition([ 'identifier' => $identifier, - 'defaultValue' => $this->createMock(Value::class), + 'defaultValue' => self::createStub(Value::class), 'isTranslatable' => $isTranslatable, ]); } diff --git a/tests/lib/EventListener/InContextTranslationListenerTest.php b/tests/lib/EventListener/InContextTranslationListenerTest.php index a33b8a3403..aa8a22d62f 100644 --- a/tests/lib/EventListener/InContextTranslationListenerTest.php +++ b/tests/lib/EventListener/InContextTranslationListenerTest.php @@ -16,7 +16,9 @@ use Ibexa\User\UserSetting\UserSetting; use Ibexa\User\UserSetting\UserSettingService; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\HttpKernelInterface; @@ -32,7 +34,7 @@ final class InContextTranslationListenerTest extends TestCase private Request&MockObject $request; - private HttpKernelInterface&MockObject $httpKernel; + private HttpKernelInterface&Stub $httpKernel; private UserSettingService&MockObject $userSettingService; @@ -44,12 +46,12 @@ protected function setUp(): void $this->request = $this ->getMockBuilder(Request::class) - ->setMethods(['setLocale']) ->getMock(); + $this->request->attributes = new ParameterBag(); $this->request->attributes->set('siteaccess', new SiteAccess(self::ADMIN_SITEACCESS)); - $this->httpKernel = $this->createMock(HttpKernelInterface::class); + $this->httpKernel = self::createStub(HttpKernelInterface::class); $this->userSettingService = $this->createMock(UserSettingService::class); @@ -203,8 +205,8 @@ private function requestWithSetLocaleExpectsNever(): MockObject { $request = $this ->getMockBuilder(Request::class) - ->setMethods(['setLocale']) ->getMock(); + $request->attributes = new ParameterBag(); $request ->expects(self::never()) ->method('setLocale'); diff --git a/tests/lib/EventListener/RequestListenerTest.php b/tests/lib/EventListener/RequestListenerTest.php index aad378407f..70e1e68ecd 100644 --- a/tests/lib/EventListener/RequestListenerTest.php +++ b/tests/lib/EventListener/RequestListenerTest.php @@ -10,7 +10,9 @@ use Ibexa\AdminUi\EventListener\RequestListener; use Ibexa\Core\MVC\Symfony\SiteAccess; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; @@ -21,7 +23,7 @@ class RequestListenerTest extends TestCase { private Request&MockObject $request; - private HttpKernelInterface&MockObject $httpKernel; + private HttpKernelInterface&Stub $httpKernel; private RequestListener $requestListener; @@ -35,10 +37,10 @@ protected function setUp(): void $this->request = $this ->getMockBuilder(Request::class) - ->setMethods(['getSession', 'hasSession']) ->getMock(); + $this->request->attributes = new ParameterBag(); - $this->httpKernel = $this->createMock(HttpKernelInterface::class); + $this->httpKernel = self::createStub(HttpKernelInterface::class); $this->event = new RequestEvent( $this->httpKernel, diff --git a/tests/lib/EventListener/RequestLocaleListenerTest.php b/tests/lib/EventListener/RequestLocaleListenerTest.php index 102a3aed87..2c04698790 100644 --- a/tests/lib/EventListener/RequestLocaleListenerTest.php +++ b/tests/lib/EventListener/RequestLocaleListenerTest.php @@ -15,7 +15,9 @@ use Ibexa\Core\MVC\Symfony\Security\Authorization\Attribute; use Ibexa\Core\MVC\Symfony\SiteAccess; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Event\RequestEvent; use Symfony\Component\HttpKernel\HttpKernelInterface; @@ -31,7 +33,7 @@ final class RequestLocaleListenerTest extends TestCase private Request&MockObject $request; - private HttpKernelInterface&MockObject $httpKernel; + private HttpKernelInterface&Stub $httpKernel; private TranslatorInterface&MockObject $translator; @@ -47,12 +49,12 @@ protected function setUp(): void $this->request = $this ->getMockBuilder(Request::class) - ->setMethods(['getSession', 'hasSession', 'setLocale']) ->getMock(); + $this->request->attributes = new ParameterBag(); $this->request->attributes->set('siteaccess', new SiteAccess(self::ADMIN_SITEACCESS)); - $this->httpKernel = $this->createMock(HttpKernelInterface::class); + $this->httpKernel = self::createStub(HttpKernelInterface::class); $this->userLanguagePreferenceProvider = $this ->getMockBuilder(UserLanguagePreferenceProviderInterface::class) @@ -275,8 +277,8 @@ private function requestWithSetLocaleExpectsNever(): MockObject { $request = $this ->getMockBuilder(Request::class) - ->setMethods(['getSession', 'hasSession', 'setLocale']) ->getMock(); + $request->attributes = new ParameterBag(); $request ->expects(self::never()) ->method('setLocale'); diff --git a/tests/lib/EventListener/SetViewParametersListenerTest.php b/tests/lib/EventListener/SetViewParametersListenerTest.php index d12866f5ea..6e040cb485 100644 --- a/tests/lib/EventListener/SetViewParametersListenerTest.php +++ b/tests/lib/EventListener/SetViewParametersListenerTest.php @@ -62,20 +62,26 @@ public function setUp(): void $this->repository = $this->createMock(Repository::class); $configResolver = $this->createMock(ConfigResolverInterface::class); - $configResolver - ->method('getParameter') - ->withConsecutive( - ['admin_ui_forms.content_edit.fieldtypes'], - ['admin_ui_forms.content_edit.meta_field_groups_list'] - ) - ->willReturnOnConsecutiveCalls( - [ + $matcher = self::any(); + $configResolver->expects($matcher) + ->method('getParameter')->willReturnCallback(function (...$parameters) use ($matcher): array { + if ($matcher->numberOfInvocations() === 1) { + $this->assertSame('admin_ui_forms.content_edit.fieldtypes', $parameters[0]); + + return [ 'ibexa_taxonomy_entry_assignment' => [ 'meta' => true, ], - ], - ['metadata'] - ); + ]; + } + if ($matcher->numberOfInvocations() === 2) { + $this->assertSame('admin_ui_forms.content_edit.meta_field_groups_list', $parameters[0]); + + return ['metadata']; + } + + return []; + }); $this->groupedContentFormFieldsProvider = $this->createMock(GroupedContentFormFieldsProviderInterface::class); @@ -169,7 +175,7 @@ public function testSetViewTemplateParametersWithMainLocationId(): void public function testSetViewTemplateParametersWithoutContentEditViewInstance(): void { - $contentView = $this->createMock(View::class); + $contentView = self::createStub(View::class); $this->locationService->expects(self::never()) ->method('loadParentLocationsForDraftContent'); @@ -181,7 +187,7 @@ public function testSetViewTemplateParametersWithoutContentEditViewInstance(): v public function testSetUserUpdateViewTemplateParametersWithoutUserUpdateViewInstance(): void { - $view = $this->createMock(View::class); + $view = self::createStub(View::class); $this->locationService->expects(self::never()) ->method('loadParentLocationsForDraftContent'); diff --git a/tests/lib/EventListener/SystemVersionPreviewUrlSubscriberTest.php b/tests/lib/EventListener/SystemVersionPreviewUrlSubscriberTest.php index 0fa1063005..53d36e7703 100644 --- a/tests/lib/EventListener/SystemVersionPreviewUrlSubscriberTest.php +++ b/tests/lib/EventListener/SystemVersionPreviewUrlSubscriberTest.php @@ -15,12 +15,11 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Location; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo; use Ibexa\Core\MVC\Symfony\SiteAccess; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; use Symfony\Component\Routing\Generator\UrlGeneratorInterface; -/** - * @covers \Ibexa\AdminUi\EventListener\SystemVersionPreviewUrlSubscriber - */ +#[CoversClass(SystemVersionPreviewUrlSubscriber::class)] final class SystemVersionPreviewUrlSubscriberTest extends TestCase { private const EXAMPLE_PREVIEW_URL = '/example'; @@ -41,13 +40,13 @@ public function testGetSubscribedEvents(): void public function testOnSystemVersionPreviewIsSkippedIfUrlHasBeenResolved(): void { - $urlGenerator = $this->createMock(UrlGeneratorInterface::class); + $urlGenerator = self::createStub(UrlGeneratorInterface::class); $event = new ResolveVersionPreviewUrlEvent( - $this->createMock(VersionInfo::class), - $this->createMock(Language::class), - $this->createMock(Location::class), - $this->createMock(SiteAccess::class) + self::createStub(VersionInfo::class), + self::createStub(Language::class), + self::createStub(Location::class), + self::createStub(SiteAccess::class) ); $event->setPreviewUrl(self::EXAMPLE_PREVIEW_URL); @@ -69,13 +68,13 @@ public function testOnSystemVersionPreview(): void $language = $this->createMock(Language::class); $language->method('getLanguageCode')->willReturn(self::EXAMPLE_LANGUAGE_CODE); - $siteAccess = $this->createMock(SiteAccess::class); + $siteAccess = self::createStub(SiteAccess::class); $siteAccess->name = self::EXAMPLE_SITE_ACCESS; $event = new ResolveVersionPreviewUrlEvent( $versionInfo, $language, - $this->createMock(Location::class), + self::createStub(Location::class), $siteAccess ); diff --git a/tests/lib/FieldType/FieldTypeFormMapperDispatcherTest.php b/tests/lib/FieldType/FieldTypeFormMapperDispatcherTest.php index 3377b0c01e..7e383deded 100644 --- a/tests/lib/FieldType/FieldTypeFormMapperDispatcherTest.php +++ b/tests/lib/FieldType/FieldTypeFormMapperDispatcherTest.php @@ -49,7 +49,7 @@ public function testMapFieldDefinition(): void ]), ]); - $formMock = $this->createMock(FormInterface::class); + $formMock = self::createStub(FormInterface::class); $this->fieldTypeAliasResolver ->method('resolveIdentifier') diff --git a/tests/lib/Form/Data/AbstractFormDataValidationTestCase.php b/tests/lib/Form/Data/AbstractFormDataValidationTestCase.php index 5351cd32f8..d284a53a39 100644 --- a/tests/lib/Form/Data/AbstractFormDataValidationTestCase.php +++ b/tests/lib/Form/Data/AbstractFormDataValidationTestCase.php @@ -8,6 +8,7 @@ namespace Ibexa\Tests\AdminUi\Form\Data; +use PHPUnit\Framework\Attributes\DataProvider; use Symfony\Component\Form\Extension\Validator\ValidatorExtension; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormInterface; @@ -28,12 +29,11 @@ abstract public static function getDataForTestFormSubmitValidation(): iterable; abstract protected function getForm(): FormInterface; /** - * @dataProvider getDataForTestFormSubmitValidation - * * @param array $formData * * @phpstan-param \Ibexa\Tests\AdminUi\Form\Data\FormErrorDataTestWrapper[] $expectedFormErrors */ + #[DataProvider('getDataForTestFormSubmitValidation')] final public function testFormSubmitValidation(array $formData, array $expectedFormErrors): void { $form = $this->getForm(); diff --git a/tests/lib/Form/Data/FormMapper/ContentTranslationMapperTest.php b/tests/lib/Form/Data/FormMapper/ContentTranslationMapperTest.php index 7957d47768..46afca515e 100644 --- a/tests/lib/Form/Data/FormMapper/ContentTranslationMapperTest.php +++ b/tests/lib/Form/Data/FormMapper/ContentTranslationMapperTest.php @@ -21,6 +21,7 @@ use Ibexa\Core\Repository\Values\ContentType\ContentType; use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; use Ibexa\Core\Repository\Values\ContentType\FieldDefinitionCollection; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; use Symfony\Component\OptionsResolver\Exception\MissingOptionsException; @@ -38,9 +39,8 @@ protected function setUp(): void /** * @param array $params - * - * @dataProvider paramsProvider */ + #[DataProvider('paramsProvider')] public function testMapToFormData(Content $content, array $params, ContentTranslationData $expectedData): void { $actualData = $this->mapper->mapToFormData($content, $params); @@ -59,27 +59,27 @@ public function testMapToFormData(Content $content, array $params, ContentTransl * \Ibexa\AdminUi\Form\Data\ContentTranslationData * }> */ - public function paramsProvider(): array + public static function paramsProvider(): array { $language = new Language(['languageCode' => self::LANGUAGE_CODE]); - $field1 = $this->getField(); - $field2 = $this->getField('identifier2'); - $field3 = $this->getField('identifier3'); + $field1 = self::getField(); + $field2 = self::getField('identifier2'); + $field3 = self::getField('identifier3'); - $content_with_1_field = $this->getCompleteContent([$field1]); - $content_with_3_fields = $this->getCompleteContent([$field1, $field2, $field3]); + $content_with_1_field = self::getCompleteContent([$field1]); + $content_with_3_fields = self::getCompleteContent([$field1, $field2, $field3]); - $contentTypeTranslatable = $this->getContentType([ - $this->getFieldDefinition($field1->fieldDefIdentifier, true), + $contentTypeTranslatable = self::getContentType([ + self::getFieldDefinition($field1->fieldDefIdentifier, true), ]); - $contentType = $this->getContentType([ - $this->getFieldDefinition(), + $contentType = self::getContentType([ + self::getFieldDefinition(), ]); - $contentTypeThreeFields = $this->getContentType([ - $this->getFieldDefinition($field1->fieldDefIdentifier), - $this->getFieldDefinition($field2->fieldDefIdentifier), - $this->getFieldDefinition($field3->fieldDefIdentifier), + $contentTypeThreeFields = self::getContentType([ + self::getFieldDefinition($field1->fieldDefIdentifier), + self::getFieldDefinition($field2->fieldDefIdentifier), + self::getFieldDefinition($field3->fieldDefIdentifier), ]); return [ @@ -96,8 +96,8 @@ public function paramsProvider(): array 'fieldsData' => [ $field1->fieldDefIdentifier => new FieldData([ 'field' => $field1, - 'fieldDefinition' => $this->getFieldDefinition($field1->fieldDefIdentifier, true), - 'value' => $this->createMock(Value::class), + 'fieldDefinition' => self::getFieldDefinition($field1->fieldDefIdentifier, true), + 'value' => self::createStub(Value::class), ]), ], 'contentType' => $contentTypeTranslatable, @@ -116,8 +116,8 @@ public function paramsProvider(): array 'fieldsData' => [ $field1->fieldDefIdentifier => new FieldData([ 'field' => $field1, - 'fieldDefinition' => $this->getFieldDefinition(), - 'value' => $this->createMock(Value::class), + 'fieldDefinition' => self::getFieldDefinition(), + 'value' => self::createStub(Value::class), ]), ], 'contentType' => $contentType, @@ -136,18 +136,18 @@ public function paramsProvider(): array 'fieldsData' => [ $field1->fieldDefIdentifier => new FieldData([ 'field' => $field1, - 'fieldDefinition' => $this->getFieldDefinition($field1->fieldDefIdentifier), - 'value' => $this->createMock(Value::class), + 'fieldDefinition' => self::getFieldDefinition($field1->fieldDefIdentifier), + 'value' => self::createStub(Value::class), ]), $field2->fieldDefIdentifier => new FieldData([ 'field' => $field2, - 'fieldDefinition' => $this->getFieldDefinition($field2->fieldDefIdentifier), - 'value' => $this->createMock(Value::class), + 'fieldDefinition' => self::getFieldDefinition($field2->fieldDefIdentifier), + 'value' => self::createStub(Value::class), ]), $field3->fieldDefIdentifier => new FieldData([ 'field' => $field3, - 'fieldDefinition' => $this->getFieldDefinition($field3->fieldDefIdentifier), - 'value' => $this->createMock(Value::class), + 'fieldDefinition' => self::getFieldDefinition($field3->fieldDefIdentifier), + 'value' => self::createStub(Value::class), ]), ], 'contentType' => $contentTypeThreeFields, @@ -159,9 +159,8 @@ public function paramsProvider(): array /** * @param array $params * @param array $exception - * - * @dataProvider wrongParamsProvider */ + #[DataProvider('wrongParamsProvider')] public function testMapToFormDataWithoutRequiredParameter(Content $content, array $params, array $exception): void { $this->expectException($exception['class']); @@ -177,11 +176,11 @@ public function testMapToFormDataWithoutRequiredParameter(Content $content, arra * array{class: class-string<\Throwable>, message: string} * }> */ - public function wrongParamsProvider(): array + public static function wrongParamsProvider(): array { return [ 'missing_language' => [ - $this->getCompleteContent(), + self::getCompleteContent(), [ 'contentType' => 'contentType', 'baseLanguage' => 'baseLanguage', @@ -192,7 +191,7 @@ public function wrongParamsProvider(): array ], ], 'missing_content_type' => [ - $this->getCompleteContent(), + self::getCompleteContent(), [ 'language' => 'language', 'baseLanguage' => null, @@ -203,7 +202,7 @@ public function wrongParamsProvider(): array ], ], 'wrong_type_of_language' => [ - $this->getCompleteContent(), + self::getCompleteContent(), [ 'language' => 'language', 'contentType' => new ContentType(), @@ -215,7 +214,7 @@ public function wrongParamsProvider(): array ], ], 'wrong_type_of_content_type' => [ - $this->getCompleteContent(), + self::getCompleteContent(), [ 'language' => new Language(), 'contentType' => 'content_type', @@ -227,7 +226,7 @@ public function wrongParamsProvider(): array ], ], 'wrong_type_of_base_language' => [ - $this->getCompleteContent(), + self::getCompleteContent(), [ 'language' => new Language(), 'contentType' => new ContentType(), @@ -244,7 +243,7 @@ public function wrongParamsProvider(): array /** * @param \Ibexa\Contracts\Core\Repository\Values\Content\Field[] $fields */ - private function getCompleteContent(array $fields = []): Content + private static function getCompleteContent(array $fields = []): Content { return new Content([ 'internalFields' => $fields, @@ -254,30 +253,30 @@ private function getCompleteContent(array $fields = []): Content ]); } - private function getField(string $fieldDefIdentifier = 'identifier', string $languageCode = self::LANGUAGE_CODE): Field + private static function getField(string $fieldDefIdentifier = 'identifier', string $languageCode = self::LANGUAGE_CODE): Field { return new Field([ 'fieldDefIdentifier' => $fieldDefIdentifier, 'languageCode' => $languageCode, - 'value' => $this->createMock(Value::class), + 'value' => self::createStub(Value::class), ]); } /** * @param array<\Ibexa\Core\Repository\Values\ContentType\FieldDefinition> $fieldDefs */ - private function getContentType(array $fieldDefs = []): ContentType + private static function getContentType(array $fieldDefs = []): ContentType { return new ContentType([ 'fieldDefinitions' => new FieldDefinitionCollection($fieldDefs), ]); } - private function getFieldDefinition(string $identifier = 'identifier', bool $isTranslatable = false): FieldDefinition + private static function getFieldDefinition(string $identifier = 'identifier', bool $isTranslatable = false): FieldDefinition { return new FieldDefinition([ 'identifier' => $identifier, - 'defaultValue' => $this->createMock(Value::class), + 'defaultValue' => self::createStub(Value::class), 'isTranslatable' => $isTranslatable, ]); } diff --git a/tests/lib/Form/Data/FormMapper/ContentTypeDraftMapperTest.php b/tests/lib/Form/Data/FormMapper/ContentTypeDraftMapperTest.php index 2aafa27a27..2955b075ec 100644 --- a/tests/lib/Form/Data/FormMapper/ContentTypeDraftMapperTest.php +++ b/tests/lib/Form/Data/FormMapper/ContentTypeDraftMapperTest.php @@ -25,14 +25,13 @@ use Ibexa\Core\Repository\Values\ContentType\ContentTypeDraft; use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; use Ibexa\Core\Repository\Values\ContentType\FieldDefinitionCollection; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Contracts\EventDispatcher\Event; -/** - * @covers \Ibexa\AdminUi\Form\Data\FormMapper\ContentTypeDraftMapper - */ +#[CoversClass(ContentTypeDraftMapper::class)] final class ContentTypeDraftMapperTest extends TestCase { private const string TAB_FIELD_DEF_IDENTIFIER = 'ibexa_string'; diff --git a/tests/lib/Form/Data/Role/RoleAssignmentCreateDataValidationTest.php b/tests/lib/Form/Data/Role/RoleAssignmentCreateDataValidationTest.php index e42d34a4ee..187d412704 100644 --- a/tests/lib/Form/Data/Role/RoleAssignmentCreateDataValidationTest.php +++ b/tests/lib/Form/Data/Role/RoleAssignmentCreateDataValidationTest.php @@ -21,12 +21,11 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Section; use Ibexa\Tests\AdminUi\Form\Data\AbstractFormDataValidationTestCase; use Ibexa\Tests\AdminUi\Form\Data\FormErrorDataTestWrapper; +use PHPUnit\Framework\Attributes\CoversClass; use Symfony\Component\Form\FormInterface; -/** - * @covers \Ibexa\AdminUi\Form\Data\Role\RoleAssignmentCreateData - * @covers \Ibexa\AdminUi\Form\Type\Role\RoleAssignmentCreateType - */ +#[CoversClass(RoleAssignmentCreateData::class)] +#[CoversClass(RoleAssignmentCreateType::class)] final class RoleAssignmentCreateDataValidationTest extends AbstractFormDataValidationTestCase { public static function getDataForTestFormSubmitValidation(): iterable @@ -117,11 +116,11 @@ protected function getTypes(): array ); $locationServiceMock = $this->createMock(LocationService::class); - $locationServiceMock->method('loadLocation')->willReturn($this->createMock(Location::class)); + $locationServiceMock->method('loadLocation')->willReturn(self::createStub(Location::class)); return [ - UserGroupCollectionType::class => new UserGroupCollectionType($this->createMock(UserService::class)), - UserCollectionType::class => new UserCollectionType($this->createMock(UserService::class)), + UserGroupCollectionType::class => new UserGroupCollectionType(self::createStub(UserService::class)), + UserCollectionType::class => new UserCollectionType(self::createStub(UserService::class)), SectionChoiceType::class => new SectionChoiceType($sectionServiceMock), LocationType::class => new LocationType($locationServiceMock), ]; diff --git a/tests/lib/Form/Data/Section/SectionCreateDataValidationTest.php b/tests/lib/Form/Data/Section/SectionCreateDataValidationTest.php index 17a19e43df..b6e470b2a5 100644 --- a/tests/lib/Form/Data/Section/SectionCreateDataValidationTest.php +++ b/tests/lib/Form/Data/Section/SectionCreateDataValidationTest.php @@ -11,12 +11,11 @@ use Ibexa\AdminUi\Form\Data\Section\SectionCreateData; use Ibexa\AdminUi\Form\Type\Section\SectionCreateType; use Ibexa\AdminUi\Form\Type\Section\SectionType; +use PHPUnit\Framework\Attributes\CoversClass; use Symfony\Component\Form\FormInterface; -/** - * @covers \Ibexa\AdminUi\Form\Type\Section\SectionCreateType - * @covers \Ibexa\AdminUi\Form\Data\Section\SectionCreateData - */ +#[CoversClass(SectionCreateType::class)] +#[CoversClass(SectionCreateData::class)] final class SectionCreateDataValidationTest extends AbstractSectionMutationDataValidationTestCase { /** diff --git a/tests/lib/Form/Data/Section/SectionUpdateDataValidationTest.php b/tests/lib/Form/Data/Section/SectionUpdateDataValidationTest.php index 2d803c09c6..d31092de54 100644 --- a/tests/lib/Form/Data/Section/SectionUpdateDataValidationTest.php +++ b/tests/lib/Form/Data/Section/SectionUpdateDataValidationTest.php @@ -11,12 +11,11 @@ use Ibexa\AdminUi\Form\Data\Section\SectionUpdateData; use Ibexa\AdminUi\Form\Type\Section\SectionType; use Ibexa\AdminUi\Form\Type\Section\SectionUpdateType; +use PHPUnit\Framework\Attributes\CoversClass; use Symfony\Component\Form\FormInterface; -/** - * @covers \Ibexa\AdminUi\Form\Type\Section\SectionUpdateType - * @covers \Ibexa\AdminUi\Form\Data\Section\SectionUpdateData - */ +#[CoversClass(SectionUpdateType::class)] +#[CoversClass(SectionUpdateData::class)] final class SectionUpdateDataValidationTest extends AbstractSectionMutationDataValidationTestCase { /** diff --git a/tests/lib/Form/DataMapper/ContentMainLocationUpdateMapperTest.php b/tests/lib/Form/DataMapper/ContentMainLocationUpdateMapperTest.php index 6e99a8370a..179c8092d1 100644 --- a/tests/lib/Form/DataMapper/ContentMainLocationUpdateMapperTest.php +++ b/tests/lib/Form/DataMapper/ContentMainLocationUpdateMapperTest.php @@ -14,11 +14,10 @@ use Ibexa\Contracts\Core\Repository\Values\Content\ContentMetadataUpdateStruct; use Ibexa\Contracts\Core\Repository\Values\Content\Location; use Ibexa\Contracts\Core\Repository\Values\ValueObject; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; -/** - * @covers \Ibexa\AdminUi\Form\DataMapper\ContentMainLocationUpdateMapper - */ +#[CoversClass(ContentMainLocationUpdateMapper::class)] final class ContentMainLocationUpdateMapperTest extends TestCase { /** @var \Ibexa\Contracts\Core\Repository\LocationService&\PHPUnit\Framework\MockObject\MockObject */ @@ -40,7 +39,7 @@ protected function setUp(): void public function testMapWithMainLocationId(): void { $mainLocationId = 42; - $location = $this->createMock(Location::class); + $location = self::createStub(Location::class); $struct = new ContentMetadataUpdateStruct(['mainLocationId' => $mainLocationId]); @@ -81,6 +80,6 @@ public function testMapWithNullMainLocationId(): void public function testMapThrowsOnInvalidValueObject(): void { $this->expectException(InvalidArgumentException::class); - $this->mapper->map($this->createMock(ValueObject::class)); + $this->mapper->map(self::createStub(ValueObject::class)); } } diff --git a/tests/lib/Form/DataMapper/LanguageCreateMapperTest.php b/tests/lib/Form/DataMapper/LanguageCreateMapperTest.php index bd28c00f19..b38aed52a3 100644 --- a/tests/lib/Form/DataMapper/LanguageCreateMapperTest.php +++ b/tests/lib/Form/DataMapper/LanguageCreateMapperTest.php @@ -14,6 +14,7 @@ use Ibexa\AdminUi\Form\DataMapper\LanguageCreateMapper; use Ibexa\Contracts\Core\Repository\Values\Content\LanguageCreateStruct; use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class LanguageCreateMapperTest extends TestCase @@ -31,10 +32,9 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -43,10 +43,9 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); @@ -73,7 +72,7 @@ public function testReverseMapWithWrongInstance(): void /** * @phpstan-return array */ - public function dataProvider(): array + public static function dataProvider(): array { return [ 'enabled_true' => [ diff --git a/tests/lib/Form/DataMapper/PolicyCreateMapperTest.php b/tests/lib/Form/DataMapper/PolicyCreateMapperTest.php index 6a0e04a883..b49c1bf9fa 100644 --- a/tests/lib/Form/DataMapper/PolicyCreateMapperTest.php +++ b/tests/lib/Form/DataMapper/PolicyCreateMapperTest.php @@ -14,6 +14,7 @@ use Ibexa\AdminUi\Form\DataMapper\PolicyCreateMapper; use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; use Ibexa\Core\Repository\Values\User\PolicyCreateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class PolicyCreateMapperTest extends TestCase @@ -31,10 +32,9 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -43,10 +43,9 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); @@ -73,7 +72,7 @@ public function testReverseMapWithWrongInstance(): void /** * @return array>> */ - public function dataProvider(): array + public static function dataProvider(): array { return [ 'simple' => [['module' => 'module', 'function' => 'function']], diff --git a/tests/lib/Form/DataMapper/PolicyUpdateMapperTest.php b/tests/lib/Form/DataMapper/PolicyUpdateMapperTest.php index fc49e1224e..0391428279 100644 --- a/tests/lib/Form/DataMapper/PolicyUpdateMapperTest.php +++ b/tests/lib/Form/DataMapper/PolicyUpdateMapperTest.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; use Ibexa\Contracts\Core\Repository\Values\User\Limitation\ContentTypeLimitation; use Ibexa\Core\Repository\Values\User\PolicyUpdateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class PolicyUpdateMapperTest extends TestCase @@ -33,10 +34,9 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -45,10 +45,9 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); @@ -67,7 +66,7 @@ public function testMapWithWrongInstance(): void /** * @return array>> */ - public function dataProvider(): array + public static function dataProvider(): array { return [ 'simple' => [['limitation' => new ContentTypeLimitation()]], diff --git a/tests/lib/Form/DataMapper/RoleCreateMapperTest.php b/tests/lib/Form/DataMapper/RoleCreateMapperTest.php index 0d3f590cd8..2a7e8f912e 100644 --- a/tests/lib/Form/DataMapper/RoleCreateMapperTest.php +++ b/tests/lib/Form/DataMapper/RoleCreateMapperTest.php @@ -14,6 +14,7 @@ use Ibexa\AdminUi\Form\DataMapper\RoleCreateMapper; use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; use Ibexa\Core\Repository\Values\User\RoleCreateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class RoleCreateMapperTest extends TestCase @@ -31,10 +32,9 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -43,10 +43,9 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); @@ -73,7 +72,7 @@ public function testReverseMapWithWrongInstance(): void /** * @return array}> */ - public function dataProvider(): array + public static function dataProvider(): array { return [ 'simple' => [['identifier' => 'hash']], diff --git a/tests/lib/Form/DataMapper/RoleUpdateMapperTest.php b/tests/lib/Form/DataMapper/RoleUpdateMapperTest.php index c7aa0b9c31..8279abad3f 100644 --- a/tests/lib/Form/DataMapper/RoleUpdateMapperTest.php +++ b/tests/lib/Form/DataMapper/RoleUpdateMapperTest.php @@ -14,6 +14,7 @@ use Ibexa\AdminUi\Form\DataMapper\RoleUpdateMapper; use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; use Ibexa\Contracts\Core\Repository\Values\User\RoleUpdateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class RoleUpdateMapperTest extends TestCase @@ -31,10 +32,9 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -43,10 +43,9 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); @@ -73,7 +72,7 @@ public function testReverseMapWithWrongInstance(): void /** * @return array>> */ - public function dataProvider(): array + public static function dataProvider(): array { return [ 'simple' => [['identifier' => 'hash']], diff --git a/tests/lib/Form/DataMapper/SelectionCreateMapperTest.php b/tests/lib/Form/DataMapper/SelectionCreateMapperTest.php index 45d93d8033..fffd61ded8 100644 --- a/tests/lib/Form/DataMapper/SelectionCreateMapperTest.php +++ b/tests/lib/Form/DataMapper/SelectionCreateMapperTest.php @@ -14,6 +14,7 @@ use Ibexa\AdminUi\Form\DataMapper\SectionCreateMapper; use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; use Ibexa\Contracts\Core\Repository\Values\Content\SectionCreateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class SelectionCreateMapperTest extends TestCase @@ -31,10 +32,9 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -43,10 +43,9 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @param array $properties */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); @@ -73,7 +72,7 @@ public function testReverseMapWithWrongInstance(): void /** * @return array>> */ - public function dataProvider(): array + public static function dataProvider(): array { return [ 'simple' => [['identifier' => 'hash', 'name' => 'Lorem']], diff --git a/tests/lib/Form/DataMapper/SelectionUpdateMapperTest.php b/tests/lib/Form/DataMapper/SelectionUpdateMapperTest.php index 1c247f21cf..4b4ae183e4 100644 --- a/tests/lib/Form/DataMapper/SelectionUpdateMapperTest.php +++ b/tests/lib/Form/DataMapper/SelectionUpdateMapperTest.php @@ -15,6 +15,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\LocationCreateStruct; use Ibexa\Contracts\Core\Repository\Values\Content\Section; use Ibexa\Contracts\Core\Repository\Values\Content\SectionUpdateStruct; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; /** @@ -35,12 +36,11 @@ protected function tearDown(): void } /** - * @dataProvider dataProvider - * * @phpstan-param TSectionProperties $properties * * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException */ + #[DataProvider('dataProvider')] public function testMap(array $properties): void { $data = $this->mapper->map($this->createStruct($properties)); @@ -49,12 +49,11 @@ public function testMap(array $properties): void } /** - * @dataProvider dataProvider - * * @phpstan-param TSectionProperties $properties * * @throws \Ibexa\Contracts\Core\Repository\Exceptions\InvalidArgumentException */ + #[DataProvider('dataProvider')] public function testReverseMap(array $properties): void { $struct = $this->mapper->reverseMap($this->createData($properties)); diff --git a/tests/lib/Form/DataTransformer/ContentInfoTransformerTest.php b/tests/lib/Form/DataTransformer/ContentInfoTransformerTest.php index 9ec4207690..6155dfc169 100644 --- a/tests/lib/Form/DataTransformer/ContentInfoTransformerTest.php +++ b/tests/lib/Form/DataTransformer/ContentInfoTransformerTest.php @@ -12,6 +12,7 @@ use Ibexa\Contracts\Core\Repository\ContentService; use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; use Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -29,7 +30,7 @@ protected function setUp(): void ->method('loadContentInfo') ->with(self::logicalAnd( self::equalTo(self::EXAMPLE_CONTENT_ID), - self::isType('int') + self::isInt() )) ->willReturn(new ContentInfo([ 'id' => self::EXAMPLE_CONTENT_ID, @@ -38,9 +39,7 @@ protected function setUp(): void $this->contentInfoTransformer = new ContentInfoTransformer($contentService); } - /** - * @dataProvider transformWithInvalidInputDataProvider - */ + #[DataProvider('transformWithInvalidInputDataProvider')] public function testTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); @@ -50,9 +49,7 @@ public function testTransformWithInvalidInput(mixed $value): void self::assertNull($result); } - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?ContentInfo $value, ?int $expected): void { $result = $this->contentInfoTransformer->transform($value); @@ -60,9 +57,7 @@ public function testTransform(?ContentInfo $value, ?int $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider reverseTransformDataProvider - */ + #[DataProvider('reverseTransformDataProvider')] public function testReverseTransform(mixed $value, ?ContentInfo $expected): void { $result = $this->contentInfoTransformer->reverseTransform($value); @@ -70,9 +65,7 @@ public function testReverseTransform(mixed $value, ?ContentInfo $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider reverseTransformWithInvalidInputDataProvider - */ + #[DataProvider('reverseTransformWithInvalidInputDataProvider')] public function testReverseTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); @@ -100,7 +93,7 @@ public function testReverseTransformWithNotFoundException(): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $contentInfo = new ContentInfo([ 'id' => self::EXAMPLE_CONTENT_ID, @@ -115,7 +108,7 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformDataProvider(): array + public static function reverseTransformDataProvider(): array { $contentInfo = new ContentInfo([ 'id' => self::EXAMPLE_CONTENT_ID, @@ -131,7 +124,7 @@ public function reverseTransformDataProvider(): array /** * @return array */ - public function transformWithInvalidInputDataProvider(): array + public static function transformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], @@ -146,7 +139,7 @@ public function transformWithInvalidInputDataProvider(): array /** * @return array */ - public function reverseTransformWithInvalidInputDataProvider(): array + public static function reverseTransformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/ContentTypeGroupTransformerTest.php b/tests/lib/Form/DataTransformer/ContentTypeGroupTransformerTest.php index 6ff7705d8c..80a715017c 100644 --- a/tests/lib/Form/DataTransformer/ContentTypeGroupTransformerTest.php +++ b/tests/lib/Form/DataTransformer/ContentTypeGroupTransformerTest.php @@ -13,6 +13,7 @@ use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentTypeGroup as APIContentTypeGroup; use Ibexa\Core\Repository\Values\ContentType\ContentTypeGroup; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use stdClass; @@ -32,9 +33,7 @@ protected function setUp(): void $this->transformer = new ContentTypeGroupTransformer($this->contentService); } - /** - * @dataProvider dataProviderForTransformWithValidInput - */ + #[DataProvider('dataProviderForTransformWithValidInput')] public function testTransformWithValidInput(?APIContentTypeGroup $value, ?int $expected): void { self::assertEquals($expected, $this->transformer->transform($value)); @@ -43,7 +42,7 @@ public function testTransformWithValidInput(?APIContentTypeGroup $value, ?int $e /** * @return array */ - public function dataProviderForTransformWithValidInput(): array + public static function dataProviderForTransformWithValidInput(): array { $contentTypeGroup = new ContentTypeGroup([ 'id' => self::EXAMPLE_CONTENT_TYPE_GROUP_ID, @@ -55,9 +54,7 @@ public function dataProviderForTransformWithValidInput(): array ]; } - /** - * @dataProvider dataProviderForTransformWithInvalidInput - */ + #[DataProvider('dataProviderForTransformWithInvalidInput')] public function testTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); @@ -69,7 +66,7 @@ public function testTransformWithInvalidInput(mixed $value): void /** * @return array */ - public function dataProviderForTransformWithInvalidInput(): array + public static function dataProviderForTransformWithInvalidInput(): array { return [ 'string' => ['string'], @@ -81,9 +78,7 @@ public function dataProviderForTransformWithInvalidInput(): array ]; } - /** - * @dataProvider dataProviderForReverseTransformWithValidInput - */ + #[DataProvider('dataProviderForReverseTransformWithValidInput')] public function testReverseTransformWithValidInput(mixed $value, ?APIContentTypeGroup $expected): void { if ($expected !== null) { @@ -102,7 +97,7 @@ public function testReverseTransformWithValidInput(mixed $value, ?APIContentType /** * @return array */ - public function dataProviderForReverseTransformWithValidInput(): array + public static function dataProviderForReverseTransformWithValidInput(): array { $contentTypeGroup = new ContentTypeGroup([ 'id' => self::EXAMPLE_CONTENT_TYPE_GROUP_ID, @@ -121,9 +116,7 @@ public function dataProviderForReverseTransformWithValidInput(): array ]; } - /** - * @dataProvider dataProviderForReverseTransformWithInvalidInput - */ + #[DataProvider('dataProviderForReverseTransformWithInvalidInput')] public function testReverseTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); @@ -135,7 +128,7 @@ public function testReverseTransformWithInvalidInput(mixed $value): void /** * @return array */ - public function dataProviderForReverseTransformWithInvalidInput(): array + public static function dataProviderForReverseTransformWithInvalidInput(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/DateIntervalToArrayTransformerTest.php b/tests/lib/Form/DataTransformer/DateIntervalToArrayTransformerTest.php index 9f891f268d..58ed3e6cb4 100644 --- a/tests/lib/Form/DataTransformer/DateIntervalToArrayTransformerTest.php +++ b/tests/lib/Form/DataTransformer/DateIntervalToArrayTransformerTest.php @@ -10,6 +10,7 @@ use DateInterval; use Ibexa\AdminUi\Form\DataTransformer\DateIntervalToArrayTransformer; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; /** @@ -21,7 +22,7 @@ final class DateIntervalToArrayTransformerTest extends TestCase /** * @phpstan-return list */ - public function transformProvider(): array + public static function transformProvider(): array { return [ [ @@ -43,10 +44,9 @@ public function transformProvider(): array } /** - * @dataProvider transformProvider - * * @phpstan-param TDataIntervalPair $valueAsArray */ + #[DataProvider('transformProvider')] public function testTransform(array $valueAsArray): void { $transformer = new DateIntervalToArrayTransformer(); @@ -55,10 +55,9 @@ public function testTransform(array $valueAsArray): void } /** - * @dataProvider transformProvider - * * @phpstan-param TDataIntervalPair $valueAsArray */ + #[DataProvider('transformProvider')] public function testReverseTransform(array $valueAsArray): void { $transformer = new DateIntervalToArrayTransformer(); @@ -84,7 +83,7 @@ public function testTransformNull(): void /** * @phpstan-return list */ - public function reverseTransformNullProvider(): array + public static function reverseTransformNullProvider(): array { return [ [null], @@ -95,10 +94,9 @@ public function reverseTransformNullProvider(): array } /** - * @dataProvider reverseTransformNullProvider - * * @phpstan-param array{mixed}|null $value */ + #[DataProvider('reverseTransformNullProvider')] public function testReverseTransformNull(?array $value): void { $transformer = new DateIntervalToArrayTransformer(); diff --git a/tests/lib/Form/DataTransformer/DateTimePickerTransformerTest.php b/tests/lib/Form/DataTransformer/DateTimePickerTransformerTest.php index b395387865..b9cc11c51e 100644 --- a/tests/lib/Form/DataTransformer/DateTimePickerTransformerTest.php +++ b/tests/lib/Form/DataTransformer/DateTimePickerTransformerTest.php @@ -11,13 +11,12 @@ use DateTime; use DateTimeImmutable; use Ibexa\AdminUi\Form\DataTransformer\DateTimePickerTransformer; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class DateTimePickerTransformerTest extends TestCase { - /** - * @dataProvider dataProviderForTestTransform - */ + #[DataProvider('dataProviderForTestTransform')] public function testTransform(): void { $transformer = new DateTimePickerTransformer(); @@ -28,16 +27,14 @@ public function testTransform(): void /** * @return iterable */ - public function dataProviderForTestTransform(): iterable + public static function dataProviderForTestTransform(): iterable { yield 'null' => [null, null]; yield 'DateTime' => [new DateTime('2021-01-01 00:00:00'), 1609459200]; yield 'DateTimeImmutable' => [new DateTimeImmutable('2021-01-01 00:00:00'), 1609459200]; } - /** - * @dataProvider dataProviderForTestReverseTransform - */ + #[DataProvider('dataProviderForTestReverseTransform')] public function testReverseTransform(): void { $transformer = new DateTimePickerTransformer(); @@ -48,7 +45,7 @@ public function testReverseTransform(): void /** * @return iterable */ - public function dataProviderForTestReverseTransform(): iterable + public static function dataProviderForTestReverseTransform(): iterable { yield 'null' => [null, null]; yield 'DateTime' => [1609459200, new DateTime('2021-01-01 00:00:00')]; diff --git a/tests/lib/Form/DataTransformer/FieldValueTransformerTest.php b/tests/lib/Form/DataTransformer/FieldValueTransformerTest.php index b5e6a6ba8d..e6c55da9f3 100644 --- a/tests/lib/Form/DataTransformer/FieldValueTransformerTest.php +++ b/tests/lib/Form/DataTransformer/FieldValueTransformerTest.php @@ -32,7 +32,7 @@ public function testTransformNull(): void public function testTransform(): void { - $value = $this->createMock(Value::class); + $value = self::createStub(Value::class); $valueHash = ['lorem' => 'Lorem ipsum dolor...']; $fieldType = $this->createMock(FieldType::class); @@ -49,7 +49,7 @@ public function testTransform(): void public function testReverseTransformNull(): void { - $emptyValue = $this->createMock(Value::class); + $emptyValue = self::createStub(Value::class); $fieldType = $this->createMock(FieldType::class); $fieldType @@ -68,7 +68,7 @@ public function testReverseTransformNull(): void public function testReverseTransform(): void { $value = 'Lorem ipsum dolor...'; - $expected = $this->createMock(Value::class); + $expected = self::createStub(Value::class); $fieldType = $this->createMock(FieldType::class); $fieldType diff --git a/tests/lib/Form/DataTransformer/LanguageTransformerTest.php b/tests/lib/Form/DataTransformer/LanguageTransformerTest.php index 965e63e63c..e61aa28e70 100644 --- a/tests/lib/Form/DataTransformer/LanguageTransformerTest.php +++ b/tests/lib/Form/DataTransformer/LanguageTransformerTest.php @@ -12,6 +12,7 @@ use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; use Ibexa\Contracts\Core\Repository\LanguageService; use Ibexa\Contracts\Core\Repository\Values\Content\Language; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -25,9 +26,7 @@ protected function setUp(): void $this->languageService = $this->createMock(LanguageService::class); } - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?Language $value, ?string $expected): void { $transformer = new LanguageTransformer($this->languageService); @@ -37,9 +36,7 @@ public function testTransform(?Language $value, ?string $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider transformWithInvalidInputDataProvider - */ + #[DataProvider('transformWithInvalidInputDataProvider')] public function testTransformWithInvalidInput(mixed $value): void { $transformer = new LanguageTransformer($this->languageService); @@ -99,7 +96,7 @@ public function testReverseTransformWithNotFoundException(): void * string|null, * }> */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $language = new Language(['languageCode' => 'eng-GB']); @@ -112,7 +109,7 @@ public function transformDataProvider(): array /** * @return array */ - public function transformWithInvalidInputDataProvider(): array + public static function transformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/LocationTransformerTest.php b/tests/lib/Form/DataTransformer/LocationTransformerTest.php index 72b9730a77..3faee18664 100644 --- a/tests/lib/Form/DataTransformer/LocationTransformerTest.php +++ b/tests/lib/Form/DataTransformer/LocationTransformerTest.php @@ -13,17 +13,16 @@ use Ibexa\Contracts\Core\Repository\LocationService; use Ibexa\Contracts\Core\Repository\Values\Content\Location as APILocation; use Ibexa\Core\Repository\Values\Content\Location; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class LocationTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?Location $value, ?int $expected): void { - $service = $this->createMock(LocationService::class); + $service = self::createStub(LocationService::class); $transformer = new LocationTransformer($service); $result = $transformer->transform($value); @@ -31,12 +30,10 @@ public function testTransform(?Location $value, ?int $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider transformWithInvalidInputDataProvider - */ + #[DataProvider('transformWithInvalidInputDataProvider')] public function testTransformWithInvalidInput(mixed $value): void { - $languageService = $this->createMock(LocationService::class); + $languageService = self::createStub(LocationService::class); $transformer = new LocationTransformer($languageService); $this->expectException(TransformationFailedException::class); @@ -91,7 +88,7 @@ public function testReverseTransformWithNotFoundException(): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $location = new Location(['id' => 123456]); @@ -104,7 +101,7 @@ public function transformDataProvider(): array /** * @return array */ - public function transformWithInvalidInputDataProvider(): array + public static function transformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/LocationsTransformerTest.php b/tests/lib/Form/DataTransformer/LocationsTransformerTest.php index 4581cd2fb2..26f7ab7211 100644 --- a/tests/lib/Form/DataTransformer/LocationsTransformerTest.php +++ b/tests/lib/Form/DataTransformer/LocationsTransformerTest.php @@ -11,17 +11,16 @@ use Ibexa\AdminUi\Form\DataTransformer\LocationsTransformer; use Ibexa\Contracts\Core\Repository\LocationService; use Ibexa\Core\Repository\Values\Content\Location; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class LocationsTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(mixed $value, ?string $expected): void { - $service = $this->createMock(LocationService::class); + $service = self::createStub(LocationService::class); $transformer = new LocationsTransformer($service); $result = $transformer->transform($value); @@ -45,9 +44,7 @@ public function testReverseTransformWithIds(): void self::assertEquals([new Location(['id' => 123456]), new Location(['id' => 456789])], $result); } - /** - * @dataProvider reverseTransformWithEmptyDataProvider - */ + #[DataProvider('reverseTransformWithEmptyDataProvider')] public function testReverseTransformWithEmpty(mixed $value): void { $service = $this->createMock(LocationService::class); @@ -60,15 +57,13 @@ public function testReverseTransformWithEmpty(mixed $value): void self::assertEmpty($result); } - /** - * @dataProvider reverseTransformWithInvalidInputDataProvider - */ + #[DataProvider('reverseTransformWithInvalidInputDataProvider')] public function testReverseTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); $this->expectExceptionMessage('Expected a string.'); - $service = $this->createMock(LocationService::class); + $service = self::createStub(LocationService::class); $transformer = new LocationsTransformer($service); $transformer->reverseTransform($value); @@ -77,7 +72,7 @@ public function testReverseTransformWithInvalidInput(mixed $value): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $location_1 = new Location(['id' => 123456]); $location_2 = new Location(['id' => 456789]); @@ -94,7 +89,7 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformWithInvalidInputDataProvider(): array + public static function reverseTransformWithInvalidInputDataProvider(): array { return [ 'integer' => [123456], @@ -108,7 +103,7 @@ public function reverseTransformWithInvalidInputDataProvider(): array /** * @return array */ - public function reverseTransformWithEmptyDataProvider(): array + public static function reverseTransformWithEmptyDataProvider(): array { return [ 'an_empty_string' => [''], diff --git a/tests/lib/Form/DataTransformer/PolicyTransformerTest.php b/tests/lib/Form/DataTransformer/PolicyTransformerTest.php index d31e83a6e8..67695c6c99 100644 --- a/tests/lib/Form/DataTransformer/PolicyTransformerTest.php +++ b/tests/lib/Form/DataTransformer/PolicyTransformerTest.php @@ -9,14 +9,13 @@ namespace Ibexa\Tests\AdminUi\Form\DataTransformer; use Ibexa\AdminUi\Form\DataTransformer\PolicyTransformer; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class PolicyTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(mixed $value, ?string $expected): void { $transformer = new PolicyTransformer(); @@ -26,9 +25,7 @@ public function testTransform(mixed $value, ?string $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider transformWithInvalidInputDataProvider - */ + #[DataProvider('transformWithInvalidInputDataProvider')] public function testTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); @@ -40,10 +37,9 @@ public function testTransformWithInvalidInput(mixed $value): void } /** - * @dataProvider reverseTransformDataProvider - * * @phpstan-param array{id: int, module: string, function: string}|null $expected */ + #[DataProvider('reverseTransformDataProvider')] public function testReverseTransform(?string $value, ?array $expected): void { $transformer = new PolicyTransformer(); @@ -52,9 +48,7 @@ public function testReverseTransform(?string $value, ?array $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider reverseTransformWithInvalidInputDataProvider - */ + #[DataProvider('reverseTransformWithInvalidInputDataProvider')] public function testReverseTransformWithInvalidInput(mixed $value, string $expectedMessage): void { $this->expectException(TransformationFailedException::class); @@ -68,7 +62,7 @@ public function testReverseTransformWithInvalidInput(mixed $value, string $expec /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { return [ 'policy' => [ @@ -82,7 +76,7 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformDataProvider(): array + public static function reverseTransformDataProvider(): array { return [ 'string' => ['123456:module:function', ['id' => 123456, 'module' => 'module', 'function' => 'function']], @@ -93,7 +87,7 @@ public function reverseTransformDataProvider(): array /** * @return array */ - public function transformWithInvalidInputDataProvider(): array + public static function transformWithInvalidInputDataProvider(): array { return [ 'integer' => [123456], @@ -112,7 +106,7 @@ public function transformWithInvalidInputDataProvider(): array /** * @return array */ - public function reverseTransformWithInvalidInputDataProvider(): array + public static function reverseTransformWithInvalidInputDataProvider(): array { $stringExpected = 'Expected a string.'; $atLeast3Parts = 'Policy string must contain at least 3 parts.'; diff --git a/tests/lib/Form/DataTransformer/RoleAssignmentTransformerTest.php b/tests/lib/Form/DataTransformer/RoleAssignmentTransformerTest.php index 5075508cdf..3580305d5d 100644 --- a/tests/lib/Form/DataTransformer/RoleAssignmentTransformerTest.php +++ b/tests/lib/Form/DataTransformer/RoleAssignmentTransformerTest.php @@ -13,17 +13,16 @@ use Ibexa\Contracts\Core\Repository\RoleService; use Ibexa\Core\Repository\Values\User\UserRoleAssignment; use Ibexa\Core\Repository\Values\User\UserRoleAssignment as RoleAssignment; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class RoleAssignmentTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?UserRoleAssignment $value, ?int $expected): void { - $service = $this->createMock(RoleService::class); + $service = self::createStub(RoleService::class); $transformer = new RoleAssignmentTransformer($service); $result = $transformer->transform($value); @@ -59,12 +58,10 @@ public function testReverseTransformWithNull(): void self::assertNull($result); } - /** - * @dataProvider reverseTransformWithInvalidInputDataProvider - */ + #[DataProvider('reverseTransformWithInvalidInputDataProvider')] public function testReverseTransformWithInvalidInput(mixed $value): void { - $service = $this->createMock(RoleService::class); + $service = self::createStub(RoleService::class); $transformer = new RoleAssignmentTransformer($service); @@ -92,7 +89,7 @@ public function testReverseTransformWithNotFoundException(): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $transform = new RoleAssignment(['id' => 123456]); @@ -105,7 +102,7 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformWithInvalidInputDataProvider(): array + public static function reverseTransformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/RoleTransformerTest.php b/tests/lib/Form/DataTransformer/RoleTransformerTest.php index 35ae83e372..10dfa19937 100644 --- a/tests/lib/Form/DataTransformer/RoleTransformerTest.php +++ b/tests/lib/Form/DataTransformer/RoleTransformerTest.php @@ -12,17 +12,16 @@ use Ibexa\Contracts\Core\Repository\Exceptions\NotFoundException; use Ibexa\Contracts\Core\Repository\RoleService; use Ibexa\Core\Repository\Values\User\Role; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class RoleTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?Role $value, ?int $expected): void { - $service = $this->createMock(RoleService::class); + $service = self::createStub(RoleService::class); $transformer = new RoleTransformer($service); $result = $transformer->transform($value); @@ -58,12 +57,10 @@ public function testReverseTransformWithNull(): void self::assertNull($result); } - /** - * @dataProvider reverseTransformWithInvalidInputDataProvider - */ + #[DataProvider('reverseTransformWithInvalidInputDataProvider')] public function testReverseTransformWithInvalidInput(mixed $value): void { - $roleService = $this->createMock(RoleService::class); + $roleService = self::createStub(RoleService::class); $transformer = new RoleTransformer($roleService); $this->expectException(TransformationFailedException::class); @@ -90,7 +87,7 @@ public function testReverseTransformWithNotFoundException(): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $transform = new Role(['id' => 123456]); @@ -103,7 +100,7 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformWithInvalidInputDataProvider(): array + public static function reverseTransformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/SectionTransformerTest.php b/tests/lib/Form/DataTransformer/SectionTransformerTest.php index 1c09a8ef54..67460de678 100644 --- a/tests/lib/Form/DataTransformer/SectionTransformerTest.php +++ b/tests/lib/Form/DataTransformer/SectionTransformerTest.php @@ -13,17 +13,16 @@ use Ibexa\Contracts\Core\Repository\SectionService; use Ibexa\Contracts\Core\Repository\Values\Content\Section; use Ibexa\Contracts\Core\Repository\Values\Content\Section as APISection; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class SectionTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?Section $value, ?int $expected): void { - $service = $this->createMock(SectionService::class); + $service = self::createStub(SectionService::class); $transformer = new SectionTransformer($service); $result = $transformer->transform($value); @@ -31,12 +30,10 @@ public function testTransform(?Section $value, ?int $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider transformWithInvalidInputDataProvider - */ + #[DataProvider('transformWithInvalidInputDataProvider')] public function testTransformWithInvalidInput(mixed $value): void { - $languageService = $this->createMock(SectionService::class); + $languageService = self::createStub(SectionService::class); $transformer = new SectionTransformer($languageService); $this->expectException(TransformationFailedException::class); @@ -103,7 +100,7 @@ public function testReverseTransformWithNonNumericString(): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $transform = new APISection(['id' => 123456]); @@ -116,7 +113,7 @@ public function transformDataProvider(): array /** * @return array */ - public function transformWithInvalidInputDataProvider(): array + public static function transformWithInvalidInputDataProvider(): array { return [ 'string' => ['string'], diff --git a/tests/lib/Form/DataTransformer/SectionsTransformerTest.php b/tests/lib/Form/DataTransformer/SectionsTransformerTest.php index 31d3e93e62..1e367c6d18 100644 --- a/tests/lib/Form/DataTransformer/SectionsTransformerTest.php +++ b/tests/lib/Form/DataTransformer/SectionsTransformerTest.php @@ -11,17 +11,16 @@ use Ibexa\AdminUi\Form\DataTransformer\SectionsTransformer; use Ibexa\Contracts\Core\Repository\SectionService; use Ibexa\Contracts\Core\Repository\Values\Content\Section as APISection; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; class SectionsTransformerTest extends TestCase { - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(mixed $value, ?string $expected): void { - $service = $this->createMock(SectionService::class); + $service = self::createStub(SectionService::class); $transformer = new SectionsTransformer($service); $result = $transformer->transform($value); @@ -45,9 +44,7 @@ public function testReverseTransformWithIds(): void self::assertEquals([new APISection(['id' => 123456]), new APISection(['id' => 456789])], $result); } - /** - * @dataProvider reverseTransformWithEmptyDataProvider - */ + #[DataProvider('reverseTransformWithEmptyDataProvider')] public function testReverseTransformWithEmpty(mixed $value): void { $service = $this->createMock(SectionService::class); @@ -60,15 +57,13 @@ public function testReverseTransformWithEmpty(mixed $value): void self::assertNull($result); } - /** - * @dataProvider reverseTransformWithInvalidInputDataProvider - */ + #[DataProvider('reverseTransformWithInvalidInputDataProvider')] public function testReverseTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); $this->expectExceptionMessage('Expected a string.'); - $service = $this->createMock(SectionService::class); + $service = self::createStub(SectionService::class); $transformer = new SectionsTransformer($service); $transformer->reverseTransform($value); @@ -77,7 +72,7 @@ public function testReverseTransformWithInvalidInput(mixed $value): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { $sectionA = new APISection(['id' => 123456]); $sectionB = new APISection(['id' => 456789]); @@ -94,7 +89,7 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformWithInvalidInputDataProvider(): array + public static function reverseTransformWithInvalidInputDataProvider(): array { return [ 'integer' => [123456], @@ -108,7 +103,7 @@ public function reverseTransformWithInvalidInputDataProvider(): array /** * @return array */ - public function reverseTransformWithEmptyDataProvider(): array + public static function reverseTransformWithEmptyDataProvider(): array { return [ 'an_empty_string' => [''], diff --git a/tests/lib/Form/DataTransformer/TranslatablePropertyTransformerTest.php b/tests/lib/Form/DataTransformer/TranslatablePropertyTransformerTest.php index d31da4f1ce..675b4da6b0 100644 --- a/tests/lib/Form/DataTransformer/TranslatablePropertyTransformerTest.php +++ b/tests/lib/Form/DataTransformer/TranslatablePropertyTransformerTest.php @@ -9,13 +9,12 @@ namespace Ibexa\Tests\AdminUi\Form\DataTransformer; use Ibexa\AdminUi\Form\DataTransformer\TranslatablePropertyTransformer; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class TranslatablePropertyTransformerTest extends TestCase { - /** - * @dataProvider transformInvalidValueProvider - */ + #[DataProvider('transformInvalidValueProvider')] public function testTransformInvalidValue(mixed $value): void { $transformer = new TranslatablePropertyTransformer('fre-FR'); @@ -26,7 +25,7 @@ public function testTransformInvalidValue(mixed $value): void /** * @phpstan-return list */ - public function transformInvalidValueProvider(): array + public static function transformInvalidValueProvider(): array { return [ ['foo'], @@ -38,9 +37,8 @@ public function transformInvalidValueProvider(): array /** * @param array $inputValue - * - * @dataProvider transformValueProvider */ + #[DataProvider('transformValueProvider')] public function testTransform(array $inputValue, string $languageCode, string $expected): void { $transformer = new TranslatablePropertyTransformer($languageCode); @@ -50,7 +48,7 @@ public function testTransform(array $inputValue, string $languageCode, string $e /** * @phpstan-return list, string, string}> */ - public function transformValueProvider(): array + public static function transformValueProvider(): array { return [ [ @@ -72,10 +70,9 @@ public function transformValueProvider(): array } /** - * @dataProvider reverseTransformProvider - * * @param array $expected */ + #[DataProvider('reverseTransformProvider')] public function testReverseTransform(mixed $inputValue, string $languageCode, array $expected): void { $transformer = new TranslatablePropertyTransformer($languageCode); @@ -86,7 +83,7 @@ public function testReverseTransform(mixed $inputValue, string $languageCode, ar /** * @phpstan-return list}> */ - public function reverseTransformProvider(): array + public static function reverseTransformProvider(): array { return [ [false, 'fre-FR', ['fre-FR' => null]], diff --git a/tests/lib/Form/DataTransformer/UDWBasedValueViewTransformerTest.php b/tests/lib/Form/DataTransformer/UDWBasedValueViewTransformerTest.php index e7ce899d1d..087ae0eed3 100644 --- a/tests/lib/Form/DataTransformer/UDWBasedValueViewTransformerTest.php +++ b/tests/lib/Form/DataTransformer/UDWBasedValueViewTransformerTest.php @@ -12,6 +12,8 @@ use Ibexa\Contracts\Core\Repository\Exceptions\UnauthorizedException; use Ibexa\Contracts\Core\Repository\LocationService; use Ibexa\Contracts\Core\Repository\Values\Content\Location; +use Ibexa\Core\Repository\Values\Content\Location as CoreLocation; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -32,9 +34,8 @@ protected function setUp(): void /** * @param mixed[] $given - * - * @dataProvider dataProviderForTransform */ + #[DataProvider('dataProviderForTransform')] public function testTransform(?array $given, ?string $expected): void { self::assertEquals($expected, $this->transformer->transform($given)); @@ -43,15 +44,15 @@ public function testTransform(?array $given, ?string $expected): void /** * @return array, 1: ?string}> */ - public function dataProviderForTransform(): array + public static function dataProviderForTransform(): array { return [ [null, null], [ [ - $this->createLocation(54), - $this->createLocation(56), - $this->createLocation(58), + self::createLocation(54), + self::createLocation(56), + self::createLocation(58), ], '54,56,58', ], @@ -60,9 +61,8 @@ public function dataProviderForTransform(): array /** * @param mixed[] $expected - * - * @dataProvider dataProviderForReverseTransform */ + #[DataProvider('dataProviderForReverseTransform')] public function testReverseTransform(?string $given, ?array $expected): void { $this->locationService @@ -77,16 +77,16 @@ public function testReverseTransform(?string $given, ?array $expected): void /** * @return array}> */ - public function dataProviderForReverseTransform(): array + public static function dataProviderForReverseTransform(): array { return [ [null, null], [ '54,56,58', [ - $this->createLocation(54), - $this->createLocation(56), - $this->createLocation(58), + self::createLocation(54), + self::createLocation(56), + self::createLocation(58), ], ], ]; @@ -99,24 +99,14 @@ public function testReverseTransformThrowsTransformationFailedException(): void $this->locationService ->method('loadLocation') ->willThrowException( - $this->createMock(UnauthorizedException::class) + self::createStub(UnauthorizedException::class) ); $this->transformer->reverseTransform('54,56,58'); } - private function createLocation(int $id): Location + private static function createLocation(int $id): Location { - $location = $this->createMock(Location::class); - $location - ->method('__get') - ->with('id') - ->willReturn($id); - $location - ->method('__isset') - ->with('id') - ->willReturn(true); - - return $location; + return new CoreLocation(['id' => $id]); } } diff --git a/tests/lib/Form/DataTransformer/UserTransformerTest.php b/tests/lib/Form/DataTransformer/UserTransformerTest.php index 955d3d66a5..78be7c03a7 100644 --- a/tests/lib/Form/DataTransformer/UserTransformerTest.php +++ b/tests/lib/Form/DataTransformer/UserTransformerTest.php @@ -15,6 +15,7 @@ use Ibexa\Contracts\Core\Repository\Values\User\User; use Ibexa\Core\Repository\Values\Content as Core; use Ibexa\Core\Repository\Values\User\User as CoreUser; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -34,9 +35,7 @@ protected function setUp(): void $this->userTransformer = new UserTransformer($userService); } - /** - * @dataProvider transformDataProvider - */ + #[DataProvider('transformDataProvider')] public function testTransform(?User $value, ?int $expected): void { $result = $this->userTransformer->transform($value); @@ -44,9 +43,7 @@ public function testTransform(?User $value, ?int $expected): void self::assertEquals($expected, $result); } - /** - * @dataProvider reverseTransformDataProvider - */ + #[DataProvider('reverseTransformDataProvider')] public function testReverseTransform(?int $value, ?User $expected): void { $result = $this->userTransformer->reverseTransform($value); @@ -73,9 +70,9 @@ public function testReverseTransformWithNotFoundException(): void /** * @return array */ - public function transformDataProvider(): array + public static function transformDataProvider(): array { - $user = $this->generateUser(123456); + $user = self::generateUser(123456); return [ 'user_with_id' => [$user, 123456], @@ -86,9 +83,9 @@ public function transformDataProvider(): array /** * @return array */ - public function reverseTransformDataProvider(): array + public static function reverseTransformDataProvider(): array { - $user = $this->generateUser(123456); + $user = self::generateUser(123456); return [ 'integer' => [123456, $user], @@ -96,7 +93,7 @@ public function reverseTransformDataProvider(): array ]; } - private function generateUser(?int $id = null): User + private static function generateUser(?int $id = null): User { $contentInfo = new API\ContentInfo(['id' => $id]); $versionInfo = new Core\VersionInfo(['contentInfo' => $contentInfo]); diff --git a/tests/lib/Form/DataTransformer/VersionInfoTransformerTest.php b/tests/lib/Form/DataTransformer/VersionInfoTransformerTest.php index 7efd292780..dc33375e78 100644 --- a/tests/lib/Form/DataTransformer/VersionInfoTransformerTest.php +++ b/tests/lib/Form/DataTransformer/VersionInfoTransformerTest.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\Exceptions\UnauthorizedException; use Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -37,10 +38,9 @@ protected function setUp(): void } /** - * @dataProvider dataProviderForTransformWithValidInput - * * @phpstan-param TTransformedValue|null $expected */ + #[DataProvider('dataProviderForTransformWithValidInput')] public function testTransformWithValidInput(?VersionInfo $value, ?array $expected): void { self::assertEquals( @@ -52,13 +52,13 @@ public function testTransformWithValidInput(?VersionInfo $value, ?array $expecte /** * @phpstan-return list */ - public function dataProviderForTransformWithValidInput(): array + public static function dataProviderForTransformWithValidInput(): array { $contentInfo = new ContentInfo([ 'id' => self::EXAMPLE_CONTENT_ID, ]); - $versionInfo = $this->createVersionInfoMock($contentInfo, self::EXAMPLE_VERSION_NO); + $versionInfo = self::createVersionInfoMock($contentInfo, self::EXAMPLE_VERSION_NO); return [ [null, null], @@ -72,9 +72,7 @@ public function dataProviderForTransformWithValidInput(): array ]; } - /** - * @dataProvider dataProviderForTransformWithInvalidInput - */ + #[DataProvider('dataProviderForTransformWithInvalidInput')] public function testTransformWithInvalidInput(mixed $value): void { $this->expectException(TransformationFailedException::class); @@ -86,7 +84,7 @@ public function testTransformWithInvalidInput(mixed $value): void /** * @phpstan-return array */ - public function dataProviderForTransformWithInvalidInput(): array + public static function dataProviderForTransformWithInvalidInput(): array { $object = new class() { }; @@ -102,13 +100,12 @@ public function dataProviderForTransformWithInvalidInput(): array } /** - * @dataProvider dataProviderForReverseTransformWithValidInput - * * @phpstan-param array{ * content_info: \Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo|null, * version_no: int|string|null * }|null $value */ + #[DataProvider('dataProviderForReverseTransformWithValidInput')] public function testReverseTransformWithValidInput(?array $value, ?VersionInfo $expected): void { if ($expected !== null && $value !== null) { @@ -120,7 +117,7 @@ public function testReverseTransformWithValidInput(?array $value, ?VersionInfo $ self::logicalAnd( self::equalTo($value['version_no']), // Make sure value is cast to int - self::isType('int') + self::isInt() ) ) ->willReturn($expected); @@ -141,13 +138,13 @@ public function testReverseTransformWithValidInput(?array $value, ?VersionInfo $ * \Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo|null * }> */ - public function dataProviderForReverseTransformWithValidInput(): array + public static function dataProviderForReverseTransformWithValidInput(): array { $contentInfo = new ContentInfo([ 'id' => self::EXAMPLE_CONTENT_ID, ]); - $versionInfo = $this->createVersionInfoMock($contentInfo, self::EXAMPLE_VERSION_NO); + $versionInfo = self::createVersionInfoMock($contentInfo, self::EXAMPLE_VERSION_NO); return [ 'null' => [null, null], @@ -176,10 +173,9 @@ public function dataProviderForReverseTransformWithValidInput(): array } /** - * @dataProvider dataProviderForReverseTransformWithInvalidInput - * * @phpstan-param array{} $value */ + #[DataProvider('dataProviderForReverseTransformWithInvalidInput')] public function testReverseTransformWithInvalidInput(array $value): void { $this->expectException(TransformationFailedException::class); @@ -191,7 +187,7 @@ public function testReverseTransformWithInvalidInput(array $value): void /** * @phpstan-return array */ - public function dataProviderForReverseTransformWithInvalidInput(): array + public static function dataProviderForReverseTransformWithInvalidInput(): array { return [ 'empty_array' => [ @@ -250,9 +246,9 @@ public function testReverseTransformForUnauthorizedVersionInfo(): void $this->transformer->reverseTransform($value); } - private function createVersionInfoMock(ContentInfo $contentInfo, int $versionNo): VersionInfo + private static function createVersionInfoMock(ContentInfo $contentInfo, int $versionNo): VersionInfo { - $versionInfo = $this->createMock(VersionInfo::class); + $versionInfo = self::createStub(VersionInfo::class); $versionInfo->method('getVersionNo')->willReturn($versionNo); $versionInfo->method('getContentInfo')->willReturn($contentInfo); diff --git a/tests/lib/Form/Processor/Content/ContentOnTheFlyProcessorTest.php b/tests/lib/Form/Processor/Content/ContentOnTheFlyProcessorTest.php index 1bedd20706..d31408e3e9 100644 --- a/tests/lib/Form/Processor/Content/ContentOnTheFlyProcessorTest.php +++ b/tests/lib/Form/Processor/Content/ContentOnTheFlyProcessorTest.php @@ -18,6 +18,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Language; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo; use Ibexa\Core\Repository\Values\Content\Location; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormConfigInterface; @@ -25,9 +26,7 @@ use Symfony\Component\HttpFoundation\Response; use Twig\Environment; -/** - * @covers \Ibexa\AdminUi\Form\Processor\Content\ContentOnTheFlyProcessor - */ +#[CoversClass(ContentOnTheFlyProcessor::class)] final class ContentOnTheFlyProcessorTest extends TestCase { private const string CREATE_RESPONSE_TEMPLATE = '@ibexadesign/ui/on_the_fly/content_create_response.html.twig'; @@ -151,13 +150,13 @@ private function createDraft(): Content 'mainLanguageCode' => self::LANGUAGE_CODE, ]); - $versionInfo = $this->createStub(VersionInfo::class); + $versionInfo = self::createStub(VersionInfo::class); $versionInfo->method('getInitialLanguage')->willReturn( new Language(['languageCode' => self::LANGUAGE_CODE]) ); $versionInfo->method('getContentInfo')->willReturn($contentInfo); - $draft = $this->createStub(Content::class); + $draft = self::createStub(Content::class); $draft->method('getVersionInfo')->willReturn($versionInfo); return $draft; @@ -171,7 +170,7 @@ private function createPublishedContent(): Content 'status' => ContentInfo::STATUS_PUBLISHED, ]); - $publishedContent = $this->createStub(Content::class); + $publishedContent = self::createStub(Content::class); $publishedContent->method('getContentInfo')->willReturn($contentInfo); return $publishedContent; @@ -184,10 +183,10 @@ private function createEvent( ContentCreateData|ContentUpdateData $data, array $options = [] ): FormActionEvent { - $formConfig = $this->createStub(FormConfigInterface::class); + $formConfig = self::createStub(FormConfigInterface::class); $formConfig->method('getOption')->willReturn(self::LANGUAGE_CODE); - $form = $this->createStub(FormInterface::class); + $form = self::createStub(FormInterface::class); $form->method('getConfig')->willReturn($formConfig); return new FormActionEvent($form, $data, 'publish', $options); diff --git a/tests/lib/Form/Processor/ContentTypeFormProcessorTest.php b/tests/lib/Form/Processor/ContentTypeFormProcessorTest.php index f3cf9446c5..54e78603cf 100644 --- a/tests/lib/Form/Processor/ContentTypeFormProcessorTest.php +++ b/tests/lib/Form/Processor/ContentTypeFormProcessorTest.php @@ -20,6 +20,7 @@ use Ibexa\Core\Repository\Values\ContentType\ContentTypeDraft; use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; use Ibexa\Core\Repository\Values\ContentType\FieldDefinitionCollection; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\DataMapperInterface; @@ -29,9 +30,7 @@ use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\RouterInterface; -/** - * @covers \Ibexa\AdminUi\Form\Processor\ContentType\ContentTypeFormProcessor - */ +#[CoversClass(ContentTypeFormProcessor::class)] final class ContentTypeFormProcessorTest extends TestCase { private const int EXAMPLE_CONTENT_TYPE_ID = 1; @@ -91,20 +90,28 @@ public function testProcessDefaultAction(): void $contentTypeData = new ContentTypeData(['contentTypeDraft' => $contentTypeDraft]); $contentTypeData->addFieldDefinitionData($fieldDefData1); $contentTypeData->addFieldDefinitionData($fieldDefData2); + $matcher = self::exactly(2); $this->contentTypeService - ->expects(self::exactly(2)) - ->method('updateFieldDefinition') - ->withConsecutive( - [$contentTypeDraft, $fieldDef1, $fieldDefData1], - [$contentTypeDraft, $fieldDef2, $fieldDefData2], - ); + ->expects($matcher) + ->method('updateFieldDefinition')->willReturnCallback(function (...$parameters) use ($matcher, $contentTypeDraft, $fieldDef1, $fieldDefData1, $fieldDef2, $fieldDefData2): void { + if ($matcher->numberOfInvocations() === 1) { + $this->assertSame($contentTypeDraft, $parameters[0]); + $this->assertSame($fieldDef1, $parameters[1]); + $this->assertSame($fieldDefData1, $parameters[2]); + } + if ($matcher->numberOfInvocations() === 2) { + $this->assertSame($contentTypeDraft, $parameters[0]); + $this->assertSame($fieldDef2, $parameters[1]); + $this->assertSame($fieldDefData2, $parameters[2]); + } + }); $this->contentTypeService ->expects(self::once()) ->method('updateContentTypeDraft') ->with($contentTypeDraft, $contentTypeData); - $event = new FormActionEvent($this->createMock(FormInterface::class), $contentTypeData, 'fooAction'); + $event = new FormActionEvent(self::createStub(FormInterface::class), $contentTypeData, 'fooAction'); $this->formProcessor->processDefaultAction($event); } @@ -180,7 +187,7 @@ public function testAddFieldDefinition(): void $this->groupsList ->expects(self::once()) ->method('getDefaultGroup') - ->will(self::returnValue('content')); + ->willReturn('content'); $event = new FormActionEvent( $mainForm, @@ -196,7 +203,7 @@ public function testPublishContentType(): void { $contentTypeDraft = $this->getContentTypeDraft(); $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new ContentTypeData(['contentTypeDraft' => $contentTypeDraft]), 'publishContentType', ['languageCode' => 'eng-GB'] @@ -215,7 +222,7 @@ public function testPublishContentTypeWithRedirection(): void $redirectUrl = 'http://foo.com/bar'; $contentTypeDraft = $this->getContentTypeDraft(); $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new ContentTypeData(['contentTypeDraft' => $contentTypeDraft]), 'publishContentType', ['languageCode' => 'eng-GB'] @@ -256,7 +263,7 @@ public function testRemoveFieldDefinition(): void $compoundFormConfig = $this->createMock(FormConfigInterface::class); $compoundFormConfig->method('getCompound')->willReturn(true); - $compoundFormConfig->method('getDataMapper')->willReturn($this->createMock(DataMapperInterface::class)); + $compoundFormConfig->method('getDataMapper')->willReturn(self::createStub(DataMapperInterface::class)); $fieldDefinitionsDataForm = new Form($compoundFormConfig); $fieldDefinitionsDataForm->add($this->mockFieldDefinitionForm($fieldDefinition1, false)); $fieldDefinitionsDataForm->add($this->mockFieldDefinitionForm($fieldDefinition2, true)); @@ -280,7 +287,7 @@ static function ( FieldDefinition $actualFieldDefinition ) use ($matcher, $contentTypeDraft, $fieldDefinition2, $fieldDefinition3): void { self::assertSame($contentTypeDraft, $actualContentTypeDraft); - match ($matcher->getInvocationCount()) { + match ($matcher->numberOfInvocations()) { 1 => self::assertSame($fieldDefinition2, $actualFieldDefinition), 2 => self::assertSame($fieldDefinition3, $actualFieldDefinition), default => self::fail('Unexpected invocation count matched'), @@ -303,7 +310,7 @@ public function testRemoveContentTypeDraft(): void { $contentTypeDraft = $this->getContentTypeDraft(); $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new ContentTypeData(['contentTypeDraft' => $contentTypeDraft]), 'removeDraft', ['languageCode' => 'eng-GB'] @@ -322,7 +329,7 @@ public function testRemoveContentTypeDraftWithRedirection(): void $redirectUrl = 'http://foo.com/bar'; $contentTypeDraft = $this->getContentTypeDraft(); $event = new FormActionEvent( - $this->createMock(FormInterface::class), + self::createStub(FormInterface::class), new ContentTypeData(['contentTypeDraft' => $contentTypeDraft]), 'removeDraft', ['languageCode' => 'eng-GB'] diff --git a/tests/lib/Form/Processor/PreviewFormProcessorTest.php b/tests/lib/Form/Processor/PreviewFormProcessorTest.php index b36643f458..1313f8b8dc 100644 --- a/tests/lib/Form/Processor/PreviewFormProcessorTest.php +++ b/tests/lib/Form/Processor/PreviewFormProcessorTest.php @@ -24,6 +24,7 @@ use Ibexa\Core\Repository\Values\ContentType\ContentType; use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormConfigInterface; use Symfony\Component\Form\FormInterface; @@ -32,20 +33,20 @@ final class PreviewFormProcessorTest extends TestCase { - private ContentService&MockObject $contentService; + private ContentService&Stub $contentService; - private UrlGeneratorInterface&MockObject $urlGenerator; + private UrlGeneratorInterface&Stub $urlGenerator; - private TranslatableNotificationHandlerInterface&MockObject $notificationHandler; + private TranslatableNotificationHandlerInterface&Stub $notificationHandler; - private LocationService&MockObject $locationService; + private LocationService&Stub $locationService; protected function setUp(): void { - $this->contentService = $this->createMock(ContentService::class); - $this->urlGenerator = $this->createMock(UrlGeneratorInterface::class); - $this->notificationHandler = $this->createMock(TranslatableNotificationHandlerInterface::class); - $this->locationService = $this->createMock(LocationService::class); + $this->contentService = self::createStub(ContentService::class); + $this->urlGenerator = self::createStub(UrlGeneratorInterface::class); + $this->notificationHandler = self::createStub(TranslatableNotificationHandlerInterface::class); + $this->locationService = self::createStub(LocationService::class); } private function createPreviewFormProcessor( diff --git a/tests/lib/Form/Type/Extension/EventSubscriber/ModifyFieldDefinitionFieldsSubscriberTest.php b/tests/lib/Form/Type/Extension/EventSubscriber/ModifyFieldDefinitionFieldsSubscriberTest.php index 768591bfa7..6af734cbf3 100644 --- a/tests/lib/Form/Type/Extension/EventSubscriber/ModifyFieldDefinitionFieldsSubscriberTest.php +++ b/tests/lib/Form/Type/Extension/EventSubscriber/ModifyFieldDefinitionFieldsSubscriberTest.php @@ -14,15 +14,14 @@ use Ibexa\AdminUi\Form\Type\FieldDefinition\FieldDefinitionType; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentTypeDraft; use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormInterface; -/** - * @covers \Ibexa\AdminUi\Form\Type\Extension\EventSubscriber\ModifyFieldDefinitionFieldsSubscriber - */ +#[CoversClass(ModifyFieldDefinitionFieldsSubscriber::class)] final class ModifyFieldDefinitionFieldsSubscriberTest extends TestCase { private const string FIELD_TYPE_IDENTIFIER = 'foo'; diff --git a/tests/lib/Limitation/LimitationValueMapperRegistryTest.php b/tests/lib/Limitation/LimitationValueMapperRegistryTest.php index cfdb1ba938..be59ab5dd0 100644 --- a/tests/lib/Limitation/LimitationValueMapperRegistryTest.php +++ b/tests/lib/Limitation/LimitationValueMapperRegistryTest.php @@ -16,8 +16,8 @@ class LimitationValueMapperRegistryTest extends TestCase { public function testGetMappers(): void { - $foo = $this->createMock(LimitationValueMapperInterface::class); - $bar = $this->createMock(LimitationValueMapperInterface::class); + $foo = self::createStub(LimitationValueMapperInterface::class); + $bar = self::createStub(LimitationValueMapperInterface::class); $registry = new LimitationValueMapperRegistry([ 'foo' => $foo, @@ -33,7 +33,7 @@ public function testGetMappers(): void public function testGetMapper(): void { - $foo = $this->createMock(LimitationValueMapperInterface::class); + $foo = self::createStub(LimitationValueMapperInterface::class); $registry = new LimitationValueMapperRegistry([ 'foo' => $foo, @@ -47,7 +47,7 @@ public function testGetNonExistingMapper(): void $this->expectException(ValueMapperNotFoundException::class); $registry = new LimitationValueMapperRegistry([ - 'foo' => $this->createMock(LimitationValueMapperInterface::class), + 'foo' => self::createStub(LimitationValueMapperInterface::class), ]); $registry->getMapper('bar'); @@ -55,7 +55,7 @@ public function testGetNonExistingMapper(): void public function testAddMapper(): void { - $foo = $this->createMock(LimitationValueMapperInterface::class); + $foo = self::createStub(LimitationValueMapperInterface::class); $registry = new LimitationValueMapperRegistry(); $registry->addMapper($foo, 'foo'); @@ -66,7 +66,7 @@ public function testAddMapper(): void public function testHasMapper(): void { $registry = new LimitationValueMapperRegistry([ - 'foo' => $this->createMock(LimitationValueMapperInterface::class), + 'foo' => self::createStub(LimitationValueMapperInterface::class), ]); self::assertTrue($registry->hasMapper('foo')); diff --git a/tests/lib/Limitation/Mapper/ContentTypeLimitationMapperTest.php b/tests/lib/Limitation/Mapper/ContentTypeLimitationMapperTest.php index 792115aa01..9095dda8dd 100644 --- a/tests/lib/Limitation/Mapper/ContentTypeLimitationMapperTest.php +++ b/tests/lib/Limitation/Mapper/ContentTypeLimitationMapperTest.php @@ -46,9 +46,9 @@ public function testMapLimitationValue(): void ]; $expected = [ - $this->createMock(ContentType::class), - $this->createMock(ContentType::class), - $this->createMock(ContentType::class), + self::createStub(ContentType::class), + self::createStub(ContentType::class), + self::createStub(ContentType::class), ]; $contentTypesById = []; @@ -79,7 +79,7 @@ public function testMapLimitationValueWithNotExistingContentType(): void ->expects(self::once()) ->method('loadContentType') ->with(self::EXAMPLE_CONTENT_TYPE_ID_A) - ->willThrowException($this->createMock(NotFoundException::class)); + ->willThrowException(self::createStub(NotFoundException::class)); $this->logger ->expects(self::once()) diff --git a/tests/lib/Limitation/Mapper/LanguageTypeLimitationMapperTest.php b/tests/lib/Limitation/Mapper/LanguageTypeLimitationMapperTest.php index c2b647b7fa..bb869e244c 100644 --- a/tests/lib/Limitation/Mapper/LanguageTypeLimitationMapperTest.php +++ b/tests/lib/Limitation/Mapper/LanguageTypeLimitationMapperTest.php @@ -38,9 +38,9 @@ public function testMapLimitationValue(): void $values = ['en_GB', 'en_US', 'pl_PL']; $expected = [ - $this->createMock(Language::class), - $this->createMock(Language::class), - $this->createMock(Language::class), + self::createStub(Language::class), + self::createStub(Language::class), + self::createStub(Language::class), ]; $languagesByCode = []; @@ -72,7 +72,7 @@ public function testMapLimitationValueWithNotExistingContentType(): void ->expects(self::once()) ->method('loadLanguage') ->with($values[0]) - ->willThrowException($this->createMock(NotFoundException::class)); + ->willThrowException(self::createStub(NotFoundException::class)); $this->logger ->expects(self::once()) diff --git a/tests/lib/Limitation/Mapper/ObjectStateLimitationMapperTest.php b/tests/lib/Limitation/Mapper/ObjectStateLimitationMapperTest.php index c7c73342c4..bd3ca2cf58 100644 --- a/tests/lib/Limitation/Mapper/ObjectStateLimitationMapperTest.php +++ b/tests/lib/Limitation/Mapper/ObjectStateLimitationMapperTest.php @@ -81,7 +81,7 @@ public function testMapLimitationValueWithNotExistingObjectState(): void ->expects(self::once()) ->method('loadObjectState') ->with(self::EXAMPLE_OBJECT_STATE_ID_A) - ->willThrowException($this->createMock(NotFoundException::class)); + ->willThrowException(self::createStub(NotFoundException::class)); $this->logger ->expects(self::once()) diff --git a/tests/lib/Limitation/Mapper/SectionLimitationMapperTest.php b/tests/lib/Limitation/Mapper/SectionLimitationMapperTest.php index bf3b166f38..3302dc3379 100644 --- a/tests/lib/Limitation/Mapper/SectionLimitationMapperTest.php +++ b/tests/lib/Limitation/Mapper/SectionLimitationMapperTest.php @@ -72,7 +72,7 @@ public function testMapLimitationValueWithNotExistingContentType(): void ->expects(self::once()) ->method('loadSection') ->with($values[0]) - ->willThrowException($this->createMock(NotFoundException::class)); + ->willThrowException(self::createStub(NotFoundException::class)); $this->logger ->expects(self::once()) diff --git a/tests/lib/Limitation/Mapper/SubtreeLimitationMapperTest.php b/tests/lib/Limitation/Mapper/SubtreeLimitationMapperTest.php index d5a411adfd..d0d097be04 100644 --- a/tests/lib/Limitation/Mapper/SubtreeLimitationMapperTest.php +++ b/tests/lib/Limitation/Mapper/SubtreeLimitationMapperTest.php @@ -47,7 +47,7 @@ public function testMapLimitationValue(): void $locationServiceMock = $this->createMock(LocationService::class); $searchServiceMock = $this->createMock(SearchService::class); - $repositoryMock = $this->createMock(Repository::class); + $repositoryMock = self::createStub(Repository::class); $searchResultsByPath = []; $locationsById = []; diff --git a/tests/lib/Limitation/Mapper/UDWBasedMapperTest.php b/tests/lib/Limitation/Mapper/UDWBasedMapperTest.php index 21a9ad95e4..dedca3d3b3 100644 --- a/tests/lib/Limitation/Mapper/UDWBasedMapperTest.php +++ b/tests/lib/Limitation/Mapper/UDWBasedMapperTest.php @@ -20,11 +20,10 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Search\SearchResult; use Ibexa\Contracts\Core\Repository\Values\User\Limitation\SubtreeLimitation; use Ibexa\Core\Repository\Values\Content\Location; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; -/** - * @covers \Ibexa\AdminUi\Limitation\Mapper\UDWBasedMapper - */ +#[CoversClass(UDWBasedMapper::class)] final class UDWBasedMapperTest extends TestCase { public function testMapLimitationValue(): void @@ -50,7 +49,7 @@ public function testMapLimitationValue(): void $locationServiceMock = $this->createMock(LocationService::class); $searchServiceMock = $this->createMock(SearchService::class); - $repositoryMock = $this->createMock(Repository::class); + $repositoryMock = self::createStub(Repository::class); $locationsById = []; $searchResultsByPath = []; diff --git a/tests/lib/Menu/Action/BaseActionMenuBuilderTest.php b/tests/lib/Menu/Action/BaseActionMenuBuilderTestCase.php similarity index 95% rename from tests/lib/Menu/Action/BaseActionMenuBuilderTest.php rename to tests/lib/Menu/Action/BaseActionMenuBuilderTestCase.php index 1b04f15751..f76a07b33c 100644 --- a/tests/lib/Menu/Action/BaseActionMenuBuilderTest.php +++ b/tests/lib/Menu/Action/BaseActionMenuBuilderTestCase.php @@ -27,7 +27,7 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Contracts\Translation\TranslatorInterface; -abstract class BaseActionMenuBuilderTest extends TestCase +abstract class BaseActionMenuBuilderTestCase extends TestCase { protected const string ROUTE_VERSION_HAS_NO_CONFLICT = 'ibexa.version.has_no_conflict'; protected const string ROUTE_CONTENT_EDIT_DRAFT = '/content/edit/draft/%d/%d/%s'; @@ -65,7 +65,7 @@ protected function setUp(): void $this->menuItemFactory = new MenuItemFactory( new MenuFactory(), - $this->createMock(LocationService::class) + self::createStub(LocationService::class) ); $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); @@ -96,7 +96,7 @@ protected function assertActionItemSame( self::assertEquals($attributes, $actionItem->getAttributes()); } - protected function createVersionInfo(int $status = ApiVersionInfo::STATUS_DRAFT): ApiVersionInfo + protected static function createVersionInfo(int $status = ApiVersionInfo::STATUS_DRAFT): ApiVersionInfo { return new VersionInfo( [ @@ -106,7 +106,7 @@ protected function createVersionInfo(int $status = ApiVersionInfo::STATUS_DRAFT) 'languageCode' => 'eng-GB', ]), 'contentInfo' => new ContentInfo(['id' => 1]), - 'creator' => $this->createMock(User::class), + 'creator' => self::createStub(User::class), ] ); } diff --git a/tests/lib/Menu/Action/DraftListActionMenuBuilderTest.php b/tests/lib/Menu/Action/DraftListActionMenuBuilderTest.php index d02b5ea960..9c8dcc85af 100644 --- a/tests/lib/Menu/Action/DraftListActionMenuBuilderTest.php +++ b/tests/lib/Menu/Action/DraftListActionMenuBuilderTest.php @@ -12,11 +12,10 @@ use Ibexa\Contracts\Core\Exception\InvalidArgumentException; use Ibexa\Contracts\Core\Repository\Values\Content\Content; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo as ApiVersionInfo; +use PHPUnit\Framework\Attributes\CoversClass; -/** - * @covers \Ibexa\AdminUi\Menu\Action\DraftListActionMenuBuilder - */ -final class DraftListActionMenuBuilderTest extends BaseActionMenuBuilderTest +#[CoversClass(DraftListActionMenuBuilder::class)] +final class DraftListActionMenuBuilderTest extends BaseActionMenuBuilderTestCase { private const DRAFT_LIST_ACTION_CONTENT_EDIT = 'draft_list__action__content_edit'; @@ -71,7 +70,7 @@ public function testBuildDraftListActionMenu(): void public function testAddUserUpdateItemAction(): void { $versionInfo = $this->createVersionInfo(); - $user = $this->createMock(Content::class); + $user = self::createStub(Content::class); $this->mockUrlGeneratorGenerate(); $this->mockContentServiceLoadContentByVersionInfo($versionInfo, $user); diff --git a/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php b/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php index 9288ae2567..2bc46f5cf2 100644 --- a/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php +++ b/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php @@ -12,11 +12,11 @@ use Ibexa\Contracts\Core\Exception\InvalidArgumentException; use Ibexa\Contracts\Core\Repository\Values\Content\Content; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo as ApiVersionInfo; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; -/** - * @covers \Ibexa\AdminUi\Menu\Action\VersionListActionMenuBuilder - */ -final class VersionListActionMenuBuilderTest extends BaseActionMenuBuilderTest +#[CoversClass(VersionListActionMenuBuilder::class)] +final class VersionListActionMenuBuilderTest extends BaseActionMenuBuilderTestCase { private const ITEM_EDIT_DRAFT = 'version_list__action__content_edit'; private const ITEM_RESTORE_VERSION = 'version_list__action__restore_version'; @@ -57,12 +57,11 @@ public function testThrowsInvalidArgumentException(): void } /** - * @dataProvider provideDataForTestBuildVersionListActionMenu - * * @param array $options * @param array $extras * @param array $attributes */ + #[DataProvider('provideDataForTestBuildVersionListActionMenu')] public function testBuildVersionListActionMenu( array $options, string $itemName, @@ -93,9 +92,9 @@ public function testBuildVersionListActionMenu( * array, * }> */ - public function provideDataForTestBuildVersionListActionMenu(): iterable + public static function provideDataForTestBuildVersionListActionMenu(): iterable { - $versionInfo = $this->createVersionInfo(); + $versionInfo = self::createVersionInfo(); yield 'Edit draft action item' => [ ['versionInfo' => $versionInfo], @@ -143,7 +142,7 @@ public function provideDataForTestBuildVersionListActionMenu(): iterable ]; yield 'Restore version action item' => [ - ['versionInfo' => $this->createVersionInfo(ApiVersionInfo::STATUS_ARCHIVED)], + ['versionInfo' => self::createVersionInfo(ApiVersionInfo::STATUS_ARCHIVED)], self::ITEM_RESTORE_VERSION, null, self::RESTORE_ACTION_ITEM_EXTRAS, @@ -159,7 +158,7 @@ public function provideDataForTestBuildVersionListActionMenu(): iterable public function testAddUserUpdateItemAction(): void { $versionInfo = $this->createVersionInfo(); - $user = $this->createMock(Content::class); + $user = self::createStub(Content::class); $this->mockUrlGeneratorGenerate(); $this->mockContentServiceLoadContentByVersionInfo($versionInfo, $user); diff --git a/tests/lib/Menu/MainMenuBuilderTest.php b/tests/lib/Menu/MainMenuBuilderTest.php index 272f5a1a3b..a2bef440c9 100644 --- a/tests/lib/Menu/MainMenuBuilderTest.php +++ b/tests/lib/Menu/MainMenuBuilderTest.php @@ -19,6 +19,7 @@ use Knp\Menu\FactoryInterface; use Knp\Menu\MenuItem; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Test\TestBrowserToken; use Symfony\Component\EventDispatcher\EventDispatcherInterface; @@ -28,7 +29,7 @@ final class MainMenuBuilderTest extends TestCase { private MenuItemFactoryInterface&MockObject $factory; - private EventDispatcherInterface&MockObject $eventDispatcher; + private EventDispatcherInterface&Stub $eventDispatcher; private ConfigResolverInterface&MockObject $configResolver; @@ -144,13 +145,13 @@ protected function setUp(): void $this->factory = $this->createMock(MenuItemFactoryInterface::class); $this->factory->method('createItem')->willReturnMap($itemMap); - $this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); + $this->eventDispatcher = self::createStub(EventDispatcherInterface::class); $this->configResolver = $this->createMock(ConfigResolverInterface::class); $this->configResolver->method('getParameter')->willReturnMap($parameterMap); $this->permissionResolver = $this->createMock(PermissionResolver::class); $this->tokenStorage = $this->createMock(TokenStorageInterface::class); - $token = new TestBrowserToken([], $this->createMock(UserInterface::class)); + $token = new TestBrowserToken([], self::createStub(UserInterface::class)); $this->tokenStorage->method('getToken')->willReturn($token); $userSetting = $this->createMock(UserSetting::class); diff --git a/tests/lib/Pagination/Pagerfanta/TrashItemAdapterTest.php b/tests/lib/Pagination/Pagerfanta/TrashItemAdapterTest.php index 0d860a62b1..a9f3ec992d 100644 --- a/tests/lib/Pagination/Pagerfanta/TrashItemAdapterTest.php +++ b/tests/lib/Pagination/Pagerfanta/TrashItemAdapterTest.php @@ -104,7 +104,7 @@ private function createMockedQuery(): Query { $query = new Query(); $query->query = $this->createMock(CriterionInterface::class); - $query->sortClauses = [$this->createMock(SortClause::class)]; + $query->sortClauses = [self::createStub(SortClause::class)]; return $query; } diff --git a/tests/lib/Pagination/Pagerfanta/URLSearchAdapterTest.php b/tests/lib/Pagination/Pagerfanta/URLSearchAdapterTest.php index 25bb66f3c6..58980b5723 100644 --- a/tests/lib/Pagination/Pagerfanta/URLSearchAdapterTest.php +++ b/tests/lib/Pagination/Pagerfanta/URLSearchAdapterTest.php @@ -60,9 +60,9 @@ public function testGetSlice(): void $searchResults = new SearchResult([ 'items' => [ - $this->createMock(URL::class), - $this->createMock(URL::class), - $this->createMock(URL::class), + self::createStub(URL::class), + self::createStub(URL::class), + self::createStub(URL::class), ], 'totalCount' => 13, ]); diff --git a/tests/lib/Pagination/Pagerfanta/URLUsagesAdapterTest.php b/tests/lib/Pagination/Pagerfanta/URLUsagesAdapterTest.php index e3542151e3..3495dd6259 100644 --- a/tests/lib/Pagination/Pagerfanta/URLUsagesAdapterTest.php +++ b/tests/lib/Pagination/Pagerfanta/URLUsagesAdapterTest.php @@ -26,7 +26,7 @@ protected function setUp(): void public function testGetNbResults(): void { - $url = $this->createMock(URL::class); + $url = self::createStub(URL::class); $searchResults = new UsageSearchResult([ 'items' => [], @@ -49,15 +49,15 @@ public function testGetNbResults(): void public function testGetSlice(): void { - $url = $this->createMock(URL::class); + $url = self::createStub(URL::class); $offset = 10; $limit = 25; $searchResults = new UsageSearchResult([ 'items' => [ - $this->createMock(SearchHit::class), - $this->createMock(SearchHit::class), - $this->createMock(SearchHit::class), + self::createStub(SearchHit::class), + self::createStub(SearchHit::class), + self::createStub(SearchHit::class), ], 'totalCount' => 13, ]); diff --git a/tests/lib/Permission/LimitationResolverTest.php b/tests/lib/Permission/LimitationResolverTest.php index 084046f6d1..bd0f4ca0cc 100644 --- a/tests/lib/Permission/LimitationResolverTest.php +++ b/tests/lib/Permission/LimitationResolverTest.php @@ -24,11 +24,11 @@ use Ibexa\Contracts\Core\Repository\Values\User\LookupLimitationResult; use Ibexa\Contracts\Core\Repository\Values\User\LookupPolicyLimitations; use Ibexa\Contracts\Core\Repository\Values\User\Policy; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; -/** - * @covers \Ibexa\AdminUi\Permission\LimitationResolver - */ +#[CoversClass(LimitationResolver::class)] final class LimitationResolverTest extends TestCase { /** @var \Ibexa\Contracts\Core\Repository\PermissionResolver&\PHPUnit\Framework\MockObject\MockObject */ @@ -41,18 +41,16 @@ protected function setUp(): void $this->permissionResolver = $this->createMock(PermissionResolver::class); $this->limitationResolver = new LimitationResolver( - $this->createMock(ContentService::class), - $this->createMock(ContentTypeService::class), - $this->createMock(LanguageService::class), - $this->createMock(LocationService::class), + self::createStub(ContentService::class), + self::createStub(ContentTypeService::class), + self::createStub(LanguageService::class), + self::createStub(LocationService::class), new LookupLimitationsTransformer(), $this->permissionResolver ); } /** - * @dataProvider provideDataForTestGetLanguageLimitations - * * @param array $expected * @param iterable<\Ibexa\Contracts\Core\Repository\Values\Content\Language> $languages */ + #[DataProvider('provideDataForTestGetLanguageLimitations')] public function testGetLanguageLimitations( array $expected, ContentInfo $contentInfo, @@ -96,13 +95,13 @@ public function testGetLanguageLimitations( * iterable<\Ibexa\Contracts\Core\Repository\Values\Content\Language> * }> */ - public function provideDataForTestGetLanguageLimitations(): iterable + public static function provideDataForTestGetLanguageLimitations(): iterable { - $english = $this->createLanguage(1, true, 'eng-GB', 'English'); - $german = $this->createLanguage(2, true, 'ger-DE', 'German'); - $french = $this->createLanguage(3, false, 'fra-FR', 'French'); - $contentInfo = $this->createContentInfo(); - $location = $this->createLocation(); + $english = self::createLanguage(1, true, 'eng-GB', 'English'); + $german = self::createLanguage(2, true, 'ger-DE', 'German'); + $french = self::createLanguage(3, false, 'fra-FR', 'French'); + $contentInfo = self::createContentInfo(); + $location = self::createLocation(); $languages = [ $english, $german, @@ -111,9 +110,9 @@ public function provideDataForTestGetLanguageLimitations(): iterable yield 'No access to all languages' => [ [ - $this->getLanguageAccessData(false, $english), - $this->getLanguageAccessData(false, $german), - $this->getLanguageAccessData(false, $french), + self::getLanguageAccessData(false, $english), + self::getLanguageAccessData(false, $german), + self::getLanguageAccessData(false, $french), ], $contentInfo, $location, @@ -123,9 +122,9 @@ public function provideDataForTestGetLanguageLimitations(): iterable yield 'Access to all enabled languages' => [ [ - $this->getLanguageAccessData(true, $english), - $this->getLanguageAccessData(true, $german), - $this->getLanguageAccessData(false, $french), + self::getLanguageAccessData(true, $english), + self::getLanguageAccessData(true, $german), + self::getLanguageAccessData(false, $french), ], $contentInfo, $location, @@ -135,9 +134,9 @@ public function provideDataForTestGetLanguageLimitations(): iterable yield 'Limited access to English language by policy limitation' => [ [ - $this->getLanguageAccessData(true, $english), - $this->getLanguageAccessData(false, $german), - $this->getLanguageAccessData(false, $french), + self::getLanguageAccessData(true, $english), + self::getLanguageAccessData(false, $german), + self::getLanguageAccessData(false, $french), ], $contentInfo, $location, @@ -146,9 +145,9 @@ public function provideDataForTestGetLanguageLimitations(): iterable [], [ new LookupPolicyLimitations( - $this->createMock(Policy::class), + self::createStub(Policy::class), [ - $this->createLanguageLimitation(['eng-GB']), + self::createLanguageLimitation(['eng-GB']), ] ), ] @@ -158,16 +157,16 @@ public function provideDataForTestGetLanguageLimitations(): iterable yield 'Limited access to German language by role limitation' => [ [ - $this->getLanguageAccessData(false, $english), - $this->getLanguageAccessData(true, $german), - $this->getLanguageAccessData(false, $french), + self::getLanguageAccessData(false, $english), + self::getLanguageAccessData(true, $german), + self::getLanguageAccessData(false, $french), ], $contentInfo, $location, new LookupLimitationResult( true, [ - $this->createLanguageLimitation(['ger-DE']), + self::createLanguageLimitation(['ger-DE']), ], ), $languages, @@ -175,22 +174,22 @@ public function provideDataForTestGetLanguageLimitations(): iterable yield 'Limited access to English and German languages by role and policy limitations' => [ [ - $this->getLanguageAccessData(true, $english), - $this->getLanguageAccessData(true, $german), - $this->getLanguageAccessData(false, $french), + self::getLanguageAccessData(true, $english), + self::getLanguageAccessData(true, $german), + self::getLanguageAccessData(false, $french), ], $contentInfo, $location, new LookupLimitationResult( true, [ - $this->createLanguageLimitation(['eng-GB', 'fra-FR']), + self::createLanguageLimitation(['eng-GB', 'fra-FR']), ], [ new LookupPolicyLimitations( - $this->createMock(Policy::class), + self::createStub(Policy::class), [ - $this->createLanguageLimitation(['ger-DE', 'fra-FR']), + self::createLanguageLimitation(['ger-DE', 'fra-FR']), ] ), ] @@ -199,17 +198,17 @@ public function provideDataForTestGetLanguageLimitations(): iterable ]; } - private function createContentInfo(): ContentInfo + private static function createContentInfo(): ContentInfo { - return $this->createMock(ContentInfo::class); + return self::createStub(ContentInfo::class); } - private function createLocation(): Location + private static function createLocation(): Location { - return $this->createMock(Location::class); + return self::createStub(Location::class); } - private function createLanguage( + private static function createLanguage( int $id, bool $enabled, string $languageCode, @@ -232,7 +231,7 @@ private function createLanguage( * hasAccess: bool, * } */ - private function getLanguageAccessData( + private static function getLanguageAccessData( bool $hasAccess, Language $language ): array { @@ -246,7 +245,7 @@ private function getLanguageAccessData( /** * @param array $limitationValues */ - private function createLanguageLimitation(array $limitationValues): Limitation\LanguageLimitation + private static function createLanguageLimitation(array $limitationValues): Limitation\LanguageLimitation { return new Limitation\LanguageLimitation( [ diff --git a/tests/lib/Permission/PermissionCheckerTest.php b/tests/lib/Permission/PermissionCheckerTest.php index 0c7bc093fe..bf141607aa 100644 --- a/tests/lib/Permission/PermissionCheckerTest.php +++ b/tests/lib/Permission/PermissionCheckerTest.php @@ -17,7 +17,9 @@ use Ibexa\Core\Repository\Values\Content as CoreContent; use Ibexa\Core\Repository\Values\User\Policy; use Ibexa\Core\Repository\Values\User\User as CoreUser; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; final class PermissionCheckerTest extends TestCase @@ -26,7 +28,7 @@ final class PermissionCheckerTest extends TestCase private PermissionResolver&MockObject $permissionResolver; - private UserService&MockObject $userService; + private UserService&Stub $userService; private PermissionChecker $permissionChecker; @@ -37,7 +39,7 @@ public function setUp(): void ->method('getCurrentUserReference') ->willReturn($this->generateUser(self::USER_ID)); - $this->userService = $this->createMock(UserService::class); + $this->userService = self::createStub(UserService::class); $this->permissionChecker = new PermissionChecker( $this->permissionResolver, @@ -48,9 +50,8 @@ public function setUp(): void /** * @param array $hasAccess * @param array $expectedRestrictions - * - * @dataProvider restrictionsProvider */ + #[DataProvider('restrictionsProvider')] public function testGetRestrictions(array $hasAccess, string $class, array $expectedRestrictions): void { $actual = $this->permissionChecker->getRestrictions($hasAccess, $class); @@ -61,7 +62,7 @@ public function testGetRestrictions(array $hasAccess, string $class, array $expe /** * @return array, 1: string, 2: array}> */ - public function restrictionsProvider(): array + public static function restrictionsProvider(): array { return [ 'noPoliciesAndNoRoleLimitation' => [ diff --git a/tests/lib/PreviewUrlResolver/VersionPreviewUrlResolverTest.php b/tests/lib/PreviewUrlResolver/VersionPreviewUrlResolverTest.php index d3c1932b14..ad1615f94a 100644 --- a/tests/lib/PreviewUrlResolver/VersionPreviewUrlResolverTest.php +++ b/tests/lib/PreviewUrlResolver/VersionPreviewUrlResolverTest.php @@ -16,12 +16,11 @@ use Ibexa\Contracts\Core\Repository\Values\Content\Location; use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo; use Ibexa\Core\MVC\Symfony\SiteAccess; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; -/** - * @covers \Ibexa\AdminUi\PreviewUrlResolver\VersionPreviewUrlResolver - */ +#[CoversClass(VersionPreviewUrlResolver::class)] final class VersionPreviewUrlResolverTest extends TestCase { private const EXAMPLE_PREVIEW_URL = 'https://example.org/preview/url'; @@ -30,10 +29,10 @@ final class VersionPreviewUrlResolverTest extends TestCase public function testResolvesPreviewUrlSuccessfully(): void { - $versionInfo = $this->createMock(VersionInfo::class); - $location = $this->createMock(Location::class); - $language = $this->createMock(Language::class); - $siteAccess = $this->createMock(SiteAccess::class); + $versionInfo = self::createStub(VersionInfo::class); + $location = self::createStub(Location::class); + $language = self::createStub(Language::class); + $siteAccess = self::createStub(SiteAccess::class); $event = new ResolveVersionPreviewUrlEvent( $versionInfo, @@ -61,9 +60,9 @@ public function testResolvesPreviewUrlSuccessfully(): void public function testThrowsExceptionWhenPreviewUrlIsNotResolved(): void { $versionInfo = $this->createMock(VersionInfo::class); - $location = $this->createMock(Location::class); - $language = $this->createMock(Language::class); - $siteAccess = $this->createMock(SiteAccess::class); + $location = self::createStub(Location::class); + $language = self::createStub(Language::class); + $siteAccess = self::createStub(SiteAccess::class); $contentInfo = $this->createMock(ContentInfo::class); $contentInfo->method('getId')->willReturn(self::EXAMPLE_CONTENT_ID); diff --git a/tests/lib/REST/Input/ContentType/FieldDefinitionCreateTest.php b/tests/lib/REST/Input/ContentType/FieldDefinitionCreateTest.php index 1807323050..9eaf5c23ab 100644 --- a/tests/lib/REST/Input/ContentType/FieldDefinitionCreateTest.php +++ b/tests/lib/REST/Input/ContentType/FieldDefinitionCreateTest.php @@ -32,7 +32,7 @@ public function testValidInput(): void [ 'fieldTypeIdentifier' => 'ibexa_string', ], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ) ); @@ -44,7 +44,7 @@ public function testValidInput(): void 'fieldGroupIdentifier' => 'foo_identifier', 'position' => 10, ], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ) ); } @@ -56,7 +56,7 @@ public function testInvalidInput(): void $this->parser->parse( [], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ); } } diff --git a/tests/lib/REST/Input/ContentType/FieldDefinitionDeleteTest.php b/tests/lib/REST/Input/ContentType/FieldDefinitionDeleteTest.php index 2e187bf315..b9adb9e7b6 100644 --- a/tests/lib/REST/Input/ContentType/FieldDefinitionDeleteTest.php +++ b/tests/lib/REST/Input/ContentType/FieldDefinitionDeleteTest.php @@ -32,7 +32,7 @@ public function testValidInput(): void [ 'fieldDefinitionIdentifiers' => ['foo', 'bar', 'baz'], ], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ) ); } @@ -44,7 +44,7 @@ public function testInvalidInput(): void $this->parser->parse( [], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ); } } diff --git a/tests/lib/REST/Input/ContentType/FieldDefinitionReorderTest.php b/tests/lib/REST/Input/ContentType/FieldDefinitionReorderTest.php index 1fb0b9223d..2ac8c41d56 100644 --- a/tests/lib/REST/Input/ContentType/FieldDefinitionReorderTest.php +++ b/tests/lib/REST/Input/ContentType/FieldDefinitionReorderTest.php @@ -32,7 +32,7 @@ public function testValidInput(): void [ 'fieldDefinitionIdentifiers' => ['foo', 'bar', 'baz'], ], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ) ); } @@ -44,7 +44,7 @@ public function testInvalidInput(): void $this->parser->parse( [], - $this->createMock(ParsingDispatcher::class) + self::createStub(ParsingDispatcher::class) ); } } diff --git a/tests/lib/REST/Security/NonAdminRESTRequestMatcherTest.php b/tests/lib/REST/Security/NonAdminRESTRequestMatcherTest.php index 8966568d3c..cdc03a6f80 100644 --- a/tests/lib/REST/Security/NonAdminRESTRequestMatcherTest.php +++ b/tests/lib/REST/Security/NonAdminRESTRequestMatcherTest.php @@ -18,7 +18,7 @@ class NonAdminRESTRequestMatcherTest extends TestCase { public function testMatchRESTRequestInAdminContext(): void { - $siteAccessMock = $this->createMock(SiteAccess::class); + $siteAccessMock = self::createStub(SiteAccess::class); $siteAccessMock->name = 'admin'; $adminRESTRequestMatcher = new NonAdminRESTRequestMatcher( [ @@ -28,7 +28,7 @@ public function testMatchRESTRequestInAdminContext(): void ] ); - $request = $this->createMock(Request::class); + $request = self::createStub(Request::class); $request->attributes = $this->createMock(ParameterBag::class); $request->attributes @@ -51,7 +51,7 @@ public function testMatchNonRESTRequest(): void { $adminRESTRequestMatcher = new NonAdminRESTRequestMatcher([]); - $request = $this->createMock(Request::class); + $request = self::createStub(Request::class); $request->attributes = $this->createMock(ParameterBag::class); $request->attributes @@ -65,9 +65,9 @@ public function testMatchNonRESTRequest(): void public function testMatchRESTRequestNotInAdminContext(): void { - $siteAccessMock = $this->createMock(SiteAccess::class); + $siteAccessMock = self::createStub(SiteAccess::class); $siteAccessMock->name = 'admin'; - $nonAdminSiteAccessMock = $this->createMock(SiteAccess::class); + $nonAdminSiteAccessMock = self::createStub(SiteAccess::class); $nonAdminSiteAccessMock->name = 'ibexa'; $adminRESTRequestMatcher = new NonAdminRESTRequestMatcher( [ @@ -80,7 +80,7 @@ public function testMatchRESTRequestNotInAdminContext(): void ] ); - $request = $this->createMock(Request::class); + $request = self::createStub(Request::class); $request->attributes = $this->createMock(ParameterBag::class); $request->attributes diff --git a/tests/lib/Resolver/IconPathResolverTest.php b/tests/lib/Resolver/IconPathResolverTest.php index bf4b4bade9..a600b58a3f 100644 --- a/tests/lib/Resolver/IconPathResolverTest.php +++ b/tests/lib/Resolver/IconPathResolverTest.php @@ -10,6 +10,7 @@ use Ibexa\AdminUi\Resolver\IconPathResolver; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Asset\Packages; @@ -28,9 +29,7 @@ public function setUp(): void $this->packages = $this->getPackagesMock($config); } - /** - * @dataProvider resolveDataProvider - */ + #[DataProvider('resolveDataProvider')] public function testResolve(string $icon, ?string $set, string $expectedPath): void { $iconPathResolver = new IconPathResolver($this->configResolver, $this->packages); @@ -41,7 +40,7 @@ public function testResolve(string $icon, ?string $set, string $expectedPath): v /** * @return array */ - public function resolveDataProvider(): array + public static function resolveDataProvider(): array { return [ [ diff --git a/tests/lib/Siteaccess/AdminSiteaccessPreviewVoterTest.php b/tests/lib/Siteaccess/AdminSiteaccessPreviewVoterTest.php index 8a6c767f52..62df22c163 100644 --- a/tests/lib/Siteaccess/AdminSiteaccessPreviewVoterTest.php +++ b/tests/lib/Siteaccess/AdminSiteaccessPreviewVoterTest.php @@ -15,6 +15,7 @@ use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; use Ibexa\Core\Repository\Values\Content\Location; use Ibexa\Core\Repository\Values\Content\VersionInfo; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use RuntimeException; @@ -56,9 +57,7 @@ public function testVoteWithInvalidPath(): void self::assertFalse($this->adminSiteaccessPreviewVoter->vote($context)); } - /** - * @dataProvider dataProviderForSiteaccessPreviewVoterContext - */ + #[DataProvider('dataProviderForSiteaccessPreviewVoterContext')] public function testVoteWithInvalidLanguageMatch(SiteaccessPreviewVoterContext $context): void { $this->mockConfigMethods($context, 5, null, ['ger-DE']); @@ -76,9 +75,7 @@ public function testVoteWithInvalidLanguageMatch(SiteaccessPreviewVoterContext $ self::assertFalse($this->adminSiteaccessPreviewVoter->vote($context)); } - /** - * @dataProvider dataProviderForSiteaccessPreviewVoterContext - */ + #[DataProvider('dataProviderForSiteaccessPreviewVoterContext')] public function testVoteWithInvalidRepositoryMatch(SiteaccessPreviewVoterContext $context): void { $this->mockConfigMethods($context, 4); @@ -96,9 +93,7 @@ public function testVoteWithInvalidRepositoryMatch(SiteaccessPreviewVoterContext self::assertFalse($this->adminSiteaccessPreviewVoter->vote($context)); } - /** - * @dataProvider dataProviderForSiteaccessPreviewVoterContext - */ + #[DataProvider('dataProviderForSiteaccessPreviewVoterContext')] public function testVoteWithValidRepositoryAndLanguageMatch(SiteaccessPreviewVoterContext $context): void { $this->mockConfigMethods($context, 5, null, ['eng-GB', 'fre-FR']); @@ -152,7 +147,7 @@ private function mockConfigMethods( /** * @return array */ - public function dataProviderForSiteaccessPreviewVoterContext(): array + public static function dataProviderForSiteaccessPreviewVoterContext(): array { $languageCode = self::LANGUAGE_CODE; $location = new Location(['id' => 123456, 'path' => [1, 2]]); diff --git a/tests/lib/Specification/ContentType/ContentTypeIsUserTest.php b/tests/lib/Specification/ContentType/ContentTypeIsUserTest.php index 851c17815b..d9da39f56e 100644 --- a/tests/lib/Specification/ContentType/ContentTypeIsUserTest.php +++ b/tests/lib/Specification/ContentType/ContentTypeIsUserTest.php @@ -12,13 +12,12 @@ use Ibexa\AdminUi\Specification\ContentType\ContentTypeIsUser; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType as APIContentType; use Ibexa\Core\Repository\Values\ContentType\ContentType; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; +#[CoversClass(ContentTypeIsUser::class)] final class ContentTypeIsUserTest extends TestCase { - /** - * @covers \Ibexa\AdminUi\Specification\ContentType\ContentTypeIsUser::isSatisfiedBy - */ public function testIsSatisfiedByInvalidArgument(): void { $this->expectException(InvalidArgumentException::class); @@ -28,9 +27,6 @@ public function testIsSatisfiedByInvalidArgument(): void $specification->isSatisfiedBy(new \stdClass()); } - /** - * @covers \Ibexa\AdminUi\Specification\ContentType\ContentTypeIsUser::isSatisfiedBy - */ public function testIsSatisfiedByCustomUserContentType(): void { $customUserContentType = 'custom_user_content_type'; @@ -44,9 +40,6 @@ public function testIsSatisfiedByCustomUserContentType(): void ); } - /** - * @covers \Ibexa\AdminUi\Specification\ContentType\ContentTypeIsUser::isSatisfiedBy - */ public function testIsSatisfiedByContentTypeWithIbexaUserField(): void { $specification = new ContentTypeIsUser([]); @@ -59,9 +52,6 @@ public function testIsSatisfiedByContentTypeWithIbexaUserField(): void self::assertTrue($specification->isSatisfiedBy($contentTypeWithEzUserField)); } - /** - * @covers \Ibexa\AdminUi\Specification\ContentType\ContentTypeIsUser::isSatisfiedBy - */ public function testIsSatisfiedByReturnFalse(): void { $specification = new ContentTypeIsUser([ diff --git a/tests/lib/Specification/Location/IsContentStructureRootTest.php b/tests/lib/Specification/Location/IsContentStructureRootTest.php index 881e7556f8..0af4916b16 100644 --- a/tests/lib/Specification/Location/IsContentStructureRootTest.php +++ b/tests/lib/Specification/Location/IsContentStructureRootTest.php @@ -11,13 +11,12 @@ use Ibexa\AdminUi\Specification\Location\IsContentStructureRoot; use Ibexa\Contracts\Core\Repository\Values\Content\Location; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; +#[CoversClass(IsContentStructureRoot::class)] final class IsContentStructureRootTest extends TestCase { - /** - * @covers \Ibexa\AdminUi\Specification\Location\IsContentStructureRoot::isSatisfiedBy - */ public function testReturnsTrueWhenLocationDepthMatchesRoot(): void { $id = 1; @@ -31,9 +30,6 @@ public function testReturnsTrueWhenLocationDepthMatchesRoot(): void ); } - /** - * @covers \Ibexa\AdminUi\Specification\Location\IsContentStructureRoot::isSatisfiedBy - */ public function testReturnsFalseWhenLocationDepthDoesNotMatchRoot(): void { $specification = new IsContentStructureRoot( diff --git a/tests/lib/Specification/Location/IsInContextualTreeRootIdsTest.php b/tests/lib/Specification/Location/IsInContextualTreeRootIdsTest.php index cdbb985bd9..ea3949ca93 100644 --- a/tests/lib/Specification/Location/IsInContextualTreeRootIdsTest.php +++ b/tests/lib/Specification/Location/IsInContextualTreeRootIdsTest.php @@ -11,15 +11,14 @@ use Ibexa\AdminUi\Specification\Location\IsInContextualTreeRootIds; use Ibexa\Contracts\Core\Repository\Values\Content\Location; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; +#[CoversClass(IsInContextualTreeRootIds::class)] final class IsInContextualTreeRootIdsTest extends TestCase { private const CONTEXTUAL_ROOT_IDS = [2, 5, 43, 55, 56, 67]; - /** - * @covers \Ibexa\AdminUi\Specification\Location\IsInContextualTreeRootIds::isSatisfiedBy - */ public function testReturnsTrueWhenLocationIdIsInContextualRootList(): void { $specification = new IsInContextualTreeRootIds( @@ -31,9 +30,6 @@ public function testReturnsTrueWhenLocationIdIsInContextualRootList(): void ); } - /** - * @covers \Ibexa\AdminUi\Specification\Location\IsInContextualTreeRootIds::isSatisfiedBy - */ public function testReturnsFalseWhenLocationIdIsNotInContextualRootList(): void { $specification = new IsInContextualTreeRootIds( diff --git a/tests/lib/Specification/Location/IsRootTest.php b/tests/lib/Specification/Location/IsRootTest.php index 06cb86966a..8015fcdc16 100644 --- a/tests/lib/Specification/Location/IsRootTest.php +++ b/tests/lib/Specification/Location/IsRootTest.php @@ -10,13 +10,12 @@ use Ibexa\AdminUi\Specification\Location\IsRoot; use Ibexa\Contracts\Core\Repository\Values\Content\Location; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; +#[CoversClass(IsRoot::class)] final class IsRootTest extends TestCase { - /** - * @covers \Ibexa\AdminUi\Specification\Location\IsRoot::isSatisfiedBy - */ public function testReturnsTrueWhenLocationDepthIsOne(): void { $specification = new IsRoot(); @@ -26,9 +25,6 @@ public function testReturnsTrueWhenLocationDepthIsOne(): void self::assertTrue($specification->isSatisfiedBy($location)); } - /** - * @covers \Ibexa\AdminUi\Specification\Location\IsRoot::isSatisfiedBy - */ public function testReturnsFalseWhenLocationDepthIsNotOne(): void { $specification = new IsRoot(); diff --git a/tests/lib/Specification/UserMode/IsFocusModeEnabledTest.php b/tests/lib/Specification/UserMode/IsFocusModeEnabledTest.php index 51db0876e8..271b61b49f 100644 --- a/tests/lib/Specification/UserMode/IsFocusModeEnabledTest.php +++ b/tests/lib/Specification/UserMode/IsFocusModeEnabledTest.php @@ -12,13 +12,12 @@ use Ibexa\AdminUi\UserSetting\FocusMode; use Ibexa\User\UserSetting\UserSetting; use Ibexa\User\UserSetting\UserSettingService; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class IsFocusModeEnabledTest extends TestCase { - /** - * @dataProvider dataProviderForTestIsSatisfiedBy - */ + #[DataProvider('dataProviderForTestIsSatisfiedBy')] public function testIsSatisfiedBy(string $userMode, string $value, bool $expectedResult): void { self::assertEquals( @@ -27,9 +26,7 @@ public function testIsSatisfiedBy(string $userMode, string $value, bool $expecte ); } - /** - * @dataProvider dataProviderForTestIsSatisfiedBy - */ + #[DataProvider('dataProviderForTestIsSatisfiedBy')] public function testFromUserSetting(string $userMode, string $value, bool $expectedResult): void { $userSetting = $this->createMock(UserSetting::class); @@ -52,7 +49,7 @@ public function testFromUserSetting(string $userMode, string $value, bool $expec /** * @return iterable */ - public function dataProviderForTestIsSatisfiedBy(): iterable + public static function dataProviderForTestIsSatisfiedBy(): iterable { yield [FocusMode::FOCUS_MODE_ON, FocusMode::FOCUS_MODE_ON, true]; yield [FocusMode::FOCUS_MODE_ON, FocusMode::FOCUS_MODE_OFF, false]; diff --git a/tests/lib/Specification/UserProfile/IsProfileAvailableTest.php b/tests/lib/Specification/UserProfile/IsProfileAvailableTest.php index a243278923..a329b03015 100644 --- a/tests/lib/Specification/UserProfile/IsProfileAvailableTest.php +++ b/tests/lib/Specification/UserProfile/IsProfileAvailableTest.php @@ -12,13 +12,12 @@ use Ibexa\AdminUi\UserProfile\UserProfileConfigurationInterface; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; use Ibexa\Contracts\Core\Repository\Values\User\User; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class IsProfileAvailableTest extends TestCase { - /** - * @dataProvider dataProviderForIsSatisfiedBy - */ + #[DataProvider('dataProviderForIsSatisfiedBy')] public function testIsSatisfiedBy( UserProfileConfigurationInterface $configuration, User $value, @@ -33,23 +32,23 @@ public function testIsSatisfiedBy( /** * @return iterable */ - public function dataProviderForIsSatisfiedBy(): iterable + public static function dataProviderForIsSatisfiedBy(): iterable { yield 'disabled' => [ - $this->createConfiguration(false, ['editor']), - $this->createUser('editor'), + self::createConfiguration(false, ['editor']), + self::createUser('editor'), false, ]; yield 'invalid content type' => [ - $this->createConfiguration(true, ['editor']), - $this->createUser('user'), + self::createConfiguration(true, ['editor']), + self::createUser('user'), false, ]; yield 'available' => [ - $this->createConfiguration(true, ['editor']), - $this->createUser('editor'), + self::createConfiguration(true, ['editor']), + self::createUser('editor'), true, ]; } @@ -57,21 +56,21 @@ public function dataProviderForIsSatisfiedBy(): iterable /** * @param string[] $contentTypes */ - private function createConfiguration(bool $enabled, array $contentTypes): UserProfileConfigurationInterface + private static function createConfiguration(bool $enabled, array $contentTypes): UserProfileConfigurationInterface { - $configuration = $this->createMock(UserProfileConfigurationInterface::class); + $configuration = self::createStub(UserProfileConfigurationInterface::class); $configuration->method('isEnabled')->willReturn($enabled); $configuration->method('getContentTypes')->willReturn($contentTypes); return $configuration; } - private function createUser(string $contentTypeIdentifier): User + private static function createUser(string $contentTypeIdentifier): User { - $contentType = $this->createMock(ContentType::class); + $contentType = self::createStub(ContentType::class); $contentType->method('getIdentifier')->willReturn($contentTypeIdentifier); - $user = $this->createMock(User::class); + $user = self::createStub(User::class); $user->method('getContentType')->willReturn($contentType); return $user; diff --git a/tests/lib/Specification/VersionHasConflictTest.php b/tests/lib/Specification/VersionHasConflictTest.php index e442bb659f..892abedc9d 100644 --- a/tests/lib/Specification/VersionHasConflictTest.php +++ b/tests/lib/Specification/VersionHasConflictTest.php @@ -75,8 +75,6 @@ public function testVersionWithStatusDraftAndVersionConflictWithAnotherLanguageC private function createVersionInfo(bool $isPublished = false, int $versionNo = 1, string $languageCode = 'eng-GB'): MockObject&VersionInfo { - $contentInfo = $this->createMock(ContentInfo::class); - $versionInfo = $this->getMockForAbstractClass( VersionInfo::class, [], @@ -102,7 +100,7 @@ private function createVersionInfo(bool $isPublished = false, int $versionNo = 1 $versionInfo ->method('getContentInfo') - ->willReturn($contentInfo); + ->willReturn(self::createStub(ContentInfo::class)); return $versionInfo; } diff --git a/tests/lib/Strategy/FocusMode/ContentStructureRedirectStrategyTest.php b/tests/lib/Strategy/FocusMode/ContentStructureRedirectStrategyTest.php index 454cc254ba..a0f9d6e43d 100644 --- a/tests/lib/Strategy/FocusMode/ContentStructureRedirectStrategyTest.php +++ b/tests/lib/Strategy/FocusMode/ContentStructureRedirectStrategyTest.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\ContentInfo; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; use Ibexa\Core\Repository\Values\Content\Location; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Routing\RouterInterface; @@ -31,10 +32,9 @@ protected function setUp(): void } /** - * @dataProvider dataProviderForTestSupports - * * @param array $pathData */ + #[DataProvider('dataProviderForTestSupports')] public function testSupports(array $pathData, bool $doesSupport): void { self::assertSame($doesSupport, $this->strategy->supports($pathData)); @@ -43,7 +43,7 @@ public function testSupports(array $pathData, bool $doesSupport): void /** * @return iterable, bool}> */ - public function dataProviderForTestSupports(): iterable + public static function dataProviderForTestSupports(): iterable { yield 'foo.path' => [['_route' => 'foo.path'], false]; @@ -58,9 +58,7 @@ public function dataProviderForTestSupports(): iterable yield 'ibexa.content_type_group.view' => [['_route' => 'ibexa.content_type_group.view'], true]; } - /** - * @dataProvider dataProviderForTestGenerateRedirectPath - */ + #[DataProvider('dataProviderForTestGenerateRedirectPath')] public function testGenerateRedirectPath(string $path, string $expectedPath): void { self::assertSame( @@ -72,7 +70,7 @@ public function testGenerateRedirectPath(string $path, string $expectedPath): vo /** * @return iterable */ - public function dataProviderForTestGenerateRedirectPath(): iterable + public static function dataProviderForTestGenerateRedirectPath(): iterable { yield 'ibexa.section.list' => ['ibexa.section.list', '/admin/view/content/456/full/1/123']; diff --git a/tests/lib/Strategy/FocusMode/OriginalPathRedirectStrategyTest.php b/tests/lib/Strategy/FocusMode/OriginalPathRedirectStrategyTest.php index 2b6e20e4c8..accf6d4174 100644 --- a/tests/lib/Strategy/FocusMode/OriginalPathRedirectStrategyTest.php +++ b/tests/lib/Strategy/FocusMode/OriginalPathRedirectStrategyTest.php @@ -9,6 +9,7 @@ namespace Ibexa\Tests\AdminUi\Strategy\FocusMode; use Ibexa\AdminUi\Strategy\FocusMode\OriginalPathRedirectStrategy; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; final class OriginalPathRedirectStrategyTest extends TestCase @@ -21,10 +22,9 @@ protected function setUp(): void } /** - * @dataProvider dataProviderForTestSupports - * * @param array $pathData */ + #[DataProvider('dataProviderForTestSupports')] public function testSupports(array $pathData, bool $doesSupport): void { self::assertSame($doesSupport, $this->strategy->supports($pathData)); @@ -33,7 +33,7 @@ public function testSupports(array $pathData, bool $doesSupport): void /** * @return iterable, bool}> */ - public function dataProviderForTestSupports(): iterable + public static function dataProviderForTestSupports(): iterable { yield 'foo.path' => [['_route' => 'foo.path'], false]; @@ -42,9 +42,7 @@ public function dataProviderForTestSupports(): iterable yield 'ibexa.content.view' => [['_route' => 'ibexa.content.view'], true]; } - /** - * @dataProvider dataProviderForTestGenerateRedirectPath - */ + #[DataProvider('dataProviderForTestGenerateRedirectPath')] public function testGenerateRedirectPath(string $path, string $expectedPath): void { self::assertSame( @@ -56,7 +54,7 @@ public function testGenerateRedirectPath(string $path, string $expectedPath): vo /** * @return iterable */ - public function dataProviderForTestGenerateRedirectPath(): iterable + public static function dataProviderForTestGenerateRedirectPath(): iterable { yield 'foo.path' => ['foo.path', 'foo.path']; diff --git a/tests/lib/Tab/Dashboard/MyDraftsTabTest.php b/tests/lib/Tab/Dashboard/MyDraftsTabTest.php index 34c45d4926..2b2b242315 100644 --- a/tests/lib/Tab/Dashboard/MyDraftsTabTest.php +++ b/tests/lib/Tab/Dashboard/MyDraftsTabTest.php @@ -14,6 +14,7 @@ use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\PermissionResolver; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; +use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; @@ -21,9 +22,7 @@ use Twig\Environment; use Twig\Loader\ArrayLoader; -/** - * @covers \Ibexa\AdminUi\Tab\Dashboard\MyDraftsTab - */ +#[CoversClass(MyDraftsTab::class)] final class MyDraftsTabTest extends TestCase { public function testRenderView(): void @@ -41,11 +40,11 @@ public function testRenderView(): void $configResolverMock = $this->createMock(ConfigResolverInterface::class); $tab = new MyDraftsTab( $twigStub, - $this->createMock(TranslatorInterface::class), - $this->createMock(ContentService::class), - $this->createMock(ContentTypeService::class), - $this->createMock(PermissionResolver::class), - $this->createMock(DatasetFactory::class), + self::createStub(TranslatorInterface::class), + self::createStub(ContentService::class), + self::createStub(ContentTypeService::class), + self::createStub(PermissionResolver::class), + self::createStub(DatasetFactory::class), $requestStackMock, $configResolverMock ); diff --git a/tests/lib/Tab/LocationView/AbstractTabVisibilityTestCase.php b/tests/lib/Tab/LocationView/AbstractTabVisibilityTestCase.php index 36ace452ee..02b8f05da8 100644 --- a/tests/lib/Tab/LocationView/AbstractTabVisibilityTestCase.php +++ b/tests/lib/Tab/LocationView/AbstractTabVisibilityTestCase.php @@ -12,15 +12,15 @@ use Ibexa\Contracts\AdminUi\Tab\TabInterface; use Ibexa\User\UserSetting\UserSetting; use Ibexa\User\UserSetting\UserSettingService; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; abstract class AbstractTabVisibilityTestCase extends TestCase { /** - * @dataProvider dataProviderForTestTabVisibilityInGivenUserMode - * * @param array $parameters */ + #[DataProvider('dataProviderForTestTabVisibilityInGivenUserMode')] final public function testTabVisibilityInGivenUserMode(string $userMode, array $parameters, bool $expectedResult): void { $userSetting = $this->createMock(UserSetting::class); @@ -37,7 +37,7 @@ final public function testTabVisibilityInGivenUserMode(string $userMode, array $ /** * @return iterable, bool}> */ - abstract public function dataProviderForTestTabVisibilityInGivenUserMode(): iterable; + abstract public static function dataProviderForTestTabVisibilityInGivenUserMode(): iterable; /** * @return \Ibexa\Contracts\AdminUi\Tab\TabInterface&\Ibexa\Contracts\AdminUi\Tab\ConditionalTabInterface diff --git a/tests/lib/Tab/LocationView/AuthorsTabVisibilityTest.php b/tests/lib/Tab/LocationView/AuthorsTabVisibilityTest.php index 529cb81ecf..51a3ef2268 100644 --- a/tests/lib/Tab/LocationView/AuthorsTabVisibilityTest.php +++ b/tests/lib/Tab/LocationView/AuthorsTabVisibilityTest.php @@ -22,14 +22,14 @@ final class AuthorsTabVisibilityTest extends AbstractTabVisibilityTestCase protected function createTabForVisibilityInGivenUserModeTest(UserSettingService $userSettingService): TabInterface { return new AuthorsTab( - $this->createMock(Environment::class), - $this->createMock(TranslatorInterface::class), - $this->createMock(UserService::class), - $this->createMock(EventDispatcherInterface::class) + self::createStub(Environment::class), + self::createStub(TranslatorInterface::class), + self::createStub(UserService::class), + self::createStub(EventDispatcherInterface::class) ); } - public function dataProviderForTestTabVisibilityInGivenUserMode(): iterable + public static function dataProviderForTestTabVisibilityInGivenUserMode(): iterable { yield 'focus mode on' => [FocusMode::FOCUS_MODE_ON, [], true]; yield 'focus mode off' => [FocusMode::FOCUS_MODE_OFF, [], true]; diff --git a/tests/lib/Tab/LocationView/DetailsTabVisibilityTest.php b/tests/lib/Tab/LocationView/DetailsTabVisibilityTest.php index 53fb7ed8e2..6eb7afe2a2 100644 --- a/tests/lib/Tab/LocationView/DetailsTabVisibilityTest.php +++ b/tests/lib/Tab/LocationView/DetailsTabVisibilityTest.php @@ -25,18 +25,18 @@ final class DetailsTabVisibilityTest extends AbstractTabVisibilityTestCase protected function createTabForVisibilityInGivenUserModeTest(UserSettingService $userSettingService): TabInterface { return new DetailsTab( - $this->createMock(Environment::class), - $this->createMock(TranslatorInterface::class), - $this->createMock(SectionService::class), - $this->createMock(DatasetFactory::class), - $this->createMock(FormFactoryInterface::class), - $this->createMock(PermissionResolver::class), + self::createStub(Environment::class), + self::createStub(TranslatorInterface::class), + self::createStub(SectionService::class), + self::createStub(DatasetFactory::class), + self::createStub(FormFactoryInterface::class), + self::createStub(PermissionResolver::class), $userSettingService, - $this->createMock(EventDispatcherInterface::class) + self::createStub(EventDispatcherInterface::class) ); } - public function dataProviderForTestTabVisibilityInGivenUserMode(): iterable + public static function dataProviderForTestTabVisibilityInGivenUserMode(): iterable { yield 'focus mode on' => [FocusMode::FOCUS_MODE_ON, [], false]; yield 'focus mode off' => [FocusMode::FOCUS_MODE_OFF, [], true]; diff --git a/tests/lib/Tab/LocationView/LocationsTabVisibilityTest.php b/tests/lib/Tab/LocationView/LocationsTabVisibilityTest.php index 0397523495..ed277fb530 100644 --- a/tests/lib/Tab/LocationView/LocationsTabVisibilityTest.php +++ b/tests/lib/Tab/LocationView/LocationsTabVisibilityTest.php @@ -29,21 +29,21 @@ final class LocationsTabVisibilityTest extends AbstractTabVisibilityTestCase protected function createTabForVisibilityInGivenUserModeTest(UserSettingService $userSettingService): TabInterface { return new LocationsTab( - $this->createMock(Environment::class), - $this->createMock(TranslatorInterface::class), - $this->createMock(FormFactory::class), - $this->createMock(UrlGeneratorInterface::class), - $this->createMock(PermissionResolver::class), - $this->createMock(EventDispatcherInterface::class), - $this->createMock(SearchService::class), - $this->createMock(RequestStack::class), - new Mapper($this->createMock(ValueFactory::class)), - $this->createMock(ConfigResolverInterface::class), + self::createStub(Environment::class), + self::createStub(TranslatorInterface::class), + self::createStub(FormFactory::class), + self::createStub(UrlGeneratorInterface::class), + self::createStub(PermissionResolver::class), + self::createStub(EventDispatcherInterface::class), + self::createStub(SearchService::class), + self::createStub(RequestStack::class), + new Mapper(self::createStub(ValueFactory::class)), + self::createStub(ConfigResolverInterface::class), $userSettingService ); } - public function dataProviderForTestTabVisibilityInGivenUserMode(): iterable + public static function dataProviderForTestTabVisibilityInGivenUserMode(): iterable { yield 'focus mode on' => [FocusMode::FOCUS_MODE_ON, [], false]; yield 'focus mode off' => [FocusMode::FOCUS_MODE_OFF, [], true]; diff --git a/tests/lib/Tab/LocationView/TranslationsTabTest.php b/tests/lib/Tab/LocationView/TranslationsTabTest.php index 704b371321..3d9cd18b6c 100644 --- a/tests/lib/Tab/LocationView/TranslationsTabTest.php +++ b/tests/lib/Tab/LocationView/TranslationsTabTest.php @@ -19,6 +19,7 @@ use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo; use Ibexa\Contracts\TwigComponents\ComponentInterface; use Ibexa\TwigComponents\Component\Registry as ComponentRegistry; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\EventDispatcher\EventDispatcherInterface; @@ -58,9 +59,7 @@ protected function setUp(): void $this->translationsDataset = $this->createMock(TranslationsDataset::class); } - /** - * @dataProvider provideHasTranslationActions - */ + #[DataProvider('provideHasTranslationActions')] public function testGetTemplateParametersSetsHasTranslationActions( bool $hasComponents, bool $expectedFlag @@ -177,15 +176,15 @@ private function configurePermissions(): void private function createTab(bool $hasComponents): TranslationsTab { $components = $hasComponents - ? ['component-id' => $this->createStub(ComponentInterface::class)] + ? ['component-id' => self::createStub(ComponentInterface::class)] : []; return new TranslationsTab( - $this->createMock(Environment::class), - $this->createMock(TranslatorInterface::class), + self::createStub(Environment::class), + self::createStub(TranslatorInterface::class), $this->datasetFactory, - $this->createMock(UrlGeneratorInterface::class), - $this->createMock(EventDispatcherInterface::class), + self::createStub(UrlGeneratorInterface::class), + self::createStub(EventDispatcherInterface::class), $this->formFactory, $this->permissionResolver, $this->languageService, diff --git a/tests/lib/Tab/LocationView/VersionsTabVisibilityTest.php b/tests/lib/Tab/LocationView/VersionsTabVisibilityTest.php index 60b8825a73..e44c0731b4 100644 --- a/tests/lib/Tab/LocationView/VersionsTabVisibilityTest.php +++ b/tests/lib/Tab/LocationView/VersionsTabVisibilityTest.php @@ -23,18 +23,6 @@ final class VersionsTabVisibilityTest extends AbstractTabVisibilityTestCase { - /** @var \Ibexa\Contracts\Core\Repository\Values\Content\Content&\PHPUnit\Framework\MockObject\MockObject */ - private Content $exampleContent; - - private function getExampleContent(): Content - { - if (!isset($this->exampleContent)) { - $this->exampleContent = $this->createMock(Content::class); - } - - return $this->exampleContent; - } - protected function createTabForVisibilityInGivenUserModeTest(UserSettingService $userSettingService): TabInterface { $permissionResolver = $this->createMock(PermissionResolver::class); @@ -43,33 +31,33 @@ protected function createTabForVisibilityInGivenUserModeTest(UserSettingService ->with( 'content', 'versionread', - $this->getExampleContent() + self::isInstanceOf(Content::class) ) ->willReturn(true); return new VersionsTab( - $this->createMock(Environment::class), - $this->createMock(TranslatorInterface::class), - $this->createMock(DatasetFactory::class), - $this->createMock(FormFactory::class), + self::createStub(Environment::class), + self::createStub(TranslatorInterface::class), + self::createStub(DatasetFactory::class), + self::createStub(FormFactory::class), $permissionResolver, - $this->createMock(UserService::class), + self::createStub(UserService::class), $userSettingService, - $this->createMock(EventDispatcherInterface::class), + self::createStub(EventDispatcherInterface::class), ); } - public function dataProviderForTestTabVisibilityInGivenUserMode(): iterable + public static function dataProviderForTestTabVisibilityInGivenUserMode(): iterable { yield 'focus mode on' => [ FocusMode::FOCUS_MODE_ON, - ['content' => $this->getExampleContent()], + ['content' => self::createStub(Content::class)], false, ]; yield 'focus mode off' => [ FocusMode::FOCUS_MODE_OFF, - ['content' => $this->getExampleContent()], + ['content' => self::createStub(Content::class)], true, ]; } diff --git a/tests/lib/Tab/TabRegistryTest.php b/tests/lib/Tab/TabRegistryTest.php index e45ed2eec2..2d2d81bc75 100644 --- a/tests/lib/Tab/TabRegistryTest.php +++ b/tests/lib/Tab/TabRegistryTest.php @@ -39,8 +39,8 @@ public function testGetTabsByGroupNameWhenGroupDoesNotExist(): void public function testGetTabsByGroupName(): void { - $twig = $this->createMock(Environment::class); - $translator = $this->createMock(TranslatorInterface::class); + $twig = self::createStub(Environment::class); + $translator = self::createStub(TranslatorInterface::class); $tabs = [ $this->createTab('tab1', $twig, $translator), @@ -56,8 +56,8 @@ public function testGetTabsByGroupName(): void public function testGetTabFromGroup(): void { - $twig = $this->createMock(Environment::class); - $translator = $this->createMock(TranslatorInterface::class); + $twig = self::createStub(Environment::class); + $translator = self::createStub(TranslatorInterface::class); $tab1 = $this->createTab('tab1', $twig, $translator); $tabs = [$tab1, $this->createTab('tab2', $twig, $translator)]; @@ -123,8 +123,8 @@ public function testAddTabGroupWithSameIdentifier(): void public function testAddTabToExistingGroup(): void { - $twig = $this->createMock(Environment::class); - $translator = $this->createMock(TranslatorInterface::class); + $twig = self::createStub(Environment::class); + $translator = self::createStub(TranslatorInterface::class); $existingTab = $this->createTab('existing_tab', $twig, $translator); $addedTab = $this->createTab('added_tab', $twig, $translator); @@ -139,8 +139,8 @@ public function testAddTabToExistingGroup(): void public function testAddTabToNonExistentGroup(): void { - $twig = $this->createMock(Environment::class); - $translator = $this->createMock(TranslatorInterface::class); + $twig = self::createStub(Environment::class); + $translator = self::createStub(TranslatorInterface::class); $addedTab = $this->createTab('added_tab', $twig, $translator); $tabRegistry = new TabRegistry(); diff --git a/tests/lib/UI/Config/Provider/Module/DamWidgetTest.php b/tests/lib/UI/Config/Provider/Module/DamWidgetTest.php index 935b88e39f..572a6129cf 100644 --- a/tests/lib/UI/Config/Provider/Module/DamWidgetTest.php +++ b/tests/lib/UI/Config/Provider/Module/DamWidgetTest.php @@ -14,6 +14,11 @@ use Ibexa\Contracts\Core\Repository\ContentTypeService; use Ibexa\Contracts\Core\Repository\NameSchema\SchemaIdentifierExtractorInterface; use Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType; +use Ibexa\Core\Repository\Values\ContentType\ContentType as CoreContentType; +use Ibexa\Core\Repository\Values\ContentType\FieldDefinition; +use Ibexa\Core\Repository\Values\ContentType\FieldDefinitionCollection; +use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; /** @@ -44,9 +49,8 @@ * array{field: array} * } * > - * - * @covers \Ibexa\AdminUi\UI\Config\Provider\Module\ImagePicker */ +#[CoversClass(DamWidget::class)] final class DamWidgetTest extends TestCase { private const IMAGE_FOO_CONTENT_TYPE_IDENTIFIER = 'content_type_foo'; @@ -119,14 +123,13 @@ protected function setUp(): void } /** - * @dataProvider provideDataForTestGetConfig - * * @phpstan-param TDamWidgetConfig $expectedConfiguration * @phpstan-param TRepositoryConfig $repositoryConfig * * @param TContentTypeValueMap $loadContentTypeValueMap * @param TSchemaIdentifiersValueMap $extractSchemaIdentifiersValueMap */ + #[DataProvider('provideDataForTestGetConfig')] public function testGetConfig( array $expectedConfiguration, array $repositoryConfig, @@ -151,17 +154,17 @@ public function testGetConfig( * TSchemaIdentifiersValueMap, * }> */ - public function provideDataForTestGetConfig(): iterable + public static function provideDataForTestGetConfig(): iterable { - $imageContentType = $this->createContentTypeMock(self::IMAGE_FOO_NAME_SCHEMA); - $imageContentType->expects(self::atLeastOnce()) - ->method('hasFieldDefinition') - ->willReturn(true); + $imageContentType = self::createContentType( + self::IMAGE_FOO_NAME_SCHEMA, + [self::IMAGE_AGGREGATIONS['KeywordTermAggregation']['fieldDefinitionIdentifier']] + ); $loadContentTypeValueMap = [ - [self::FOLDER_CONTENT_TYPE_IDENTIFIER, [], $this->createContentTypeMock(self::FOLDER_NAME_SCHEMA)], + [self::FOLDER_CONTENT_TYPE_IDENTIFIER, [], self::createContentType(self::FOLDER_NAME_SCHEMA)], [self::IMAGE_FOO_CONTENT_TYPE_IDENTIFIER, [], $imageContentType], - [self::IMAGE_BAR_CONTENT_TYPE_IDENTIFIER, [], $this->createContentTypeMock(self::IMAGE_BAR_NAME_SCHEMA)], + [self::IMAGE_BAR_CONTENT_TYPE_IDENTIFIER, [], self::createContentType(self::IMAGE_BAR_NAME_SCHEMA)], ]; $extractSchemaIdentifiersValueMap = [ @@ -171,47 +174,49 @@ public function provideDataForTestGetConfig(): iterable ]; yield 'Legacy Search Engine - hide filters' => [ - $this->getExpectedConfig(false), - $this->getRepositoryConfig('legacy'), + self::getExpectedConfig(false), + self::getRepositoryConfig('legacy'), $loadContentTypeValueMap, $extractSchemaIdentifiersValueMap, ]; - $expectedConfigForSolrAndElasticsearch = $this->getExpectedConfig(true); + $expectedConfigForSolrAndElasticsearch = self::getExpectedConfig(true); yield 'Solr - show filters' => [ $expectedConfigForSolrAndElasticsearch, - $this->getRepositoryConfig('solr'), + self::getRepositoryConfig('solr'), $loadContentTypeValueMap, $extractSchemaIdentifiersValueMap, ]; yield 'Elasticsearch - show filters' => [ $expectedConfigForSolrAndElasticsearch, - $this->getRepositoryConfig('elasticsearch'), + self::getRepositoryConfig('elasticsearch'), $loadContentTypeValueMap, $extractSchemaIdentifiersValueMap, ]; } /** - * @phpstan-return \Ibexa\Contracts\Core\Repository\Values\ContentType\ContentType & \PHPUnit\Framework\MockObject\MockObject + * @param array $fieldDefinitionIdentifiers */ - private function createContentTypeMock(string $nameSchema): ContentType + private static function createContentType(string $nameSchema, array $fieldDefinitionIdentifiers = []): ContentType { - $contentType = $this->createMock(ContentType::class); - $contentType - ->method('__get') - ->with('nameSchema') - ->willReturn($nameSchema); - - return $contentType; + return new CoreContentType([ + 'nameSchema' => $nameSchema, + 'fieldDefinitions' => new FieldDefinitionCollection( + array_map( + static fn (string $identifier): FieldDefinition => new FieldDefinition(['identifier' => $identifier]), + $fieldDefinitionIdentifiers + ) + ), + ]); } /** * @phpstan-return TDamWidgetConfig */ - private function getExpectedConfig(bool $showImageFilters): array + private static function getExpectedConfig(bool $showImageFilters): array { return [ 'image' => [ @@ -235,7 +240,7 @@ private function getExpectedConfig(bool $showImageFilters): array /** * @phpstan-return TRepositoryConfig */ - private function getRepositoryConfig(string $searchEngine): array + private static function getRepositoryConfig(string $searchEngine): array { return [ 'engine' => 'foo', diff --git a/tests/lib/UI/Config/Service/ContentTypeIconResolverTest.php b/tests/lib/UI/Config/Service/ContentTypeIconResolverTest.php index ed15e0373a..8656c8d580 100644 --- a/tests/lib/UI/Config/Service/ContentTypeIconResolverTest.php +++ b/tests/lib/UI/Config/Service/ContentTypeIconResolverTest.php @@ -10,6 +10,7 @@ use Ibexa\AdminUi\UI\Service\ContentTypeIconResolver; use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Asset\Packages; @@ -35,9 +36,8 @@ protected function setUp(): void /** * @param array $config - * - * @dataProvider dataProviderForGetContentTypeIcon */ + #[DataProvider('dataProviderForGetContentTypeIcon')] public function testGetContentTypeIcon(array $config, string $identifier, string $expected): void { $this->configResolver @@ -71,7 +71,7 @@ public function testGetContentTypeIcon(array $config, string $identifier, string /** * @return array, 1: string, 2: string}> */ - public function dataProviderForGetContentTypeIcon(): array + public static function dataProviderForGetContentTypeIcon(): array { return [ [ diff --git a/tests/lib/UniversalDiscovery/Event/Subscriber/ContentCreateTest.php b/tests/lib/UniversalDiscovery/Event/Subscriber/ContentCreateTest.php index d593285a4c..6261bf3964 100644 --- a/tests/lib/UniversalDiscovery/Event/Subscriber/ContentCreateTest.php +++ b/tests/lib/UniversalDiscovery/Event/Subscriber/ContentCreateTest.php @@ -16,6 +16,7 @@ use Ibexa\Contracts\Core\Repository\Values\User\Limitation\ContentTypeLimitation; use Ibexa\Contracts\Core\Repository\Values\User\Limitation\LanguageLimitation; use Ibexa\Core\Repository\Values\ContentType\ContentType; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -39,10 +40,9 @@ public function setUp(): void } /** - * @dataProvider createTab - * * @phpstan-param array $config */ + #[DataProvider('createTab')] public function testUdwConfigResolveWithCreateTab(array $config): void { $event = new ConfigResolveEvent(); @@ -64,10 +64,9 @@ public function testUdwConfigResolveWithCreateTab(array $config): void } /** - * @dataProvider withoutCreateTab - * * @phpstan-param array $config */ + #[DataProvider('withoutCreateTab')] public function testUdwConfigResolveWithoutCreateTab(array $config): void { $event = new ConfigResolveEvent(); @@ -83,7 +82,7 @@ public function testUdwConfigResolveWithoutCreateTab(array $config): void /** * @phpstan-return array}> */ - public function createTab(): array + public static function createTab(): array { return [ 'all_tabs' => [ @@ -108,7 +107,7 @@ public function createTab(): array /** * @phpstan-return array}> */ - public function withoutCreateTab(): array + public static function withoutCreateTab(): array { return [ 'one_tab' => [ diff --git a/tests/lib/Util/ContentTypeFieldsExpressionParserTest.php b/tests/lib/Util/ContentTypeFieldsExpressionParserTest.php index 4afc12e279..0cb51535d4 100644 --- a/tests/lib/Util/ContentTypeFieldsExpressionParserTest.php +++ b/tests/lib/Util/ContentTypeFieldsExpressionParserTest.php @@ -10,6 +10,7 @@ use Ibexa\AdminUi\Util\ContentTypeFieldsExpressionParser; use Ibexa\AdminUi\Util\ContentTypeFieldsParsedStructure; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use RuntimeException; @@ -24,9 +25,7 @@ protected function setUp(): void $this->contentTypeFieldsExpressionExtractor = new ContentTypeFieldsExpressionParser(); } - /** - * @dataProvider dataProviderForTestParse - */ + #[DataProvider('dataProviderForTestParse')] public function testParse(string $expression, ContentTypeFieldsParsedStructure $expectedResult): void { $result = $this->contentTypeFieldsExpressionExtractor->parseExpression($expression); @@ -36,9 +35,7 @@ public function testParse(string $expression, ContentTypeFieldsParsedStructure $ self::assertSame($expectedResult->getFields(), $result->getFields()); } - /** - * @dataProvider dataProviderForTestParseInvalidExpressions - */ + #[DataProvider('dataProviderForTestParseInvalidExpressions')] public function testParseInvalidExpression(string $expression): void { $this->expectException(RuntimeException::class); @@ -49,7 +46,7 @@ public function testParseInvalidExpression(string $expression): void /** * @return iterable */ - public function dataProviderForTestParse(): iterable + public static function dataProviderForTestParse(): iterable { yield 'product content type group, every content type, few fields' => [ 'product/*/{name, description}', @@ -118,7 +115,7 @@ public function dataProviderForTestParse(): iterable /** * @return iterable */ - public function dataProviderForTestParseInvalidExpressions(): iterable + public static function dataProviderForTestParseInvalidExpressions(): iterable { yield 'file content type, without fields' => [ 'file/', diff --git a/tests/lib/Validator/Constraint/LocationIsNotSubLocationValidatorTest.php b/tests/lib/Validator/Constraint/LocationIsNotSubLocationValidatorTest.php index 5906f8ddff..9a8018caee 100644 --- a/tests/lib/Validator/Constraint/LocationIsNotSubLocationValidatorTest.php +++ b/tests/lib/Validator/Constraint/LocationIsNotSubLocationValidatorTest.php @@ -31,17 +31,9 @@ protected function setUp(): void public function testValid(): void { - $location = $this - ->getMockBuilder(Location::class) - ->setMethodsExcept(['__get']) - ->setConstructorArgs([['pathString' => '/1/2/3/']]) - ->getMock(); + $location = $this->createLocationWithPathString('/1/2/3/'); - $comparedLocation = $this - ->getMockBuilder(Location::class) - ->setMethodsExcept(['__get']) - ->setConstructorArgs([['pathString' => '/3/5/']]) - ->getMock(); + $comparedLocation = $this->createLocationWithPathString('/3/5/'); $this->executionContext ->expects(self::never()) @@ -54,17 +46,9 @@ public function testValid(): void public function testInvalid(): void { - $location = $this - ->getMockBuilder(Location::class) - ->setMethodsExcept(['__get']) - ->setConstructorArgs([['pathString' => '/1/2/3/']]) - ->getMock(); + $location = $this->createLocationWithPathString('/1/2/3/'); - $comparedLocation = $this - ->getMockBuilder(Location::class) - ->setMethodsExcept(['__get']) - ->setConstructorArgs([['pathString' => '/1/2/']]) - ->getMock(); + $comparedLocation = $this->createLocationWithPathString('/1/2/'); $constraint = new LocationIsNotSubLocation($comparedLocation); @@ -90,4 +74,17 @@ public function testInvalid(): void $this->validator->validate($location, $constraint); } + + /** + * Location::__get() must stay real so that reading $location->pathString works, which is what + * the removed MockBuilder::setMethodsExcept() used to express. + */ + private function createLocationWithPathString(string $pathString): Location&MockObject + { + return $this + ->getMockBuilder(Location::class) + ->onlyMethods(array_values(array_diff(get_class_methods(Location::class), ['__get']))) + ->setConstructorArgs([['pathString' => $pathString]]) + ->getMock(); + } } diff --git a/tests/lib/Validator/Constraint/LocationIsWithinCopySubtreeLimitValidatorTest.php b/tests/lib/Validator/Constraint/LocationIsWithinCopySubtreeLimitValidatorTest.php index 17c348161b..c517b729e3 100644 --- a/tests/lib/Validator/Constraint/LocationIsWithinCopySubtreeLimitValidatorTest.php +++ b/tests/lib/Validator/Constraint/LocationIsWithinCopySubtreeLimitValidatorTest.php @@ -48,7 +48,7 @@ protected function setUp(): void $this->validator->initialize($this->executionContext); $this->location = $this ->getMockBuilder(Location::class) - ->setMethodsExcept(['__get']) + ->onlyMethods(array_values(array_diff(get_class_methods(Location::class), ['__get']))) ->setConstructorArgs([['pathString' => '/1/2/3/']]) ->getMock(); } diff --git a/tests/lib/Validator/Constraint/UniqueURLValidatorTest.php b/tests/lib/Validator/Constraint/UniqueURLValidatorTest.php index dc913647e0..1e18f241e1 100644 --- a/tests/lib/Validator/Constraint/UniqueURLValidatorTest.php +++ b/tests/lib/Validator/Constraint/UniqueURLValidatorTest.php @@ -59,7 +59,7 @@ public function testValid(): void ->expects(self::once()) ->method('loadByUrl') ->with($url) - ->willThrowException($this->createMock(NotFoundException::class)); + ->willThrowException(self::createStub(NotFoundException::class)); $this->executionContext ->expects(self::never()) diff --git a/tests/lib/View/ContentTypeCreateViewTest.php b/tests/lib/View/ContentTypeCreateViewTest.php index 1e20633752..3ea2a98c22 100644 --- a/tests/lib/View/ContentTypeCreateViewTest.php +++ b/tests/lib/View/ContentTypeCreateViewTest.php @@ -19,13 +19,13 @@ final class ContentTypeCreateViewTest extends TestCase { public function testGetParameters(): void { - $formView = $this->createMock(FormView::class); + $formView = self::createStub(FormView::class); $form = $this->createMock(FormInterface::class); $form->method('createView')->willReturn($formView); - $contentTypeDraft = $this->createMock(ContentTypeDraft::class); - $contentTypeGroup = $this->createMock(ContentTypeGroup::class); + $contentTypeDraft = self::createStub(ContentTypeDraft::class); + $contentTypeGroup = self::createStub(ContentTypeGroup::class); $view = new ContentTypeCreateView( 'create.html.twig', diff --git a/tests/lib/View/ContentTypeEditViewTest.php b/tests/lib/View/ContentTypeEditViewTest.php index b23d93620c..5cd58211a2 100644 --- a/tests/lib/View/ContentTypeEditViewTest.php +++ b/tests/lib/View/ContentTypeEditViewTest.php @@ -20,13 +20,13 @@ final class ContentTypeEditViewTest extends TestCase { public function testGetParameters(): void { - $formView = $this->createMock(FormView::class); + $formView = self::createStub(FormView::class); $form = $this->createMock(FormInterface::class); $form->method('createView')->willReturn($formView); - $contentTypeDraft = $this->createMock(ContentTypeDraft::class); - $contentTypeGroup = $this->createMock(ContentTypeGroup::class); + $contentTypeDraft = self::createStub(ContentTypeDraft::class); + $contentTypeGroup = self::createStub(ContentTypeGroup::class); $language = $this->createMock(Language::class); $language->method('__get')->with('languageCode')->willReturn('eng-GB');