-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CC-34924: Reworked cart reorder filter plugins. (#11229)
Rework cart reorder filter plugins.
- Loading branch information
Showing
5 changed files
with
178 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
...Bundle/Communication/Plugin/CartReorder/ProductBundleCartReorderOrderItemFilterPlugin.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
<?php | ||
|
||
/** | ||
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved. | ||
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. | ||
*/ | ||
|
||
namespace Spryker\Zed\ProductBundle\Communication\Plugin\CartReorder; | ||
|
||
use ArrayObject; | ||
use Generated\Shared\Transfer\CartReorderRequestTransfer; | ||
use Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartReorderOrderItemFilterPluginInterface; | ||
use Spryker\Zed\Kernel\Communication\AbstractPlugin; | ||
|
||
/** | ||
* @method \Spryker\Zed\ProductBundle\Business\ProductBundleFacadeInterface getFacade() | ||
* @method \Spryker\Zed\ProductBundle\Communication\ProductBundleCommunicationFactory getFactory() | ||
* @method \Spryker\Zed\ProductBundle\ProductBundleConfig getConfig() | ||
* @method \Spryker\Zed\ProductBundle\Persistence\ProductBundleQueryContainerInterface getQueryContainer() | ||
*/ | ||
class ProductBundleCartReorderOrderItemFilterPlugin extends AbstractPlugin implements CartReorderOrderItemFilterPluginInterface | ||
{ | ||
/** | ||
* {@inheritDoc} | ||
* - Expects `CartReorderRequestTransfer.bundleItemIdentifiers` to be set. | ||
* - Requires `CartReorderRequestTransfer.order.items.idSalesOrderItem` to be set. | ||
* - Filters reorder product bundle items. | ||
* - Expands bundle items with first `salesOrderItemId` that belongs to the product bundle. | ||
* - Returns only the filtered bundle items if `CartReorderRequestTransfer.salesOrderItemIds` is empty. | ||
* - Appends the filtered bundle items to the provided `filteredItems`. | ||
* | ||
* @api | ||
* | ||
* @param \ArrayObject<array-key, \Generated\Shared\Transfer\ItemTransfer> $filteredItems | ||
* @param \Generated\Shared\Transfer\CartReorderRequestTransfer $cartReorderRequestTransfer | ||
* | ||
* @return \ArrayObject<array-key, \Generated\Shared\Transfer\ItemTransfer> | ||
*/ | ||
public function filter(ArrayObject $filteredItems, CartReorderRequestTransfer $cartReorderRequestTransfer): ArrayObject | ||
{ | ||
$filteredBundleItems = $this->getFacade()->filterReorderBundleItems($cartReorderRequestTransfer, $cartReorderRequestTransfer->getOrderOrFail()); | ||
|
||
if ($filteredBundleItems->count() && $cartReorderRequestTransfer->getSalesOrderItemIds() === []) { | ||
return $filteredBundleItems; | ||
} | ||
|
||
foreach ($filteredBundleItems as $filteredBundleItem) { | ||
$filteredItems->append($filteredBundleItem); | ||
} | ||
|
||
return $filteredItems; | ||
} | ||
} |
120 changes: 120 additions & 0 deletions
120
...le/Communication/Plugin/CartReorder/ProductBundleCartReorderOrderItemFilterPluginTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
<?php | ||
|
||
/** | ||
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved. | ||
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file. | ||
*/ | ||
|
||
namespace SprykerTest\Zed\ProductBundle\Communication\Plugin\CartReorder; | ||
|
||
use ArrayObject; | ||
use Codeception\Test\Unit; | ||
use Generated\Shared\Transfer\CartReorderRequestTransfer; | ||
use Generated\Shared\Transfer\ItemTransfer; | ||
use Generated\Shared\Transfer\OrderTransfer; | ||
use Spryker\Zed\ProductBundle\Communication\Plugin\CartReorder\ProductBundleCartReorderOrderItemFilterPlugin; | ||
use SprykerTest\Zed\ProductBundle\ProductBundleCommunicationTester; | ||
|
||
/** | ||
* Auto-generated group annotations | ||
* | ||
* @group SprykerTest | ||
* @group Zed | ||
* @group ProductBundle | ||
* @group Communication | ||
* @group Plugin | ||
* @group CartReorder | ||
* @group ProductBundleCartReorderOrderItemFilterPluginTest | ||
* Add your own group annotations below this line | ||
*/ | ||
class ProductBundleCartReorderOrderItemFilterPluginTest extends Unit | ||
{ | ||
/** | ||
* @var \SprykerTest\Zed\ProductBundle\ProductBundleCommunicationTester | ||
*/ | ||
protected ProductBundleCommunicationTester $tester; | ||
|
||
/** | ||
* @return void | ||
*/ | ||
public function testShouldReplaceFilterItemsToBundleItems(): void | ||
{ | ||
// Arrange | ||
$orderTransfer = (new OrderTransfer()) | ||
->setItems(new ArrayObject([ | ||
(new ItemTransfer())->setIdSalesOrderItem(1), | ||
(new ItemTransfer())->setIdSalesOrderItem(2)->setRelatedBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setIdSalesOrderItem(3)->setRelatedBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setIdSalesOrderItem(4), | ||
(new ItemTransfer())->setIdSalesOrderItem(5)->setRelatedBundleItemIdentifier('2'), | ||
(new ItemTransfer())->setIdSalesOrderItem(6)->setRelatedBundleItemIdentifier('2'), | ||
])) | ||
->setBundleItems(new ArrayObject([ | ||
(new ItemTransfer())->setBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setBundleItemIdentifier('2'), | ||
])); | ||
|
||
$cartReorderRequestTransfer = (new CartReorderRequestTransfer()) | ||
->setOrder($orderTransfer) | ||
->setSalesOrderItemIds([]) | ||
->setBundleItemIdentifiers(['1']); | ||
|
||
$filteredItems = new ArrayObject([ | ||
(new ItemTransfer())->setIdSalesOrderItem(1), | ||
(new ItemTransfer())->setIdSalesOrderItem(2)->setRelatedBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setIdSalesOrderItem(3)->setRelatedBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setIdSalesOrderItem(4), | ||
(new ItemTransfer())->setIdSalesOrderItem(5)->setRelatedBundleItemIdentifier('2'), | ||
(new ItemTransfer())->setIdSalesOrderItem(6)->setRelatedBundleItemIdentifier('2'), | ||
]); | ||
|
||
// Arrange | ||
$filteredItems = (new ProductBundleCartReorderOrderItemFilterPlugin())->filter( | ||
$filteredItems, | ||
$cartReorderRequestTransfer, | ||
); | ||
|
||
// Assert | ||
$this->assertCount(1, $filteredItems); | ||
} | ||
|
||
/** | ||
* @return void | ||
*/ | ||
public function testShouldAppendFilterItemsWithBundleItems(): void | ||
{ | ||
// Arrange | ||
$orderTransfer = (new OrderTransfer()) | ||
->setItems(new ArrayObject([ | ||
(new ItemTransfer())->setIdSalesOrderItem(1), | ||
(new ItemTransfer())->setIdSalesOrderItem(2)->setRelatedBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setIdSalesOrderItem(3)->setRelatedBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setIdSalesOrderItem(4), | ||
(new ItemTransfer())->setIdSalesOrderItem(5)->setRelatedBundleItemIdentifier('2'), | ||
(new ItemTransfer())->setIdSalesOrderItem(6)->setRelatedBundleItemIdentifier('2'), | ||
])) | ||
->setBundleItems(new ArrayObject([ | ||
(new ItemTransfer())->setBundleItemIdentifier('1'), | ||
(new ItemTransfer())->setBundleItemIdentifier('2'), | ||
])); | ||
|
||
$cartReorderRequestTransfer = (new CartReorderRequestTransfer()) | ||
->setOrder($orderTransfer) | ||
->setSalesOrderItemIds([1, 4]) | ||
->setBundleItemIdentifiers(['1']); | ||
|
||
$filteredItems = new ArrayObject([ | ||
(new ItemTransfer())->setIdSalesOrderItem(1), | ||
(new ItemTransfer())->setIdSalesOrderItem(4), | ||
]); | ||
|
||
// Arrange | ||
$filteredItems = (new ProductBundleCartReorderOrderItemFilterPlugin())->filter( | ||
$filteredItems, | ||
$cartReorderRequestTransfer, | ||
); | ||
|
||
// Assert | ||
$this->assertCount(3, $filteredItems); | ||
} | ||
} |