From 20e5012477b098631e64d583a8c10310d967b315 Mon Sep 17 00:00:00 2001 From: Julian Hyatt <54834203+julianzimmermann@users.noreply.github.com> Date: Tue, 26 Nov 2024 15:10:31 +0100 Subject: [PATCH] chore: update unit tests to work with latest phpunit (#298) chore: - update unit tests to work with latest phpunit - update main.yml to use php 8.2 8.3 and 8.4 - set php 8.2 as min version for mono repo - set bundle min php version to 8.2 --- .github/workflows/main.yml | 2 +- composer.json | 2 +- .../Builder/RestResponseBuilderTest.php | 48 +++-- .../Categorizer/ItemsCategorizerTest.php | 171 +++++++++++++----- ...anyUserCartsRestApiBusinessFactoryTest.php | 133 +++++++------- 5 files changed, 230 insertions(+), 126 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e882227..2cb9140 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: [ "8.0", "8.1", "8.2" ] + php-versions: [ "8.2", "8.3", "8.4" ] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/composer.json b/composer.json index 71b9be0..ca708de 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "phpstan": "make phpstan" }, "require": { - "php": ">=8.0", + "php": ">=8.2", "fond-of-impala/company-user-carts-rest-api-extension": "^1.0.0", "fond-of-impala/company-user-reference": "^1.0.0", "spryker/cart": "^7.3.0", diff --git a/tests/FondOfImpala/Glue/CompanyUserCartsRestApi/Processor/Builder/RestResponseBuilderTest.php b/tests/FondOfImpala/Glue/CompanyUserCartsRestApi/Processor/Builder/RestResponseBuilderTest.php index e366532..7332cb5 100644 --- a/tests/FondOfImpala/Glue/CompanyUserCartsRestApi/Processor/Builder/RestResponseBuilderTest.php +++ b/tests/FondOfImpala/Glue/CompanyUserCartsRestApi/Processor/Builder/RestResponseBuilderTest.php @@ -17,6 +17,7 @@ use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResourceBuilderInterface; use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResourceInterface; use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface; +use Spryker\Shared\Kernel\Transfer\AbstractTransfer; use Symfony\Component\HttpFoundation\Response; class RestResponseBuilderTest extends Unit @@ -210,6 +211,8 @@ static function (RestErrorMessageTransfer $restErrorMessageTransfer) { */ public function testBuildRestResponse(): void { + $self = $this; + $uuid = 'e6b02939-18fc-4857-837e-f0e8063c306e'; $groupKey = 'foo.bar-1'; $companyUserReference = 'FOO--CU-1'; @@ -223,23 +226,36 @@ public function testBuildRestResponse(): void ->with($this->quoteTransferMock) ->willReturn($this->restCartsAttributesTransferMock); - $this->restResourceBuilderMock->expects(static::atLeastOnce()) + $callCount = $this->atLeastOnce(); + $this->restResourceBuilderMock->expects($callCount) ->method('createRestResource') - ->withConsecutive( - [ - CompanyUserCartsRestApiConfig::RESOURCE_COMPANY_USER_CARTS, - $uuid, - $this->restCartsAttributesTransferMock, - ], - [ - CompanyUserCartsRestApiConfig::RESOURCE_CART_ITEMS, - $groupKey, - $this->restItemsAttributesTransferMock, - ], - )->willReturnOnConsecutiveCalls( - $this->restResourceMock, - $this->relatedRestResourceMock, - ); + ->willReturnCallback(static function (string $type, ?string $id = null, ?AbstractTransfer $attributeTransfer = null) use ($self, $callCount, $uuid, $groupKey) { + /** @phpstan-ignore-next-line */ + if (method_exists($callCount, 'getInvocationCount')) { + /** @phpstan-ignore-next-line */ + $count = $callCount->getInvocationCount(); + } else { + /** @phpstan-ignore-next-line */ + $count = $callCount->numberOfInvocations(); + } + + switch ($count) { + case 1: + $self->assertSame(CompanyUserCartsRestApiConfig::RESOURCE_COMPANY_USER_CARTS, $type); + $self->assertSame($uuid, $id); + $self->assertSame($self->restCartsAttributesTransferMock, $attributeTransfer); + + return $self->restResourceMock; + case 2: + $self->assertSame(CompanyUserCartsRestApiConfig::RESOURCE_CART_ITEMS, $type); + $self->assertSame($groupKey, $id); + $self->assertSame($self->restItemsAttributesTransferMock, $attributeTransfer); + + return $self->relatedRestResourceMock; + } + + throw new Exception('Unexpected call count'); + }); $this->restResourceMock->expects(static::atLeastOnce()) ->method('setPayload') diff --git a/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/Categorizer/ItemsCategorizerTest.php b/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/Categorizer/ItemsCategorizerTest.php index 5e326c0..88109e1 100644 --- a/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/Categorizer/ItemsCategorizerTest.php +++ b/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/Categorizer/ItemsCategorizerTest.php @@ -4,6 +4,7 @@ use ArrayObject; use Codeception\Test\Unit; +use Exception; use FondOfImpala\Zed\CompanyUserCartsRestApi\Business\Finder\ItemFinderInterface; use FondOfImpala\Zed\CompanyUserCartsRestApi\Business\Grouper\ItemsGrouperInterface; use FondOfImpala\Zed\CompanyUserCartsRestApi\Business\Mapper\ItemMapperInterface; @@ -131,6 +132,8 @@ protected function _before(): void */ public function testCategorize(): void { + $self = $this; + $newQuantities = [2, 0, 2]; $currentQuantities = [1, 1]; @@ -143,29 +146,70 @@ public function testCategorize(): void ->method('getItems') ->willReturn(new ArrayObject($this->restCartItemTransferMocks)); - $this->itemFinderMock->expects(static::atLeastOnce()) + $callCount = $this->atLeastOnce(); + $this->itemFinderMock->expects($callCount) ->method('findInGroupedItemsByRestCartItem') - ->withConsecutive( - [$this->itemTransferMocks, $this->restCartItemTransferMocks[0]], - [$this->itemTransferMocks, $this->restCartItemTransferMocks[1]], - [$this->itemTransferMocks, $this->restCartItemTransferMocks[2]], - )->willReturnOnConsecutiveCalls( - null, - $this->itemTransferMocks['foo.bar-1'], - $this->itemTransferMocks['foo.bar-2'], - ); - - $this->itemMapperMock->expects(static::atLeastOnce()) + ->willReturnCallback(static function (array $groupedItemTransfers, RestCartItemTransfer $restCartItemTransfer) use ($self, $callCount) { + /** @phpstan-ignore-next-line */ + if (method_exists($callCount, 'getInvocationCount')) { + /** @phpstan-ignore-next-line */ + $count = $callCount->getInvocationCount(); + } else { + /** @phpstan-ignore-next-line */ + $count = $callCount->numberOfInvocations(); + } + + switch ($count) { + case 1: + $self->assertSame($self->itemTransferMocks, $groupedItemTransfers); + $self->assertSame($self->restCartItemTransferMocks[0], $restCartItemTransfer); + + return null; + case 2: + $self->assertSame($self->itemTransferMocks, $groupedItemTransfers); + $self->assertSame($self->restCartItemTransferMocks[1], $restCartItemTransfer); + + return $self->itemTransferMocks['foo.bar-1']; + case 3: + $self->assertSame($self->itemTransferMocks, $groupedItemTransfers); + $self->assertSame($self->restCartItemTransferMocks[2], $restCartItemTransfer); + + return $self->itemTransferMocks['foo.bar-2']; + } + + throw new Exception('Unexpected call count'); + }); + + $callCount2 = $this->atLeastOnce(); + $this->itemMapperMock->expects($callCount2) ->method('fromRestCartItem') - ->withConsecutive( - [$this->restCartItemTransferMocks[0]], - [$this->restCartItemTransferMocks[1]], - [$this->restCartItemTransferMocks[2]], - )->willReturnOnConsecutiveCalls( - $this->newItemTransferMocks[0], - $this->newItemTransferMocks[1], - $this->newItemTransferMocks[2], - ); + ->willReturnCallback(static function (RestCartItemTransfer $restCartItemTransfer) use ($self, $callCount2) { + /** @phpstan-ignore-next-line */ + if (method_exists($callCount2, 'getInvocationCount')) { + /** @phpstan-ignore-next-line */ + $count = $callCount2->getInvocationCount(); + } else { + /** @phpstan-ignore-next-line */ + $count = $callCount2->numberOfInvocations(); + } + + switch ($count) { + case 1: + $self->assertSame($self->restCartItemTransferMocks[0], $restCartItemTransfer); + + return $self->newItemTransferMocks[0]; + case 2: + $self->assertSame($self->restCartItemTransferMocks[1], $restCartItemTransfer); + + return $self->newItemTransferMocks[1]; + case 3: + $self->assertSame($self->restCartItemTransferMocks[2], $restCartItemTransfer); + + return $self->newItemTransferMocks[2]; + } + + throw new Exception('Unexpected call count'); + }); $this->restCartItemTransferMocks[0]->expects(static::atLeastOnce()) ->method('getQuantity') @@ -226,6 +270,8 @@ public function testCategorize(): void */ public function testCategorizeWithString(): void { + $self = $this; + $newQuantities = [2, 0, '']; $currentQuantities = [1, 1]; @@ -238,29 +284,70 @@ public function testCategorizeWithString(): void ->method('getItems') ->willReturn(new ArrayObject($this->restCartItemTransferMocks)); - $this->itemFinderMock->expects(static::atLeastOnce()) + $callCount = $this->atLeastOnce(); + $this->itemFinderMock->expects($callCount) ->method('findInGroupedItemsByRestCartItem') - ->withConsecutive( - [$this->itemTransferMocks, $this->restCartItemTransferMocks[0]], - [$this->itemTransferMocks, $this->restCartItemTransferMocks[1]], - [$this->itemTransferMocks, $this->restCartItemTransferMocks[2]], - )->willReturnOnConsecutiveCalls( - null, - $this->itemTransferMocks['foo.bar-1'], - $this->itemTransferMocks['foo.bar-2'], - ); - - $this->itemMapperMock->expects(static::atLeastOnce()) + ->willReturnCallback(static function (array $groupedItemTransfers, RestCartItemTransfer $restCartItemTransfer) use ($self, $callCount) { + /** @phpstan-ignore-next-line */ + if (method_exists($callCount, 'getInvocationCount')) { + /** @phpstan-ignore-next-line */ + $count = $callCount->getInvocationCount(); + } else { + /** @phpstan-ignore-next-line */ + $count = $callCount->numberOfInvocations(); + } + + switch ($count) { + case 1: + $self->assertSame($self->itemTransferMocks, $groupedItemTransfers); + $self->assertSame($self->restCartItemTransferMocks[0], $restCartItemTransfer); + + return null; + case 2: + $self->assertSame($self->itemTransferMocks, $groupedItemTransfers); + $self->assertSame($self->restCartItemTransferMocks[1], $restCartItemTransfer); + + return $self->itemTransferMocks['foo.bar-1']; + case 3: + $self->assertSame($self->itemTransferMocks, $groupedItemTransfers); + $self->assertSame($self->restCartItemTransferMocks[2], $restCartItemTransfer); + + return $self->itemTransferMocks['foo.bar-2']; + } + + throw new Exception('Unexpected call count'); + }); + + $callCount2 = $this->atLeastOnce(); + $this->itemMapperMock->expects($callCount2) ->method('fromRestCartItem') - ->withConsecutive( - [$this->restCartItemTransferMocks[0]], - [$this->restCartItemTransferMocks[1]], - [$this->restCartItemTransferMocks[2]], - )->willReturnOnConsecutiveCalls( - $this->newItemTransferMocks[0], - $this->newItemTransferMocks[1], - $this->newItemTransferMocks[2], - ); + ->willReturnCallback(static function (RestCartItemTransfer $restCartItemTransfer) use ($self, $callCount2) { + /** @phpstan-ignore-next-line */ + if (method_exists($callCount2, 'getInvocationCount')) { + /** @phpstan-ignore-next-line */ + $count = $callCount2->getInvocationCount(); + } else { + /** @phpstan-ignore-next-line */ + $count = $callCount2->numberOfInvocations(); + } + + switch ($count) { + case 1: + $self->assertSame($self->restCartItemTransferMocks[0], $restCartItemTransfer); + + return $self->newItemTransferMocks[0]; + case 2: + $self->assertSame($self->restCartItemTransferMocks[1], $restCartItemTransfer); + + return $self->newItemTransferMocks[1]; + case 3: + $self->assertSame($self->restCartItemTransferMocks[2], $restCartItemTransfer); + + return $self->newItemTransferMocks[2]; + } + + throw new Exception('Unexpected call count'); + }); $this->restCartItemTransferMocks[0]->expects(static::atLeastOnce()) ->method('getQuantity') diff --git a/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/CompanyUserCartsRestApiBusinessFactoryTest.php b/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/CompanyUserCartsRestApiBusinessFactoryTest.php index b84a6c1..6b0832d 100644 --- a/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/CompanyUserCartsRestApiBusinessFactoryTest.php +++ b/tests/FondOfImpala/Zed/CompanyUserCartsRestApi/Business/CompanyUserCartsRestApiBusinessFactoryTest.php @@ -3,6 +3,7 @@ namespace FondOfImpala\Zed\CompanyUserCartsRestApi\Business; use Codeception\Test\Unit; +use Exception; use FondOfImpala\Zed\CompanyUserCartsRestApi\Business\Creator\QuoteCreator; use FondOfImpala\Zed\CompanyUserCartsRestApi\Business\Deleter\QuoteDeleter; use FondOfImpala\Zed\CompanyUserCartsRestApi\Business\Expander\QuoteCreateExpanderInterface; @@ -138,35 +139,30 @@ protected function getLogger(?LoggerConfigInterface $loggerConfig = null): Logge */ public function testCreateQuoteCreator(): void { + $self = $this; + $this->containerMock->expects(static::atLeastOnce()) ->method('has') ->willReturn(true); - $this->containerMock->expects(static::atLeastOnce()) + $this->containerMock->expects($this->atLeastOnce()) ->method('get') - ->withConsecutive( - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_CART], - [CompanyUserCartsRestApiDependencyProvider::FACADE_CART], - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION], - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION], - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - [CompanyUserCartsRestApiDependencyProvider::PLUGIN_QUOTE_CREATE_EXPANDER], - )->willReturnOnConsecutiveCalls( - $this->companyUserReferenceFacadeMock, - $this->cartFacadeMock, - $this->cartFacadeMock, - $this->quoteFacadeMock, - $this->companyUserReferenceFacadeMock, - $this->permissionFacadeMock, - $this->companyUserReferenceFacadeMock, - $this->permissionFacadeMock, - $this->quoteFacadeMock, - [], - ); + ->willReturnCallback(static function (string $key) use ($self) { + switch ($key) { + case CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE: + return $self->companyUserReferenceFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_CART: + return $self->cartFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE: + return $self->quoteFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION: + return $self->permissionFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::PLUGIN_QUOTE_CREATE_EXPANDER: + return []; + } + + throw new Exception('Unexpected call'); + }); static::assertInstanceOf( QuoteCreator::class, @@ -179,31 +175,28 @@ public function testCreateQuoteCreator(): void */ public function testCreateQuoteUpdater(): void { + $self = $this; + $this->containerMock->expects(static::atLeastOnce()) ->method('has') ->willReturn(true); - $this->containerMock->expects(static::atLeastOnce()) + $this->containerMock->expects($this->atLeastOnce()) ->method('get') - ->withConsecutive( - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION], - [CompanyUserCartsRestApiDependencyProvider::FACADE_CART], - [CompanyUserCartsRestApiDependencyProvider::FACADE_CART], - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION], - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - )->willReturnOnConsecutiveCalls( - $this->quoteFacadeMock, - $this->companyUserReferenceFacadeMock, - $this->permissionFacadeMock, - $this->cartFacadeMock, - $this->cartFacadeMock, - $this->companyUserReferenceFacadeMock, - $this->permissionFacadeMock, - $this->quoteFacadeMock, - ); + ->willReturnCallback(static function (string $key) use ($self) { + switch ($key) { + case CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE: + return $self->companyUserReferenceFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_CART: + return $self->cartFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE: + return $self->quoteFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION: + return $self->permissionFacadeMock; + } + + throw new Exception('Unexpected call'); + }); static::assertInstanceOf( QuoteUpdater::class, @@ -216,23 +209,26 @@ public function testCreateQuoteUpdater(): void */ public function testCreateQuoteDeleter(): void { + $self = $this; + $this->containerMock->expects(static::atLeastOnce()) ->method('has') ->willReturn(true); - $this->containerMock->expects(static::atLeastOnce()) + $this->containerMock->expects($this->atLeastOnce()) ->method('get') - ->withConsecutive( - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION], - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - )->willReturnOnConsecutiveCalls( - $this->quoteFacadeMock, - $this->companyUserReferenceFacadeMock, - $this->permissionFacadeMock, - $this->quoteFacadeMock, - ); + ->willReturnCallback(static function (string $key) use ($self) { + switch ($key) { + case CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE: + return $self->companyUserReferenceFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE: + return $self->quoteFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION: + return $self->permissionFacadeMock; + } + + throw new Exception('Unexpected call'); + }); static::assertInstanceOf( QuoteDeleter::class, @@ -245,21 +241,26 @@ public function testCreateQuoteDeleter(): void */ public function testCreateQuoteFinder(): void { + $self = $this; + $this->containerMock->expects(static::atLeastOnce()) ->method('has') ->willReturn(true); - $this->containerMock->expects(static::atLeastOnce()) + $this->containerMock->expects($this->atLeastOnce()) ->method('get') - ->withConsecutive( - [CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE], - [CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION], - )->willReturnOnConsecutiveCalls( - $this->quoteFacadeMock, - $this->companyUserReferenceFacadeMock, - $this->permissionFacadeMock, - ); + ->willReturnCallback(static function (string $key) use ($self) { + switch ($key) { + case CompanyUserCartsRestApiDependencyProvider::FACADE_COMPANY_USER_REFERENCE: + return $self->companyUserReferenceFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_QUOTE: + return $self->quoteFacadeMock; + case CompanyUserCartsRestApiDependencyProvider::FACADE_PERMISSION: + return $self->permissionFacadeMock; + } + + throw new Exception('Unexpected call'); + }); static::assertInstanceOf( QuoteFinder::class,