diff --git a/composer.json b/composer.json index 409c155..4de6f33 100644 --- a/composer.json +++ b/composer.json @@ -47,6 +47,7 @@ "ibexa/doctrine-schema": "~6.0.x-dev", "ibexa/fieldtype-richtext": "~6.0.x-dev", "ibexa/http-cache": "~6.0.x-dev", + "ibexa/phpstan": "~6.0.x-dev", "ibexa/rector": "~6.0.x-dev", "ibexa/rest": "~6.0.x-dev", "ibexa/search": "~6.0.x-dev", diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index b700dcf..e0bd59c 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -528,14 +528,8 @@ parameters: count: 1 path: tests/integration/Invitation/InvitationServiceTest.php - - - message: '#^Call to method PHPUnit\\Framework\\Assert\:\:assertInstanceOf\(\) with ''Ibexa\\\\Contracts\\\\Core\\\\Repository\\\\Values\\\\User\\\\PasswordValidationContext'' and Ibexa\\Contracts\\Core\\Repository\\Values\\User\\PasswordValidationContext will always evaluate to true\.$#' - identifier: method.alreadyNarrowedType - count: 1 - path: tests/lib/Validator/Constraint/PasswordValidatorTest.php - - message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertInstanceOf\(\) with ''Ibexa\\\\Contracts\\\\Core\\\\Repository\\\\Values\\\\User\\\\PasswordValidationContext'' and Ibexa\\Contracts\\Core\\Repository\\Values\\User\\PasswordValidationContext will always evaluate to true\.$#' identifier: staticMethod.alreadyNarrowedType - count: 1 + count: 2 path: tests/lib/Validator/Constraint/PasswordValidatorTest.php diff --git a/phpstan.neon b/phpstan.neon index 701fe6f..0ea9680 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,6 +2,7 @@ includes: - phpstan-baseline.neon - vendor/phpstan/phpstan-phpunit/extension.neon - vendor/phpstan/phpstan-symfony/extension.neon + - vendor/ibexa/phpstan/extension.neon parameters: level: 8 diff --git a/src/lib/Form/ChoiceList/Loader/UserGroupsChoiceLoader.php b/src/lib/Form/ChoiceList/Loader/UserGroupsChoiceLoader.php index 6deba3d..751b2d1 100644 --- a/src/lib/Form/ChoiceList/Loader/UserGroupsChoiceLoader.php +++ b/src/lib/Form/ChoiceList/Loader/UserGroupsChoiceLoader.php @@ -32,7 +32,7 @@ public function __construct( */ protected function loadChoices(): iterable { - return $this->repository->sudo(function () { + return $this->repository->sudo(function (): array { $query = new Query(); $query->filter = new ContentTypeIdentifier('user_group'); $query->offset = 0; diff --git a/src/lib/Form/Type/Invitation/SectionsChoiceType.php b/src/lib/Form/Type/Invitation/SectionsChoiceType.php index 77fec6f..955aca6 100644 --- a/src/lib/Form/Type/Invitation/SectionsChoiceType.php +++ b/src/lib/Form/Type/Invitation/SectionsChoiceType.php @@ -29,7 +29,7 @@ public function configureOptions(OptionsResolver $resolver): void ->setDefaults([ 'choice_loader' => ChoiceList::lazy( $this, - fn () => $this->repository->sudo(fn (): iterable => $this->sectionService->loadSections()) + fn (): iterable => $this->repository->sudo(fn (): iterable => $this->sectionService->loadSections()) ), 'choice_label' => 'name', 'choice_value' => 'id', diff --git a/tests/lib/EventListener/PerformAccessCheckSubscriberTest.php b/tests/lib/EventListener/PerformAccessCheckSubscriberTest.php index 4f43d89..3ab4e4e 100644 --- a/tests/lib/EventListener/PerformAccessCheckSubscriberTest.php +++ b/tests/lib/EventListener/PerformAccessCheckSubscriberTest.php @@ -26,7 +26,7 @@ final class PerformAccessCheckSubscriberTest extends TestCase protected function setUp(): void { - $this->kernel = $this->createStub(HttpKernelInterface::class); + $this->kernel = self::createStub(HttpKernelInterface::class); $this->request = new Request(); $this->subscriber = new PerformAccessCheckSubscriber([]); } diff --git a/tests/lib/Form/Type/ChoiceList/Loader/AvailableLocaleChoiceLoaderTest.php b/tests/lib/Form/Type/ChoiceList/Loader/AvailableLocaleChoiceLoaderTest.php index d657e2b..519016a 100644 --- a/tests/lib/Form/Type/ChoiceList/Loader/AvailableLocaleChoiceLoaderTest.php +++ b/tests/lib/Form/Type/ChoiceList/Loader/AvailableLocaleChoiceLoaderTest.php @@ -31,7 +31,7 @@ protected function setUp(): void parent::setUp(); $this->validator = $this->createMock(ValidatorInterface::class); - $this->constraintViolation = $this->createStub(ConstraintViolationInterface::class); + $this->constraintViolation = self::createStub(ConstraintViolationInterface::class); $this->configResolver = $this->createMock(ConfigResolverInterface::class); } diff --git a/tests/lib/Invitation/InvitationServiceTest.php b/tests/lib/Invitation/InvitationServiceTest.php index 55bb2a3..aad1f3e 100644 --- a/tests/lib/Invitation/InvitationServiceTest.php +++ b/tests/lib/Invitation/InvitationServiceTest.php @@ -40,14 +40,14 @@ protected function setUp(): void $this->configResolver = $this->createMock(ConfigResolverInterface::class); $this->invitationService = new InvitationService( - $this->createStub(PermissionResolver::class), - $this->createStub(Handler::class), - $this->createStub(HashGenerator::class), - $this->createStub(UserService::class), + self::createStub(PermissionResolver::class), + self::createStub(Handler::class), + self::createStub(HashGenerator::class), + self::createStub(UserService::class), $this->siteAccessService, - $this->createStub(TransactionHandler::class), + self::createStub(TransactionHandler::class), $this->configResolver, - $this->createStub(DomainMapper::class) + self::createStub(DomainMapper::class) ); } diff --git a/tests/lib/Password/PasswordRequirementsResolverTest.php b/tests/lib/Password/PasswordRequirementsResolverTest.php index ba11f78..430a4c8 100644 --- a/tests/lib/Password/PasswordRequirementsResolverTest.php +++ b/tests/lib/Password/PasswordRequirementsResolverTest.php @@ -133,13 +133,13 @@ public static function dataProviderForGetRequirements(): array public function testCoversEveryCoreValidatorSchemaRule(): void { $schema = (new UserType( - $this->createStub(UserHandler::class), - $this->createStub(PasswordHashService::class), - $this->createStub(PasswordValidatorInterface::class) + self::createStub(UserHandler::class), + self::createStub(PasswordHashService::class), + self::createStub(PasswordValidatorInterface::class) ))->getValidatorConfigurationSchema()['PasswordValueValidator']; $allRulesEnabled = array_map( - static fn (array $rule) => $rule['type'] === 'int' ? 1 : true, + static fn (array $rule): int|true => $rule['type'] === 'int' ? 1 : true, $schema ); $allRulesEnabled['minLength'] = 10; diff --git a/tests/lib/Permission/UserPermissionsLimitationTypeTest.php b/tests/lib/Permission/UserPermissionsLimitationTypeTest.php index 0c2608a..541a1dd 100644 --- a/tests/lib/Permission/UserPermissionsLimitationTypeTest.php +++ b/tests/lib/Permission/UserPermissionsLimitationTypeTest.php @@ -266,7 +266,7 @@ public function testEvaluate( ): void { $value = (new UserPermissionsLimitationType($this->getPersistenceMock()))->evaluate( $limitation, - $this->createStub(APIUser::class), + self::createStub(APIUser::class), $object, ); diff --git a/tests/lib/Security/Authentication/DefaultAuthenticationFailureHandlerTest.php b/tests/lib/Security/Authentication/DefaultAuthenticationFailureHandlerTest.php index 6d20281..ca1f7a3 100644 --- a/tests/lib/Security/Authentication/DefaultAuthenticationFailureHandlerTest.php +++ b/tests/lib/Security/Authentication/DefaultAuthenticationFailureHandlerTest.php @@ -29,7 +29,7 @@ protected function setUp(): void { $this->httpUtils = $this->createMock(HttpUtils::class); $this->handler = new DefaultAuthenticationFailureHandler( - $this->createStub(HttpKernelInterface::class), + self::createStub(HttpKernelInterface::class), $this->httpUtils ); } diff --git a/tests/lib/UserSetting/Setting/LanguageTest.php b/tests/lib/UserSetting/Setting/LanguageTest.php index aba54b3..2e21e24 100644 --- a/tests/lib/UserSetting/Setting/LanguageTest.php +++ b/tests/lib/UserSetting/Setting/LanguageTest.php @@ -46,7 +46,7 @@ public function testGetDefaultValue( $this->availableLocaleChoiceLoader->method('getChoiceList')->willReturn($availableLocales); $language = new Language( - $this->createStub(TranslatorInterface::class), + self::createStub(TranslatorInterface::class), $this->userLanguagePreferenceProvider, $this->availableLocaleChoiceLoader, ); diff --git a/tests/lib/UserSetting/UserSettingServiceTest.php b/tests/lib/UserSetting/UserSettingServiceTest.php index a2152ca..4fd03a8 100644 --- a/tests/lib/UserSetting/UserSettingServiceTest.php +++ b/tests/lib/UserSetting/UserSettingServiceTest.php @@ -20,7 +20,7 @@ class UserSettingServiceTest extends TestCase { public function testCountUserSettings(): void { - $userPreferenceService = $this->createStub(UserPreferenceService::class); + $userPreferenceService = self::createStub(UserPreferenceService::class); $valueRegistry = $this->createMock(ValueDefinitionRegistry::class); $valueRegistry->method('countValueDefinitions')->willReturn(2); $userSettingService = new UserSettingService($userPreferenceService, $valueRegistry); diff --git a/tests/lib/UserSetting/ValueDefinitionRegistryTest.php b/tests/lib/UserSetting/ValueDefinitionRegistryTest.php index 23fb7b2..2f42e1d 100644 --- a/tests/lib/UserSetting/ValueDefinitionRegistryTest.php +++ b/tests/lib/UserSetting/ValueDefinitionRegistryTest.php @@ -17,9 +17,9 @@ class ValueDefinitionRegistryTest extends TestCase public function testGetValueDefinitions(): void { $definitions = [ - 'foo' => $this->createStub(ValueDefinitionInterface::class), - 'bar' => $this->createStub(ValueDefinitionInterface::class), - 'baz' => $this->createStub(ValueDefinitionInterface::class), + 'foo' => self::createStub(ValueDefinitionInterface::class), + 'bar' => self::createStub(ValueDefinitionInterface::class), + 'baz' => self::createStub(ValueDefinitionInterface::class), ]; $registry = new ValueDefinitionRegistry($definitions); @@ -29,7 +29,7 @@ public function testGetValueDefinitions(): void public function testAddValueDefinition(): void { - $foo = $this->createStub(ValueDefinitionInterface::class); + $foo = self::createStub(ValueDefinitionInterface::class); $registry = new ValueDefinitionRegistry([]); $registry->addValueDefinition('foo', $foo); @@ -40,7 +40,7 @@ public function testAddValueDefinition(): void public function testHasValueDefinition(): void { $registry = new ValueDefinitionRegistry([ - 'foo' => $this->createStub(ValueDefinitionInterface::class), + 'foo' => self::createStub(ValueDefinitionInterface::class), ]); self::assertTrue($registry->hasValueDefinition('foo')); @@ -49,7 +49,7 @@ public function testHasValueDefinition(): void public function testGetValueDefinition(): void { - $foo = $this->createStub(ValueDefinitionInterface::class); + $foo = self::createStub(ValueDefinitionInterface::class); $registry = new ValueDefinitionRegistry([ 'foo' => $foo, @@ -61,8 +61,8 @@ public function testGetValueDefinition(): void public function testCountValueDefinitions(): void { $definitions = [ - 'foo' => $this->createStub(ValueDefinitionInterface::class), - 'bar' => $this->createStub(ValueDefinitionInterface::class), + 'foo' => self::createStub(ValueDefinitionInterface::class), + 'bar' => self::createStub(ValueDefinitionInterface::class), ]; $registry = new ValueDefinitionRegistry($definitions); diff --git a/tests/lib/Validator/Constraint/PasswordValidatorTest.php b/tests/lib/Validator/Constraint/PasswordValidatorTest.php index 501f2a1..25888d0 100644 --- a/tests/lib/Validator/Constraint/PasswordValidatorTest.php +++ b/tests/lib/Validator/Constraint/PasswordValidatorTest.php @@ -57,8 +57,8 @@ public function testValidateShouldBeSkipped(\stdClass|string|null $value): void public function testValid(): void { $password = 'pass'; - $contentType = $this->createStub(ContentType::class); - $user = $this->createStub(User::class); + $contentType = self::createStub(ContentType::class); + $user = self::createStub(User::class); $this->userService ->expects(self::once()) @@ -93,7 +93,7 @@ static function (string $actualPassword, PasswordValidationContext $actualContex public function testInvalid(): void { - $contentType = $this->createStub(ContentType::class); + $contentType = self::createStub(ContentType::class); $password = 'pass'; $errorParameter = 'foo'; $errorMessage = 'error'; @@ -101,15 +101,15 @@ public function testInvalid(): void $this->userService ->expects(self::once()) ->method('validatePassword') - ->willReturnCallback(function (string $actualPassword, PasswordValidationContext $actualContext) use ( + ->willReturnCallback(static function (string $actualPassword, PasswordValidationContext $actualContext) use ( $password, $contentType, $errorMessage, $errorParameter ): array { - $this->assertEquals($password, $actualPassword); - $this->assertInstanceOf(PasswordValidationContext::class, $actualContext); - $this->assertSame($contentType, $actualContext->contentType); + self::assertEquals($password, $actualPassword); + self::assertInstanceOf(PasswordValidationContext::class, $actualContext); + self::assertSame($contentType, $actualContext->contentType); return [ new ValidationError($errorMessage, null, ['%foo%' => $errorParameter]), @@ -146,7 +146,7 @@ public function testInvalid(): void public function testPluralValidationErrorUsesPluralMessageTemplate(): void { - $contentType = $this->createStub(ContentType::class); + $contentType = self::createStub(ContentType::class); $this->userService ->method('validatePassword') @@ -183,7 +183,7 @@ public function testKnownValidationErrorsGetRequirementCode( string $errorMessage, string $expectedCode ): void { - $contentType = $this->createStub(ContentType::class); + $contentType = self::createStub(ContentType::class); $this->userService ->method('validatePassword') @@ -291,7 +291,7 @@ public function testEveryCoreCharacterRuleErrorProducesRequirementCode(): void ->willReturn($constraintViolationBuilder); $this->validator->validate('pass', new Password( - contentType: $this->createStub(ContentType::class), + contentType: self::createStub(ContentType::class), )); } diff --git a/tests/lib/Validator/Constraint/UserPasswordValidatorTest.php b/tests/lib/Validator/Constraint/UserPasswordValidatorTest.php index c92bebf..726b27a 100644 --- a/tests/lib/Validator/Constraint/UserPasswordValidatorTest.php +++ b/tests/lib/Validator/Constraint/UserPasswordValidatorTest.php @@ -101,7 +101,7 @@ public function testInvalid(): void ->with($apiUser, 'password') ->willReturn(false); $constraint = new UserPassword(); - $constraintViolationBuilder = $this->createStub(ConstraintViolationBuilderInterface::class); + $constraintViolationBuilder = self::createStub(ConstraintViolationBuilderInterface::class); $this->executionContext ->expects(self::once()) ->method('buildViolation')