Skip to content

Commit c59c8a8

Browse files
authored
fix: deprecations in Symfony 5.3 (#4083)
* fix: deprecations in Symfony 5.3 * fix more deprecations * fix remaining deprecs * fix phpstan * fix phpstan * fix phpstan
1 parent 4a7a502 commit c59c8a8

29 files changed

+127
-51
lines changed

.github/workflows/ci.yml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -639,17 +639,17 @@ jobs:
639639
strategy:
640640
matrix:
641641
php:
642-
- '7.4'
642+
- '8.0'
643643
symfony:
644-
- '5.2'
644+
- '5.3'
645645
fail-fast: false
646646
steps:
647647
- name: Checkout
648648
uses: actions/checkout@v2
649649
- name: Setup PHP
650650
uses: shivammathur/setup-php@v2
651651
with:
652-
php-version: '7.4'
652+
php-version: '8.0'
653653
tools: pecl, composer
654654
extensions: intl, bcmath, curl, openssl, mbstring
655655
coverage: none
@@ -699,17 +699,17 @@ jobs:
699699
strategy:
700700
matrix:
701701
php:
702-
- '7.4'
702+
- '8.0'
703703
symfony:
704-
- '5.2'
704+
- '5.3'
705705
fail-fast: false
706706
steps:
707707
- name: Checkout
708708
uses: actions/checkout@v2
709709
- name: Setup PHP
710710
uses: shivammathur/setup-php@v2
711711
with:
712-
php-version: '7.4'
712+
php-version: '8.0'
713713
tools: pecl, composer
714714
extensions: intl, bcmath, curl, openssl, mbstring
715715
coverage: none
@@ -720,8 +720,7 @@ jobs:
720720
id: composercache
721721
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
722722
- name: Allow unstable project dependencies
723-
run: |
724-
jq '. + {"minimum-stability": "dev"}' composer.json | sponge composer.json
723+
run: composer config minimum-stability dev
725724
- name: Cache dependencies
726725
uses: actions/cache@v2
727726
with:

phpstan.neon.dist

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ parameters:
8989
message: '#Property Doctrine\\ORM\\Mapping\\ClassMetadataInfo::\$fieldMappings \(array.*\)>\) does not accept array\(.*\)\.#'
9090
path: tests/Bridge/Doctrine/Orm/Metadata/Property/DoctrineOrmPropertyMetadataFactoryTest.php
9191

92+
# Expected, Symfony 5.3
93+
- '#getCollectionValueT|getCollectionKeyTyp#'
94+
9295
# Expected, due to PHP 8 attributes
9396
- '#ReflectionProperty::getAttributes\(\)#'
9497
- '#ReflectionMethod::getAttributes\(\)#'

src/Bridge/Elasticsearch/DataProvider/Filter/AbstractFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ protected function getMetadata(string $resourceClass, string $property): array
115115
return $noop;
116116
}
117117

118-
if ($type->isCollection() && null === $type = $type->getCollectionValueType()) {
118+
if ($type->isCollection() && null === $type = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) {
119119
return $noop;
120120
}
121121

src/Bridge/Elasticsearch/Util/FieldDatatypeTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private function getNestedFieldPath(string $resourceClass, string $property): ?s
8080
}
8181

8282
if (
83-
null !== ($type = $type->getCollectionValueType())
83+
null !== ($type = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType())
8484
&& Type::BUILTIN_TYPE_OBJECT === $type->getBuiltinType()
8585
&& null !== ($className = $type->getClassName())
8686
&& $this->resourceClassResolver->isResourceClass($className)

src/Bridge/NelmioApiDoc/Parser/ApiPlatformParser.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ private function parseProperty(ResourceMetadata $resourceMetadata, PropertyMetad
213213
if ($type->isCollection()) {
214214
$data['actualType'] = DataTypes::COLLECTION;
215215

216-
if ($collectionType = $type->getCollectionValueType()) {
216+
if ($collectionType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) {
217217
$subProperty = $this->parseProperty($resourceMetadata, $propertyMetadata, $io, $collectionType, $visited);
218218
if (self::TYPE_IRI === $subProperty['dataType']) {
219219
$data['dataType'] = 'array of IRIs';

src/GraphQl/Type/FieldsBuilder.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,14 @@ public function resolveResourceArgs(array $args, string $operationName, string $
263263
private function getResourceFieldConfiguration(?string $property, ?string $fieldDescription, ?string $deprecationReason, Type $type, string $rootResource, bool $input, ?string $queryName, ?string $mutationName, ?string $subscriptionName, int $depth = 0): ?array
264264
{
265265
try {
266-
$resourceClass = $this->typeBuilder->isCollection($type) && ($collectionValueType = $type->getCollectionValueType()) ? $collectionValueType->getClassName() : $type->getClassName();
266+
if (
267+
$this->typeBuilder->isCollection($type) &&
268+
$collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()
269+
) {
270+
$resourceClass = $collectionValueType->getClassName();
271+
} else {
272+
$resourceClass = $type->getClassName();
273+
}
267274

268275
if (null === $graphqlType = $this->convertType($type, $input, $queryName, $mutationName, $subscriptionName, $resourceClass ?? '', $rootResource, $property, $depth)) {
269276
return null;

src/GraphQl/Type/TypeBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ public function getResourcePaginatedCollectionType(GraphQLType $resourceType, st
217217
*/
218218
public function isCollection(Type $type): bool
219219
{
220-
return $type->isCollection() && ($collectionValueType = $type->getCollectionValueType()) && null !== $collectionValueType->getClassName();
220+
return $type->isCollection() && ($collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) && null !== $collectionValueType->getClassName();
221221
}
222222

223223
private function getCursorBasedPaginationFields(GraphQLType $resourceType): array

src/GraphQl/Type/TypeConverter.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,15 @@ public function resolveType(string $type): ?GraphQLType
102102

103103
private function getResourceType(Type $type, bool $input, ?string $queryName, ?string $mutationName, ?string $subscriptionName, int $depth): ?GraphQLType
104104
{
105-
$resourceClass = $this->typeBuilder->isCollection($type) && ($collectionValueType = $type->getCollectionValueType()) ? $collectionValueType->getClassName() : $type->getClassName();
105+
if (
106+
$this->typeBuilder->isCollection($type) &&
107+
$collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()
108+
) {
109+
$resourceClass = $collectionValueType->getClassName();
110+
} else {
111+
$resourceClass = $type->getClassName();
112+
}
113+
106114
if (null === $resourceClass) {
107115
return null;
108116
}

src/Hal/Serializer/ItemNormalizer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ApiPlatform\Core\Serializer\CacheKeyTrait;
1818
use ApiPlatform\Core\Serializer\ContextTrait;
1919
use ApiPlatform\Core\Util\ClassInfoTrait;
20+
use Symfony\Component\PropertyInfo\Type;
2021
use Symfony\Component\Serializer\Exception\LogicException;
2122
use Symfony\Component\Serializer\Exception\UnexpectedValueException;
2223
use Symfony\Component\Serializer\Mapping\AttributeMetadataInterface;
@@ -140,7 +141,7 @@ private function getComponents($object, ?string $format, array $context): array
140141

141142
if (null !== $type) {
142143
if ($type->isCollection()) {
143-
$valueType = $type->getCollectionValueType();
144+
$valueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType();
144145
$isMany = null !== $valueType && ($className = $valueType->getClassName()) && $this->resourceClassResolver->isResourceClass($className);
145146
} else {
146147
$className = $type->getClassName();

src/Hydra/Serializer/DocumentationNormalizer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ private function getRange(PropertyMetadata $propertyMetadata): ?string
347347
return null;
348348
}
349349

350-
if ($type->isCollection() && null !== $collectionType = $type->getCollectionValueType()) {
350+
if ($type->isCollection() && null !== $collectionType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) {
351351
$type = $collectionType;
352352
}
353353

src/JsonApi/Serializer/ItemNormalizer.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
use ApiPlatform\Core\Serializer\ContextTrait;
2727
use ApiPlatform\Core\Util\ClassInfoTrait;
2828
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
29+
use Symfony\Component\PropertyInfo\Type;
2930
use Symfony\Component\Serializer\Exception\LogicException;
3031
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
3132
use Symfony\Component\Serializer\Exception\RuntimeException;
@@ -275,7 +276,8 @@ private function getComponents($object, ?string $format, array $context): array
275276

276277
if (null !== $type) {
277278
if ($type->isCollection()) {
278-
$isMany = ($type->getCollectionValueType() && $className = $type->getCollectionValueType()->getClassName()) ? $this->resourceClassResolver->isResourceClass($className) : false;
279+
$collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType();
280+
$isMany = ($collectionValueType && $className = $collectionValueType->getClassName()) ? $this->resourceClassResolver->isResourceClass($className) : false;
279281
} else {
280282
$isOne = ($className = $type->getClassName()) ? $this->resourceClassResolver->isResourceClass($className) : false;
281283
}

src/JsonSchema/SchemaFactory.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,13 @@ private function buildPropertySchema(Schema $schema, string $definitionName, str
214214

215215
$valueSchema = [];
216216
if (null !== $type = $propertyMetadata->getType()) {
217-
$isCollection = $type->isCollection();
218-
if (null === $valueType = $isCollection ? $type->getCollectionValueType() : $type) {
217+
if ($isCollection = $type->isCollection()) {
218+
$valueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType();
219+
} else {
220+
$valueType = $type;
221+
}
222+
223+
if (null === $valueType) {
219224
$builtinType = 'string';
220225
$className = null;
221226
} else {

src/JsonSchema/TypeFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ public function setSchemaFactory(SchemaFactoryInterface $schemaFactory): void
5252
public function getType(Type $type, string $format = 'json', ?bool $readableLink = null, ?array $serializerContext = null, Schema $schema = null): array
5353
{
5454
if ($type->isCollection()) {
55-
$keyType = $type->getCollectionKeyType();
56-
$subType = $type->getCollectionValueType() ?? new Type($type->getBuiltinType(), false, $type->getClassName(), false);
55+
$keyType = method_exists(Type::class, 'getCollectionKeyTypes') ? ($type->getCollectionKeyTypes()[0] ?? null) : $type->getCollectionKeyType();
56+
$subType = (method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) ?? new Type($type->getBuiltinType(), false, $type->getClassName(), false);
5757

5858
if (null !== $keyType && Type::BUILTIN_TYPE_STRING === $keyType->getBuiltinType()) {
5959
return $this->addNullabilityToTypeDefinition([

src/Metadata/Property/Factory/AnnotationSubresourceMetadataFactory.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use ApiPlatform\Core\Metadata\Property\SubresourceMetadata;
2020
use ApiPlatform\Core\Util\Reflection;
2121
use Doctrine\Common\Annotations\Reader;
22+
use Symfony\Component\PropertyInfo\Type;
2223

2324
/**
2425
* Adds subresources to the properties metadata from {@see ApiResource} annotations.
@@ -92,7 +93,16 @@ private function updateMetadata(ApiSubresource $annotation, PropertyMetadata $pr
9293
throw new InvalidResourceException(sprintf('Property "%s" on resource "%s" is declared as a subresource, but its type could not be determined.', $propertyName, $originResourceClass));
9394
}
9495
$isCollection = $type->isCollection();
95-
$resourceClass = $isCollection && ($collectionValueType = $type->getCollectionValueType()) ? $collectionValueType->getClassName() : $type->getClassName();
96+
97+
if (
98+
$isCollection &&
99+
$collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()
100+
) {
101+
$resourceClass = $collectionValueType->getClassName();
102+
} else {
103+
$resourceClass = $type->getClassName();
104+
}
105+
96106
$maxDepth = $annotation->maxDepth;
97107
// @ApiSubresource is on the class identifier (/collection/{id}/subcollection/{subcollectionId})
98108
if (null === $resourceClass) {

src/Metadata/Property/Factory/ExtractorPropertyMetadataFactory.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ApiPlatform\Core\Metadata\Extractor\ExtractorInterface;
1818
use ApiPlatform\Core\Metadata\Property\PropertyMetadata;
1919
use ApiPlatform\Core\Metadata\Property\SubresourceMetadata;
20+
use Symfony\Component\PropertyInfo\Type;
2021

2122
/**
2223
* Creates properties's metadata using an extractor.
@@ -139,7 +140,14 @@ private function createSubresourceMetadata($subresource, PropertyMetadata $prope
139140

140141
if (null !== $type) {
141142
$isCollection = $type->isCollection();
142-
$resourceClass = $isCollection && ($collectionValueType = $type->getCollectionValueType()) ? $collectionValueType->getClassName() : $type->getClassName();
143+
if (
144+
$isCollection &&
145+
$collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()
146+
) {
147+
$resourceClass = $collectionValueType->getClassName();
148+
} else {
149+
$resourceClass = $type->getClassName();
150+
}
143151
} elseif (\is_array($subresource) && isset($subresource['resourceClass'])) {
144152
$resourceClass = $subresource['resourceClass'];
145153
$isCollection = $subresource['collection'] ?? true;

src/Metadata/Property/Factory/SerializerPropertyMetadataFactory.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use ApiPlatform\Core\Metadata\Property\PropertyMetadata;
1919
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
2020
use ApiPlatform\Core\Util\ResourceClassInfoTrait;
21+
use Symfony\Component\PropertyInfo\Type;
2122
use Symfony\Component\Serializer\Mapping\AttributeMetadataInterface;
2223
use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface as SerializerClassMetadataFactoryInterface;
2324

@@ -113,7 +114,14 @@ private function transformLinkStatus(PropertyMetadata $propertyMetadata, array $
113114
return $propertyMetadata;
114115
}
115116

116-
$relatedClass = $type->isCollection() && ($collectionValueType = $type->getCollectionValueType()) ? $collectionValueType->getClassName() : $type->getClassName();
117+
if (
118+
$type->isCollection() &&
119+
$collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()
120+
) {
121+
$relatedClass = $collectionValueType->getClassName();
122+
} else {
123+
$relatedClass = $type->getClassName();
124+
}
117125

118126
// if property is not a resource relation, don't set link status (as it would have no meaning)
119127
if (null === $relatedClass || !$this->isResourceClass($relatedClass)) {

src/Serializer/AbstractItemNormalizer.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ protected function denormalizeCollection(string $attribute, PropertyMetadata $pr
433433
throw new InvalidArgumentException(sprintf('The type of the "%s" attribute must be "array", "%s" given.', $attribute, \gettype($value)));
434434
}
435435

436-
$collectionKeyType = $type->getCollectionKeyType();
436+
$collectionKeyType = method_exists(Type::class, 'getCollectionKeyTypes') ? ($type->getCollectionKeyTypes()[0] ?? null) : $type->getCollectionKeyType();
437437
$collectionKeyBuiltinType = null === $collectionKeyType ? null : $collectionKeyType->getBuiltinType();
438438

439439
$values = [];
@@ -578,7 +578,7 @@ protected function getAttributeValue($object, $attribute, $format = null, array
578578
if (
579579
$type &&
580580
$type->isCollection() &&
581-
($collectionValueType = $type->getCollectionValueType()) &&
581+
($collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) &&
582582
($className = $collectionValueType->getClassName()) &&
583583
$this->resourceClassResolver->isResourceClass($className)
584584
) {
@@ -727,7 +727,7 @@ private function createAttributeValue($attribute, $value, $format = null, array
727727

728728
if (
729729
$type->isCollection() &&
730-
null !== ($collectionValueType = $type->getCollectionValueType()) &&
730+
null !== ($collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) &&
731731
null !== ($className = $collectionValueType->getClassName()) &&
732732
$this->resourceClassResolver->isResourceClass($className)
733733
) {
@@ -750,7 +750,7 @@ private function createAttributeValue($attribute, $value, $format = null, array
750750

751751
if (
752752
$type->isCollection() &&
753-
null !== ($collectionValueType = $type->getCollectionValueType()) &&
753+
null !== ($collectionValueType = method_exists(Type::class, 'getCollectionValueTypes') ? ($type->getCollectionValueTypes()[0] ?? null) : $type->getCollectionValueType()) &&
754754
null !== ($className = $collectionValueType->getClassName())
755755
) {
756756
if (!$this->serializer instanceof DenormalizerInterface) {

src/Test/DoctrineOrmFilterTestCase.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
1919
use Doctrine\ORM\EntityRepository;
2020
use Doctrine\Persistence\ManagerRegistry;
21-
use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper;
2221
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
2322
use Symfony\Component\HttpFoundation\Request;
2423
use Symfony\Component\HttpFoundation\RequestStack;
@@ -59,9 +58,8 @@ protected function setUp(): void
5958
{
6059
self::bootKernel();
6160

62-
$manager = DoctrineTestHelper::createTestEntityManager();
6361
$this->managerRegistry = self::$kernel->getContainer()->get('doctrine');
64-
$this->repository = $manager->getRepository(Dummy::class);
62+
$this->repository = $this->managerRegistry->getManagerForClass(Dummy::class)->getRepository(Dummy::class);
6563
}
6664

6765
/**

tests/Bridge/Symfony/Bundle/DataPersister/TraceableChainDataPersisterTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,16 @@
1717
use ApiPlatform\Core\DataPersister\ChainDataPersister;
1818
use ApiPlatform\Core\DataPersister\DataPersisterInterface;
1919
use ApiPlatform\Core\DataPersister\ResumableDataPersisterInterface;
20+
use ApiPlatform\Core\Tests\ProphecyTrait;
2021
use PHPUnit\Framework\TestCase;
2122

2223
/**
2324
* @author Anthony GRASSIOT <[email protected]>
2425
*/
2526
class TraceableChainDataPersisterTest extends TestCase
2627
{
28+
use ProphecyTrait;
29+
2730
/** @dataProvider dataPersisterProvider */
2831
public function testPersist($persister, $expected)
2932
{

tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/AuthenticatorManagerPassTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
namespace ApiPlatform\Core\Tests\Bridge\Symfony\Bundle\DependencyInjection\Compiler;
1515

1616
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\AuthenticatorManagerPass;
17+
use ApiPlatform\Core\Tests\ProphecyTrait;
1718
use PHPUnit\Framework\TestCase;
1819
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1920
use Symfony\Component\DependencyInjection\ContainerBuilder;
2021
use Symfony\Component\DependencyInjection\Definition;
2122

2223
final class AuthenticatorManagerPassTest extends TestCase
2324
{
25+
use ProphecyTrait;
26+
2427
private $containerBuilderProphecy;
2528
private $authenticatorManagerPass;
2629

tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/TestClientPassTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection\Compiler\TestClientPass;
1717
use ApiPlatform\Core\Bridge\Symfony\Bundle\Test\Client;
18+
use ApiPlatform\Core\Tests\ProphecyTrait;
1819
use PHPUnit\Framework\TestCase;
1920
use Prophecy\Argument;
2021
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
@@ -23,6 +24,8 @@
2324

2425
final class TestClientPassTest extends TestCase
2526
{
27+
use ProphecyTrait;
28+
2629
private $containerBuilderProphecy;
2730
private $testClientPass;
2831

0 commit comments

Comments
 (0)