Skip to content

Commit

Permalink
SUPESC-514 Fixed default quote change is showing a message to a non-q…
Browse files Browse the repository at this point in the history
…uote owner (#9419)

SUPESC-514 Fixed default quote change is showing a message to a non-quote owner
  • Loading branch information
dan-miniyarov-spryker authored Jul 19, 2022
1 parent 2d2e930 commit e744755
Show file tree
Hide file tree
Showing 7 changed files with 191 additions and 4 deletions.
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"spryker/quote-extension": "^1.1.0",
"spryker/session": "^3.0.0 || ^4.0.0",
"spryker/store": "^1.0.0",
"spryker/transfer": "^3.25.0",
"spryker/util-date-time": "^1.0.0",
"spryker/zed-request": "^3.6.0"
},
Expand Down
5 changes: 5 additions & 0 deletions dependency.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"include": {
"spryker/transfer": "Provides transfer objects definition with `::get*OrFail()` functionality."
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ public function addDefaultQuoteChangedMessage(QuoteTransfer $quoteTransfer): voi
return;
}

if (!$this->isQuoteChangedByQuoteOwner($quoteTransfer)) {
return;
}

$isQuoteDefault = $this->multiCartRepository->isQuoteDefault(
$quoteTransfer->getIdQuote(),
$quoteTransfer->getCustomer()->getCustomerReference(),
Expand All @@ -72,4 +76,14 @@ public function addDefaultQuoteChangedMessage(QuoteTransfer $quoteTransfer): voi

$this->messengerFacade->addInfoMessage($messageTransfer);
}

/**
* @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
*
* @return bool
*/
protected function isQuoteChangedByQuoteOwner(QuoteTransfer $quoteTransfer): bool
{
return $quoteTransfer->getCustomerOrFail()->getCustomerReference() === $quoteTransfer->getCustomerReference();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ public function getQuoteCollectionByCriteria(QuoteCriteriaFilterTransfer $quoteC

/**
* Specification:
* - Checks if quote is default for provided QuoteTransfer::$customer.
* - Adds info message if quote was not default.
* - Does nothing if provided `QuoteTransfer.customer` is not the quote owner, or if the quote is default for `QuoteTransfer.customer`.
* - Adds info message otherwise.
*
* @api
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ class AddDefaultQuoteChangedMessageQuoteUpdateBeforePlugin extends AbstractPlugi
{
/**
* {@inheritDoc}
* - Checks if quote is default for provided QuoteTransfer::$customer.
* - Adds info message if quote was not default.
* - Does nothing if provided `QuoteTransfer.customer` is not the quote owner, or if the quote is default for `QuoteTransfer.customer`.
* - Adds info message otherwise.
* - Should be executed before `DeactivateQuotesBeforeQuoteSavePlugin`.
*
* @api
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
<?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\Business\MultiCartFacade;

use Codeception\Test\Unit;
use Generated\Shared\DataBuilder\CustomerBuilder;
use Generated\Shared\Transfer\CustomerTransfer;
use Generated\Shared\Transfer\QuoteTransfer;
use Spryker\Zed\MultiCart\Dependency\Facade\MultiCartToMessengerFacadeInterface;
use Spryker\Zed\MultiCart\MultiCartDependencyProvider;

/**
* Auto-generated group annotations
*
* @group SprykerTest
* @group Zed
* @group MultiCart
* @group Business
* @group MultiCartFacade
* @group AddDefaultQuoteChangedMessageTest
* Add your own group annotations below this line
*/
class AddDefaultQuoteChangedMessageTest extends Unit
{
/**
* @var string
*/
protected const CUSTOMER_REFERENCE_1 = 'customer-reference-1';

/**
* @var string
*/
protected const CUSTOMER_REFERENCE_2 = 'customer-reference-2';

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

/**
* @dataProvider quoteOwnerCasesDataProvider
*
* @param bool $isDefaultQuote
* @param bool $isMessageExpected
*
* @return void
*/
public function testMessagesForQuoteOwner(bool $isDefaultQuote, bool $isMessageExpected): void
{
// Arrange
$multiCartToMessengerFacadeMock = $this->setupMultiCartToMessengerFacadeMock();
$quoteTransfer = $this->setupQuote(
static::CUSTOMER_REFERENCE_1,
$isDefaultQuote,
static::CUSTOMER_REFERENCE_1,
);

// Assert
$multiCartToMessengerFacadeMock
->expects($isMessageExpected ? $this->once() : $this->never())
->method('addInfoMessage');

// Act
$this->tester->getFacade()->addDefaultQuoteChangedMessage($quoteTransfer);
}

/**
* @dataProvider nonQuoteOwnerCasesDataProvider
*
* @param bool $isDefaultQuote
* @param bool $isMessageExpected
*
* @return void
*/
public function testMessagesForNonQuoteOwner(bool $isDefaultQuote, bool $isMessageExpected): void
{
// Arrange
$multiCartToMessengerFacadeMock = $this->setupMultiCartToMessengerFacadeMock();
$quoteTransfer = $this->setupQuote(
static::CUSTOMER_REFERENCE_1,
$isDefaultQuote,
static::CUSTOMER_REFERENCE_2,
);

// Assert
$multiCartToMessengerFacadeMock
->expects($isMessageExpected ? $this->once() : $this->never())
->method('addInfoMessage');

// Act
$this->tester->getFacade()->addDefaultQuoteChangedMessage($quoteTransfer);
}

/**
* @return array<array<bool>>
*/
public function quoteOwnerCasesDataProvider(): array
{
return [
'Test that message is added when quote is not default' => [false, true],
'Test that message is not added when quote is default' => [true, false],
];
}

/**
* @return array<array<bool>>
*/
public function nonQuoteOwnerCasesDataProvider(): array
{
return [
'Test that message is not added when quote is not default for its owner' => [false, false],
'Test that message is not added when quote is default for its owner' => [true, false],
];
}

/**
* @param string $quoteOwnerCustomerReference
* @param bool $isDefaultQuote
* @param string $currentUserCustomerReference
*
* @return \Generated\Shared\Transfer\QuoteTransfer
*/
protected function setupQuote(string $quoteOwnerCustomerReference, bool $isDefaultQuote, string $currentUserCustomerReference): QuoteTransfer
{
$quoteTransfer = $this->tester->havePersistentQuote([
QuoteTransfer::CUSTOMER => $this->buildCustomerTransfer($quoteOwnerCustomerReference),
QuoteTransfer::IS_DEFAULT => $isDefaultQuote,
]);

if ($quoteOwnerCustomerReference !== $currentUserCustomerReference) {
$quoteTransfer->setCustomer($this->buildCustomerTransfer($currentUserCustomerReference));
}

return $quoteTransfer;
}

/**
* @param string $customerReference
*
* @return \Generated\Shared\Transfer\CustomerTransfer
*/
protected function buildCustomerTransfer(string $customerReference): CustomerTransfer
{
return (new CustomerBuilder())->build()
->setCustomerReference($customerReference);
}

/**
* @return \PHPUnit\Framework\MockObject\MockObject|\Spryker\Zed\MultiCart\Dependency\Facade\MultiCartToMessengerFacadeInterface
*/
protected function setupMultiCartToMessengerFacadeMock(): MultiCartToMessengerFacadeInterface
{
$multiCartToMessengerFacadeMock = $this
->getMockBuilder(MultiCartToMessengerFacadeInterface::class)
->getMock();

$this->tester->setDependency(MultiCartDependencyProvider::FACADE_MESSENGER, $multiCartToMessengerFacadeMock);

return $multiCartToMessengerFacadeMock;
}
}
1 change: 1 addition & 0 deletions tests/SprykerTest/Zed/MultiCart/codeception.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ suites:
- \SprykerTest\Shared\Propel\Helper\TransactionHelper
- \SprykerTest\Shared\Customer\Helper\CustomerDataHelper
- \SprykerTest\Shared\Quote\Helper\PersistentQuoteHelper
- \SprykerTest\Zed\Testify\Helper\BusinessHelper

0 comments on commit e744755

Please sign in to comment.