diff --git a/.github/workflows/php.yaml b/.github/workflows/php.yaml index 1110dcd..4bf1b56 100644 --- a/.github/workflows/php.yaml +++ b/.github/workflows/php.yaml @@ -13,10 +13,10 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - php-version: ['7.1', '7.2', '7.3', '7.4'] + php-version: ['7.3', '7.4'] dependencies: [''] include: - - { php-version: '7.1', dependencies: '--prefer-lowest' } + - { php-version: '7.3', dependencies: '--prefer-lowest' } - { php-version: '8.0', dependencies: '--ignore-platform-req=php' } name: PHP ${{ matrix.php-version }} ${{ matrix.dependencies }} (unit tests) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11927d2..a08a314 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ ## Unreleased +### Changed +- Require PHP ^7.3 ## 4.1.0 - 2021-08-19 ### Added diff --git a/composer.json b/composer.json index 5e1c03b..f15dac3 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ } ], "require": { - "php": "^7.1 || ^8.0", + "php": "^7.3 || ^8.0", "ext-hash": "*", "ext-json": "*", "beberlei/assert": "^2.8 || ^3.0", @@ -28,16 +28,17 @@ }, "require-dev": { "ergebnis/composer-normalize": "^2.4", - "lmc/coding-standard": "^1.3 || ^2.0", + "http-interop/http-factory-guzzle": "^1.2", + "lmc/coding-standard": "^3.0.0", "php-coveralls/php-coveralls": "^2.4", "php-http/guzzle6-adapter": "^1.1.1 || ^2.0", "php-http/mock-client": "^1.0", "php-mock/php-mock-phpunit": "^2.1.2", "php-parallel-lint/php-parallel-lint": "^1.1", - "phpstan/extension-installer": "^1.0.5", - "phpstan/phpstan": "^0.12.48", - "phpstan/phpstan-phpunit": "^0.12.16", - "phpunit/phpunit": "^7.5.20 || ^8.0 || ^9.0", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.6.15", "symfony/var-dumper": "^3.3 || ^4.0 || ^5.0" }, "minimum-stability": "stable", @@ -54,9 +55,9 @@ }, "config": { "allow-plugins": { - "composer/package-versions-deprecated": true, "dealerdirect/phpcodesniffer-composer-installer": true, "ergebnis/composer-normalize": true, + "php-http/discovery": true, "phpstan/extension-installer": true }, "sort-packages": true @@ -68,15 +69,15 @@ "@test" ], "analyze": [ - "vendor/bin/ecs check src/ tests/ --ansi", + "vendor/bin/ecs check src/ tests/ ecs.php --ansi", "vendor/bin/phpstan analyze -c phpstan.neon --ansi" ], "fix": [ "@composer normalize", - "./vendor/bin/ecs check ./src/ ./tests/ --ansi --fix" + "./vendor/bin/ecs check ./src/ ./tests/ ecs.php --ansi --fix" ], "lint": [ - "vendor/bin/parallel-lint -j 10 ./src ./tests", + "vendor/bin/parallel-lint -j 10 ./src ./tests ecs.php", "@composer validate", "@composer normalize --dry-run" ], diff --git a/easy-coding-standard.yaml b/easy-coding-standard.yaml deleted file mode 100644 index 50404c6..0000000 --- a/easy-coding-standard.yaml +++ /dev/null @@ -1,12 +0,0 @@ -imports: - - { resource: 'vendor/lmc/coding-standard/easy-coding-standard.yaml' } - -services: - PhpCsFixer\Fixer\PhpUnit\PhpUnitTestAnnotationFixer: - style: annotation - -parameters: - skip: - # Skip class suffix sniff for Matej Commands - Symplify\CodingStandard\Sniffs\Naming\ClassNameSuffixByParentSniff: - - 'src/Model/Command/*.php' diff --git a/ecs.php b/ecs.php new file mode 100644 index 0000000..89fa21d --- /dev/null +++ b/ecs.php @@ -0,0 +1,32 @@ +parameters(); + $parameters->set( + Option::SKIP, + [ + ClassNameSuffixByParentSniff::class => ['src/Model/Command/*.php'], + ] + ); + + $containerConfigurator->import(__DIR__ . '/vendor/lmc/coding-standard/ecs.php'); + + $services = $containerConfigurator->services(); + + // All tests must have @test annotation instead of "test" prefix. + $services->set(PhpUnitTestAnnotationFixer::class) + ->call('configure', [['style' => 'annotation']]); + + // Force line length + $services->set(LineLengthFixer::class) + ->call( + 'configure', + [['line_length' => 120, 'break_long_lines' => true, 'inline_short_lines' => false]] + ); +}; diff --git a/phpstan.neon b/phpstan.neon index c7e26fc..ea6f9ca 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,8 +9,8 @@ parameters: - '#Unsafe usage of new static\(\)#' - message: '#expects class-string#' path: tests/ - - message: '#parameter \$factoryArguments with no typehint specified#' - path: tests/unit/RequestBuilder/RequestBuilderFactoryTest.php + - message: '#Unsafe access to private constant .+ through static::#' + path: tests/ checkGenericClassInNonGenericObjectType: false checkMissingIterableValueType: false diff --git a/phpunit.xml.dist b/phpunit.xml.dist index b5f06ea..8fef3e9 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,8 +1,9 @@ + @@ -13,11 +14,11 @@ - - + + ./src - - + + diff --git a/src/Http/ResponseDecoder.php b/src/Http/ResponseDecoder.php index 9ae083a..c254dab 100644 --- a/src/Http/ResponseDecoder.php +++ b/src/Http/ResponseDecoder.php @@ -22,6 +22,7 @@ public function decode(ResponseInterface $httpResponse, string $responseClass = $responseId = $httpResponse->getHeader(RequestManager::RESPONSE_ID_HEADER)[0] ?? null; + /** @phpstan-ignore-next-line */ return new $responseClass( (int) $responseData->commands->number_of_commands, (int) $responseData->commands->number_of_successful_commands, diff --git a/src/Model/Command/UserMerge.php b/src/Model/Command/UserMerge.php index 2649746..8bdc517 100644 --- a/src/Model/Command/UserMerge.php +++ b/src/Model/Command/UserMerge.php @@ -41,8 +41,11 @@ public static function mergeInto(string $targetUserId, string $sourceUserIdToBeD * * @return static */ - public static function mergeFromSourceToTargetUser(string $sourceUserIdToBeDeleted, string $targetUserId, int $timestamp = null): self - { + public static function mergeFromSourceToTargetUser( + string $sourceUserIdToBeDeleted, + string $targetUserId, + int $timestamp = null + ): self { return new static($targetUserId, $sourceUserIdToBeDeleted, $timestamp); } diff --git a/src/Model/Request.php b/src/Model/Request.php index 8116295..03373ea 100644 --- a/src/Model/Request.php +++ b/src/Model/Request.php @@ -20,8 +20,13 @@ class Request /** @var string */ private $responseClass; - public function __construct(string $path, string $method, array $data = [], string $requestId = null, string $responseClass = Response::class) - { + public function __construct( + string $path, + string $method, + array $data = [], + string $requestId = null, + string $responseClass = Response::class + ) { $this->path = $path; $this->method = $method; $this->data = $data; diff --git a/src/Model/Response/RecommendationsResponse.php b/src/Model/Response/RecommendationsResponse.php index e33f6d7..75d663a 100644 --- a/src/Model/Response/RecommendationsResponse.php +++ b/src/Model/Response/RecommendationsResponse.php @@ -14,25 +14,27 @@ class RecommendationsResponse extends Response public function getInteraction(): CommandResponse { - return $this->getCommandResponse(static::INTERACTION_INDEX); + return $this->getCommandResponse(self::INTERACTION_INDEX); } public function getUserMerge(): CommandResponse { - return $this->getCommandResponse(static::USER_MERGE_INDEX); + return $this->getCommandResponse(self::USER_MERGE_INDEX); } public function getRecommendation(): CommandResponse { - return $this->getCommandResponse(static::RECOMMENDATION_INDEX); + return $this->getCommandResponse(self::RECOMMENDATION_INDEX); } protected function decodeRawCommandResponses(array $commandResponses): array { $decodedResponses = []; foreach ($commandResponses as $index => $rawCommandResponse) { - if ($index === static::RECOMMENDATION_INDEX) { - $decodedResponses[] = RecommendationCommandResponse::createFromRawCommandResponseObject($rawCommandResponse); + if ($index === self::RECOMMENDATION_INDEX) { + $decodedResponses[] = RecommendationCommandResponse::createFromRawCommandResponseObject( + $rawCommandResponse + ); } else { $decodedResponses[] = CommandResponse::createFromRawCommandResponseObject($rawCommandResponse); } diff --git a/src/RequestBuilder/CampaignRequestBuilder.php b/src/RequestBuilder/CampaignRequestBuilder.php index 7f39ba8..54aa56f 100644 --- a/src/RequestBuilder/CampaignRequestBuilder.php +++ b/src/RequestBuilder/CampaignRequestBuilder.php @@ -64,6 +64,11 @@ public function build(): Request } Assertion::batchSize($this->commands); - return new Request(static::ENDPOINT_PATH, RequestMethodInterface::METHOD_POST, $this->commands, $this->requestId); + return new Request( + static::ENDPOINT_PATH, + RequestMethodInterface::METHOD_POST, + $this->commands, + $this->requestId + ); } } diff --git a/src/RequestBuilder/EventsRequestBuilder.php b/src/RequestBuilder/EventsRequestBuilder.php index c88f9b2..745955d 100644 --- a/src/RequestBuilder/EventsRequestBuilder.php +++ b/src/RequestBuilder/EventsRequestBuilder.php @@ -88,6 +88,11 @@ public function build(): Request } Assertion::batchSize($this->commands); - return new Request(static::ENDPOINT_PATH, RequestMethodInterface::METHOD_POST, $this->commands, $this->requestId); + return new Request( + static::ENDPOINT_PATH, + RequestMethodInterface::METHOD_POST, + $this->commands, + $this->requestId + ); } } diff --git a/tests/integration/IntegrationTestCase.php b/tests/integration/IntegrationTestCase.php index efabd49..5cdf5f3 100644 --- a/tests/integration/IntegrationTestCase.php +++ b/tests/integration/IntegrationTestCase.php @@ -35,9 +35,18 @@ protected static function createMatejInstance(): Matej protected function assertResponseCommandStatuses(Response $response, string ...$expectedCommandStatuses): void { $this->assertSame(count($expectedCommandStatuses), $response->getNumberOfCommands()); - $this->assertSame(count(array_intersect($expectedCommandStatuses, ['OK'])), $response->getNumberOfSuccessfulCommands()); - $this->assertSame(count(array_intersect($expectedCommandStatuses, ['INVALID'])), $response->getNumberOfFailedCommands()); - $this->assertSame(count(array_intersect($expectedCommandStatuses, ['SKIPPED'])), $response->getNumberOfSkippedCommands()); + $this->assertSame( + count(array_intersect($expectedCommandStatuses, ['OK'])), + $response->getNumberOfSuccessfulCommands() + ); + $this->assertSame( + count(array_intersect($expectedCommandStatuses, ['INVALID'])), + $response->getNumberOfFailedCommands() + ); + $this->assertSame( + count(array_intersect($expectedCommandStatuses, ['SKIPPED'])), + $response->getNumberOfSkippedCommands() + ); $commandResponses = $response->getCommandResponses(); foreach ($expectedCommandStatuses as $key => $expectedStatus) { diff --git a/tests/integration/RequestBuilder/EventsRequestBuilderTest.php b/tests/integration/RequestBuilder/EventsRequestBuilderTest.php index a547210..c5c8b40 100644 --- a/tests/integration/RequestBuilder/EventsRequestBuilderTest.php +++ b/tests/integration/RequestBuilder/EventsRequestBuilderTest.php @@ -23,15 +23,15 @@ class EventsRequestBuilderTest extends IntegrationTestCase public static function setUpBeforeClass(): void { - $matej = static::createMatejInstance(); - static::setupItemProperties($matej); - static::waitForItemPropertiesSetup($matej); + $matej = self::createMatejInstance(); + self::setupItemProperties($matej); + self::waitForItemPropertiesSetup($matej); } public static function tearDownAfterClass(): void { - $matej = static::createMatejInstance(); - static::resetItemProperties($matej); + $matej = self::createMatejInstance(); + self::resetItemProperties($matej); } /** @test */ @@ -40,7 +40,7 @@ public function shouldThrowExceptionWhenSendingBlankRequest(): void $this->expectException(LogicException::class); $this->expectExceptionMessage('At least one command must be added to the builder before sending the request'); - static::createMatejInstance() + self::createMatejInstance() ->request() ->events() ->send(); @@ -49,7 +49,7 @@ public function shouldThrowExceptionWhenSendingBlankRequest(): void /** @test */ public function shouldExecuteInteractionAndUserMergeAndItemPropertyCommands(): void { - $response = static::createMatejInstance() + $response = self::createMatejInstance() ->request() ->events() ->addInteraction(Interaction::withItem('search', 'user-a', 'item-a')) @@ -75,7 +75,7 @@ public function shouldExecuteInteractionAndUserMergeAndItemPropertyCommands(): v private static function setupItemProperties(Matej $matej): void { $request = $matej->request()->setupItemProperties(); - foreach (static::PROPERTIES_LIST as $property) { + foreach (self::PROPERTIES_LIST as $property) { $request->addProperty(ItemPropertySetup::string($property)); } $request->send(); @@ -92,7 +92,7 @@ private static function waitForItemPropertiesSetup(Matej $matej): void $properties[] = $property->name; } - if (!array_diff(static::PROPERTIES_LIST, $properties)) { + if (!array_diff(self::PROPERTIES_LIST, $properties)) { return; } usleep(100000); # 0.1s @@ -102,7 +102,7 @@ private static function waitForItemPropertiesSetup(Matej $matej): void private static function resetItemProperties(Matej $matej): void { $request = $matej->request()->deleteItemProperties(); - foreach (static::PROPERTIES_LIST as $property) { + foreach (self::PROPERTIES_LIST as $property) { $request->addProperty(ItemPropertySetup::string($property)); } $request->send(); diff --git a/tests/integration/RequestBuilder/ItemPropertiesSetupRequestBuilderTest.php b/tests/integration/RequestBuilder/ItemPropertiesSetupRequestBuilderTest.php index 6a4dad6..13790f4 100644 --- a/tests/integration/RequestBuilder/ItemPropertiesSetupRequestBuilderTest.php +++ b/tests/integration/RequestBuilder/ItemPropertiesSetupRequestBuilderTest.php @@ -19,7 +19,9 @@ class ItemPropertiesSetupRequestBuilderTest extends IntegrationTestCase public function shouldThrowExceptionWhenSendingBlankRequests(ItemPropertiesSetupRequestBuilder $builder): void { $this->expectException(LogicException::class); - $this->expectExceptionMessage('At least one ItemPropertySetup command must be added to the builder before sending the request'); + $this->expectExceptionMessage( + 'At least one ItemPropertySetup command must be added to the builder before sending the request' + ); $builder->send(); } diff --git a/tests/integration/RequestBuilder/SortingRequestTest.php b/tests/integration/RequestBuilder/SortingRequestTest.php index 7301d41..1568d8a 100644 --- a/tests/integration/RequestBuilder/SortingRequestTest.php +++ b/tests/integration/RequestBuilder/SortingRequestTest.php @@ -47,7 +47,9 @@ public function shouldReturnInvalidCommandOnInvalidModelName(): void { $response = static::createMatejInstance() ->request() - ->sorting(ItemSorting::create('user-b', ['item-a', 'item-b', 'itemC-c'])->setModelName('invalid-model-name')) + ->sorting( + ItemSorting::create('user-b', ['item-a', 'item-b', 'itemC-c'])->setModelName('invalid-model-name') + ) ->send(); $this->assertInstanceOf(SortingResponse::class, $response); diff --git a/tests/unit/Http/RequestManagerTest.php b/tests/unit/Http/RequestManagerTest.php index 552faa1..f1e7ee4 100644 --- a/tests/unit/Http/RequestManagerTest.php +++ b/tests/unit/Http/RequestManagerTest.php @@ -22,7 +22,9 @@ class RequestManagerTest extends UnitTestCase */ public function shouldSendAndDecodeRequest(): void { - $dummyHttpResponse = $this->createJsonResponseFromFile(__DIR__ . '/Fixtures/response-one-successful-command.json'); + $dummyHttpResponse = $this->createJsonResponseFromFile( + __DIR__ . '/Fixtures/response-one-successful-command.json' + ); $mockClient = new Client(); $mockClient->addResponse($dummyHttpResponse); @@ -43,7 +45,7 @@ public function shouldSendAndDecodeRequest(): void // Assert properties of the send request $recordedRequests = $mockClient->getRequests(); $this->assertCount(1, $recordedRequests); - $this->assertRegExp( + $this->assertMatchesRegularExpression( '~https\://account\-id\.matej\.lmc\.cz/foo/endpoint\?hmac_timestamp\=[0-9]+&hmac_sign\=[[:alnum:]]~', $recordedRequests[0]->getUri()->__toString() ); diff --git a/tests/unit/Http/ResponseDecoderTest.php b/tests/unit/Http/ResponseDecoderTest.php index 9a2e70a..3dac0a5 100644 --- a/tests/unit/Http/ResponseDecoderTest.php +++ b/tests/unit/Http/ResponseDecoderTest.php @@ -111,8 +111,8 @@ public function shouldDecodeRecommendationResponse(): void $this->assertContainsOnlyInstancesOf(\stdClass::class, $decodedResponse->getRecommendation()->getData()); foreach ($decodedResponse->getRecommendation()->getData() as $recommendedItem) { - $this->assertObjectHasAttribute('item_id', $recommendedItem); - $this->assertObjectHasAttribute('item_url', $recommendedItem); + $this->assertObjectHasProperty('item_id', $recommendedItem); + $this->assertObjectHasProperty('item_url', $recommendedItem); } } } diff --git a/tests/unit/MatejTest.php b/tests/unit/MatejTest.php index a100349..d5f073c 100644 --- a/tests/unit/MatejTest.php +++ b/tests/unit/MatejTest.php @@ -21,7 +21,9 @@ public function shouldBeInstantiable(): void /** @test */ public function shouldExecuteRequestViaBuilder(): void { - $dummyHttpResponse = $this->createJsonResponseFromFile(__DIR__ . '/Http/Fixtures/response-one-successful-command.json'); + $dummyHttpResponse = $this->createJsonResponseFromFile( + __DIR__ . '/Http/Fixtures/response-one-successful-command.json' + ); $mockClient = new Client(); $mockClient->addResponse($dummyHttpResponse); @@ -52,7 +54,9 @@ public function shouldExecuteRequestViaBuilder(): void /** @test */ public function shouldOverwriteBaseUrl(): void { - $dummyHttpResponse = $this->createJsonResponseFromFile(__DIR__ . '/Http/Fixtures/response-one-successful-command.json'); + $dummyHttpResponse = $this->createJsonResponseFromFile( + __DIR__ . '/Http/Fixtures/response-one-successful-command.json' + ); $mockClient = new Client(); $mockClient->addResponse($dummyHttpResponse); diff --git a/tests/unit/Model/Command/ItemPropertySetupTest.php b/tests/unit/Model/Command/ItemPropertySetupTest.php index eabbeaa..5098a4e 100644 --- a/tests/unit/Model/Command/ItemPropertySetupTest.php +++ b/tests/unit/Model/Command/ItemPropertySetupTest.php @@ -41,7 +41,9 @@ public function shouldBeInstantiableViaNamedConstructors( public function shouldNotAllowItemIdAsPropertyName(string $constructorName): void { $this->expectException(DomainException::class); - $this->expectExceptionMessage('Cannot manipulate with property "item_id" - it is used by Matej to identify items.'); + $this->expectExceptionMessage( + 'Cannot manipulate with property "item_id" - it is used by Matej to identify items.' + ); ItemPropertySetup::$constructorName('item_id'); } diff --git a/tests/unit/Model/Command/ItemPropertyTest.php b/tests/unit/Model/Command/ItemPropertyTest.php index 2e3f0c6..838c0b5 100644 --- a/tests/unit/Model/Command/ItemPropertyTest.php +++ b/tests/unit/Model/Command/ItemPropertyTest.php @@ -13,7 +13,9 @@ class ItemPropertyTest extends TestCase public function shouldNotAllowItemIdInProperties(): void { $this->expectException(DomainException::class); - $this->expectExceptionMessage('Cannot update value of "item_id" property - it is used by Matej to identify the item and cannot be altered once created.'); + $this->expectExceptionMessage( + 'Cannot update value of "item_id" property - it is used by Matej to identify the item and cannot be altered once created.' + ); ItemProperty::create('exampleItemId', ['item_id' => 'customItemId']); } diff --git a/tests/unit/Model/Command/UserMergeTest.php b/tests/unit/Model/Command/UserMergeTest.php index b59eb29..5851853 100644 --- a/tests/unit/Model/Command/UserMergeTest.php +++ b/tests/unit/Model/Command/UserMergeTest.php @@ -24,7 +24,9 @@ public function shouldGenerateCorrectSignature(): void public function shouldThrowExceptionWhenMergingSameUsers(): void { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('You have to provide different source and target user id in UserMerge ("test-user" set for both)'); + $this->expectExceptionMessage( + 'You have to provide different source and target user id in UserMerge ("test-user" set for both)' + ); UserMerge::mergeInto('test-user', 'test-user'); } diff --git a/tests/unit/Model/Response/RecommendationsResponseTest.php b/tests/unit/Model/Response/RecommendationsResponseTest.php index e38b607..adc361c 100644 --- a/tests/unit/Model/Response/RecommendationsResponseTest.php +++ b/tests/unit/Model/Response/RecommendationsResponseTest.php @@ -29,7 +29,11 @@ public function shouldBeInstantiable(array $recommendationResponseData): void 'data' => $recommendationResponseData, ]; - $response = new RecommendationsResponse(3, 3, 0, 0, [$interactionCommandResponse, $userMergeCommandResponse, $recommendationCommandResponse]); + $response = new RecommendationsResponse(3, 3, 0, 0, [ + $interactionCommandResponse, + $userMergeCommandResponse, + $recommendationCommandResponse, + ]); $this->assertTrue($response->getInteraction()->isSuccessful()); $this->assertTrue($response->getUserMerge()->isSuccessful()); diff --git a/tests/unit/Model/Response/SortingResponseTest.php b/tests/unit/Model/Response/SortingResponseTest.php index 2aa7844..da81af1 100644 --- a/tests/unit/Model/Response/SortingResponseTest.php +++ b/tests/unit/Model/Response/SortingResponseTest.php @@ -26,7 +26,11 @@ public function shouldBeInstantiable(): void 'data' => ['MOCK' => 'SORTING'], ]; - $response = new SortingResponse(3, 3, 0, 0, [$interactionCommandResponse, $userMergeCommandResponse, $sortingCommandReponse]); + $response = new SortingResponse(3, 3, 0, 0, [ + $interactionCommandResponse, + $userMergeCommandResponse, + $sortingCommandReponse, + ]); $this->assertTrue($response->getInteraction()->isSuccessful()); $this->assertTrue($response->getUserMerge()->isSuccessful()); diff --git a/tests/unit/RequestBuilder/ForgetRequestBuilderTest.php b/tests/unit/RequestBuilder/ForgetRequestBuilderTest.php index d8dff67..127444a 100644 --- a/tests/unit/RequestBuilder/ForgetRequestBuilderTest.php +++ b/tests/unit/RequestBuilder/ForgetRequestBuilderTest.php @@ -55,7 +55,9 @@ public function shouldThrowExceptionWhenBuildingEmptyCommands(): void $builder = new ForgetRequestBuilder(); $this->expectException(LogicException::class); - $this->expectExceptionMessage('At least one UserForget command must be added to the builder before sending the request'); + $this->expectExceptionMessage( + 'At least one UserForget command must be added to the builder before sending the request' + ); $builder->build(); } diff --git a/tests/unit/RequestBuilder/RequestBuilderFactoryTest.php b/tests/unit/RequestBuilder/RequestBuilderFactoryTest.php index 2bdf5d0..65705c7 100644 --- a/tests/unit/RequestBuilder/RequestBuilderFactoryTest.php +++ b/tests/unit/RequestBuilder/RequestBuilderFactoryTest.php @@ -20,6 +20,7 @@ class RequestBuilderFactoryTest extends TestCase /** * @test * @dataProvider provideBuilderMethods + * @param mixed $factoryArguments */ public function shouldInstantiateBuilderToBuildAndSendRequest( string $factoryMethod,