Skip to content

Commit

Permalink
CC-34501: Initialisation Order Amendment Process (#11163)
Browse files Browse the repository at this point in the history
CC-34501 Initialisation Order Amendment Process
  • Loading branch information
dmiseev authored Nov 15, 2024
1 parent 13a13ab commit 41ed1e5
Show file tree
Hide file tree
Showing 10 changed files with 213 additions and 3 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"license": "proprietary",
"require": {
"php": ">=8.2",
"spryker/cart-reorder-extension": "^1.0.0",
"spryker/customer": "^7.0.0",
"spryker/kernel": "^3.33.0",
"spryker/messenger": "^3.0.0",
Expand All @@ -15,7 +16,7 @@
"spryker/quote-extension": "^1.1.0",
"spryker/session": "^3.0.0 || ^4.0.0",
"spryker/store": "^1.19.0",
"spryker/transfer": "^3.25.0",
"spryker/transfer": "^3.27.0",
"spryker/util-date-time": "^1.0.0",
"spryker/zed-request": "^3.6.0"
},
Expand Down
2 changes: 1 addition & 1 deletion dependency.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"include": {
"spryker/transfer": "Provides transfer objects definition with `::get*OrFail()` functionality."
"spryker/transfer": "Provides transfer objects definition with strict types."
}
}
2 changes: 2 additions & 0 deletions src/Spryker/Client/MultiCart/MultiCartConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ public function getDuplicatedQuoteName(): string
/**
* @api
*
* @deprecated Will be removed without replacement.
*
* @return string
*/
public function getReorderQuoteName(): string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
use Spryker\Client\PersistentCartExtension\Dependency\Plugin\PersistentCartChangeExpanderPluginInterface;

/**
* @deprecated Use {@link \Spryker\Zed\MultiCart\Communication\Plugin\CartReorder\DefaultReorderQuoteNameCartPreReorderPlugin} instead.
*
* @method \Spryker\Client\MultiCart\MultiCartFactory getFactory()
*/
class ReorderPersistentCartChangeExpanderPlugin extends AbstractPlugin implements PersistentCartChangeExpanderPluginInterface
Expand Down
8 changes: 8 additions & 0 deletions src/Spryker/Shared/MultiCart/Transfer/multi_cart.transfer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,12 @@
<transfer name="Currency">
</transfer>

<transfer name="CartReorderRequest" strict="true">
<property name="orderReference" type="string"/>
</transfer>

<transfer name="CartReorder" strict="true">
<property name="quote" type="Quote"/>
</transfer>

</transfers>
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?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\MultiCart\Communication\Plugin\CartReorder;

use Generated\Shared\Transfer\CartReorderRequestTransfer;
use Generated\Shared\Transfer\CartReorderTransfer;
use Spryker\Zed\CartReorderExtension\Dependency\Plugin\CartPreReorderPluginInterface;
use Spryker\Zed\Kernel\Communication\AbstractPlugin;

/**
* @method \Spryker\Zed\MultiCart\Business\MultiCartFacadeInterface getFacade()
* @method \Spryker\Zed\MultiCart\MultiCartConfig getConfig()
* @method \Spryker\Zed\MultiCart\Communication\MultiCartCommunicationFactory getFactory()
*/
class DefaultReorderQuoteNameCartPreReorderPlugin extends AbstractPlugin implements CartPreReorderPluginInterface
{
/**
* {@inheritDoc}
* - Requires `CartReorderTransfer.quote` to be set.
* - Requires `CartReorderRequestTransfer.orderReference` to be set.
* - Sets quote reorder name to `CartReorderTransfer.quote.name`.
*
* @api
*
* @param \Generated\Shared\Transfer\CartReorderRequestTransfer $cartReorderRequestTransfer
* @param \Generated\Shared\Transfer\CartReorderTransfer $cartReorderTransfer
*
* @return \Generated\Shared\Transfer\CartReorderTransfer
*/
public function preReorder(
CartReorderRequestTransfer $cartReorderRequestTransfer,
CartReorderTransfer $cartReorderTransfer
): CartReorderTransfer {
$cartReorderTransfer->getQuoteOrFail()->setName(
sprintf($this->getConfig()->getReorderQuoteName(), $cartReorderRequestTransfer->getOrderReferenceOrFail()),
);

return $cartReorderTransfer;
}
}
13 changes: 13 additions & 0 deletions src/Spryker/Zed/MultiCart/MultiCartConfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,17 @@ public function getGuestQuoteDefaultName(): string
{
return $this->getSharedConfig()->getGuestQuoteDefaultName();
}

/**
* Specification:
* - Returns the default name for the reorder quote.
*
* @api
*
* @return string
*/
public function getReorderQuoteName(): string
{
return $this->getSharedConfig()->getReorderQuoteName();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<?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\MultiCart\Communication\Plugin\CartReorder;

use Codeception\Test\Unit;
use Generated\Shared\Transfer\CartReorderRequestTransfer;
use Generated\Shared\Transfer\CartReorderTransfer;
use Generated\Shared\Transfer\QuoteTransfer;
use Spryker\Shared\Kernel\Transfer\Exception\NullValueException;
use Spryker\Zed\MultiCart\Communication\Plugin\CartReorder\DefaultReorderQuoteNameCartPreReorderPlugin;
use SprykerTest\Zed\MultiCart\MultiCartCommunicationTester;

/**
* Auto-generated group annotations
*
* @group SprykerTest
* @group Zed
* @group MultiCart
* @group Communication
* @group Plugin
* @group CartReorder
* @group DefaultReorderQuoteNameCartPreReorderPluginTest
* Add your own group annotations below this line
*/
class DefaultReorderQuoteNameCartPreReorderPluginTest extends Unit
{
/**
* @var string
*/
protected const FAKE_ORDER_REFERENCE = 'DE--123';

/**
* @var string
*/
protected const FAKE_QUOTE_NAME = 'FAKE_QUOTE_NAME';

/**
* @var \SprykerTest\Zed\MultiCart\MultiCartCommunicationTester
*/
protected MultiCartCommunicationTester $tester;

/**
* @return void
*/
public function testShouldSetDefaultQuoteNameForReorder(): void
{
// Arrange
$cartReorderRequestTransfer = (new CartReorderRequestTransfer())
->setOrderReference(static::FAKE_ORDER_REFERENCE);

$cartReorderTransfer = (new CartReorderTransfer())
->setQuote(new QuoteTransfer());

// Arrange
$cartReorderTransfer = (new DefaultReorderQuoteNameCartPreReorderPlugin())
->preReorder($cartReorderRequestTransfer, $cartReorderTransfer);

// Assert
$this->assertSame('Reorder from Order DE--123', $cartReorderTransfer->getQuoteOrFail()->getName());
}

/**
* @return void
*/
public function testShouldThrowsNullValueExceptionWhenQuoteIsNotProvided(): void
{
// Arrange
$cartReorderRequestTransfer = (new CartReorderRequestTransfer())
->setOrderReference(static::FAKE_ORDER_REFERENCE);

$cartReorderTransfer = new CartReorderTransfer();

// Assert
$this->expectException(NullValueException::class);
$this->expectExceptionMessage('Property "quote" of transfer `Generated\Shared\Transfer\CartReorderTransfer` is null.');

// Act
(new DefaultReorderQuoteNameCartPreReorderPlugin())->preReorder($cartReorderRequestTransfer, $cartReorderTransfer);
}

/**
* @return void
*/
public function testShouldThrowsNullValueExceptionWhenOrderReferenceIsNotProvided(): void
{
// Arrange
$cartReorderRequestTransfer = new CartReorderRequestTransfer();
$cartReorderTransfer = (new CartReorderTransfer())
->setQuote(new QuoteTransfer());

// Assert
$this->expectException(NullValueException::class);
$this->expectExceptionMessage('Property "orderReference" of transfer `Generated\Shared\Transfer\CartReorderRequestTransfer` is null.');

// Act
(new DefaultReorderQuoteNameCartPreReorderPlugin())->preReorder($cartReorderRequestTransfer, $cartReorderTransfer);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?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\MultiCart;

use Codeception\Actor;

/**
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = null)
*
* @SuppressWarnings(PHPMD)
*/
class MultiCartCommunicationTester extends Actor
{
use _generated\MultiCartCommunicationTesterActions;
}
9 changes: 8 additions & 1 deletion tests/SprykerTest/Zed/MultiCart/codeception.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ coverage:

suites:
Business:
path: .
path: Business
actor: MultiCartBusinessTester
modules:
enabled:
Expand All @@ -26,3 +26,10 @@ suites:
- \SprykerTest\Shared\Customer\Helper\CustomerDataHelper
- \SprykerTest\Shared\Quote\Helper\PersistentQuoteHelper
- \SprykerTest\Zed\Testify\Helper\BusinessHelper

Communication:
path: Communication
actor: MultiCartCommunicationTester
modules:
enabled:
- Asserts

0 comments on commit 41ed1e5

Please sign in to comment.