From 5c319cc0b6fba62ff0b6d91eea87692f26dadc4e Mon Sep 17 00:00:00 2001 From: Jakub Tobiasz Date: Sat, 29 Apr 2023 21:04:37 +0200 Subject: [PATCH] Cover product integrity scenarios in API --- .../checkout/product_integrity_validation.feature | 2 +- src/Sylius/Behat/Context/Api/Shop/CartContext.php | 2 ++ .../Api/Shop/Checkout/CheckoutCompleteContext.php | 13 +++++++++++++ .../Behat/Context/Api/Shop/CheckoutContext.php | 11 ++++++++++- src/Sylius/Behat/Context/Setup/ProductContext.php | 4 ++++ .../Resources/config/services/contexts/setup.xml | 1 + .../config/suites/api/checkout/paying_for_order.yml | 1 + 7 files changed, 32 insertions(+), 2 deletions(-) diff --git a/features/checkout/product_integrity_validation.feature b/features/checkout/product_integrity_validation.feature index f6e41afe27..214dff8a15 100644 --- a/features/checkout/product_integrity_validation.feature +++ b/features/checkout/product_integrity_validation.feature @@ -23,7 +23,7 @@ Feature: Order products integrity Then I should be informed that this product has been disabled And I should not see the thank you page - @ui + @ui @api Scenario: Preventing customer from completing checkout with no longer available product variant Given I have "Small" variant of product "Super Cool T-Shirt" in the cart And I have proceeded selecting "Offline" payment method diff --git a/src/Sylius/Behat/Context/Api/Shop/CartContext.php b/src/Sylius/Behat/Context/Api/Shop/CartContext.php index 35d6fc8b56..5f6b151df3 100644 --- a/src/Sylius/Behat/Context/Api/Shop/CartContext.php +++ b/src/Sylius/Behat/Context/Api/Shop/CartContext.php @@ -115,6 +115,7 @@ final class CartContext implements Context /** * @When /^I add ("[^"]+" variant) of (this product) to the (cart)$/ * @When /^I add ("[^"]+" variant) of (product "[^"]+") to the (cart)$/ + * @When /^I have ("[^"]+" variant) of (product "[^"]+") in the (cart)$/ */ public function iAddVariantOfThisProductToTheCart( ProductVariantInterface $productVariant, @@ -122,6 +123,7 @@ final class CartContext implements Context ?string $tokenValue, ): void { $this->putProductVariantToCart($productVariant, $tokenValue, 1); + $this->sharedStorage->set('variant', $productVariant); } /** diff --git a/src/Sylius/Behat/Context/Api/Shop/Checkout/CheckoutCompleteContext.php b/src/Sylius/Behat/Context/Api/Shop/Checkout/CheckoutCompleteContext.php index 5d864507e6..d368dc7d07 100644 --- a/src/Sylius/Behat/Context/Api/Shop/Checkout/CheckoutCompleteContext.php +++ b/src/Sylius/Behat/Context/Api/Shop/Checkout/CheckoutCompleteContext.php @@ -18,7 +18,9 @@ use Sylius\Behat\Client\ApiClientInterface; use Sylius\Behat\Client\RequestFactoryInterface; use Sylius\Behat\Context\Api\Resources; use Sylius\Behat\Service\SharedStorageInterface; +use Sylius\Component\Core\Model\ProductVariantInterface; use Symfony\Component\HttpFoundation\Request as HTTPRequest; +use Webmozart\Assert\Assert; final class CheckoutCompleteContext implements Context { @@ -44,4 +46,15 @@ final class CheckoutCompleteContext implements Context $this->client->executeCustomRequest($request); } + + /** + * @Then /^I should be informed that (this variant) has been disabled$/ + */ + public function iShouldBeInformedThatThisVariantHasBeenDisabled(ProductVariantInterface $productVariant): void + { + $lastResponseContent = $this->client->getLastResponse()->getContent(); + + Assert::string($lastResponseContent); + Assert::contains($lastResponseContent, sprintf('This product %s has been disabled.', $productVariant->getName())); + } } diff --git a/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php b/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php index 9ef9d3694b..775fb94426 100644 --- a/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php +++ b/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php @@ -469,7 +469,6 @@ final class CheckoutContext implements Context * @Given I completed the payment step with :paymentMethod payment method * @When I choose :paymentMethod payment method * @When I select :paymentMethod payment method - * @When I have proceeded selecting :paymentMethod payment method * @When I proceed selecting :paymentMethod payment method * @When /^the (?:customer|visitor) proceed with ("[^"]+" payment)$/ * @Given /^the (?:customer|visitor) has proceeded ("[^"]+" payment)$/ @@ -505,6 +504,16 @@ final class CheckoutContext implements Context $this->iChoosePaymentMethod($paymentMethod); } + /** + * @When I have proceeded selecting :paymentMethod payment method + */ + public function iHaveProceededSelectingPaymentMethod(PaymentMethodInterface $paymentMethod): void + { + $this->addressOrder($this->getArrayWithDefaultAddress()); + $this->iCompleteTheShippingStepWithFirstShippingMethod(); + $this->iChoosePaymentMethod($paymentMethod); + } + /** * @Then /^(address "[^"]+", "[^"]+", "[^"]+", "[^"]+", "[^"]+", "[^"]+") should be filled as (billing) address$/ * @Then /^the visitor should has ("[^"]+", "[^"]+", "[^"]+", "[^"]+", "[^"]+" specified as) (billing) address$/ diff --git a/src/Sylius/Behat/Context/Setup/ProductContext.php b/src/Sylius/Behat/Context/Setup/ProductContext.php index 7f6c2f5ac4..11eae9dca8 100644 --- a/src/Sylius/Behat/Context/Setup/ProductContext.php +++ b/src/Sylius/Behat/Context/Setup/ProductContext.php @@ -28,6 +28,7 @@ use Sylius\Component\Core\Model\ProductTranslationInterface; use Sylius\Component\Core\Model\ProductVariantInterface; use Sylius\Component\Core\Model\TaxonInterface; use Sylius\Component\Core\Repository\ProductRepositoryInterface; +use Sylius\Component\Core\Repository\ProductVariantRepositoryInterface; use Sylius\Component\Core\Uploader\ImageUploaderInterface; use Sylius\Component\Product\Factory\ProductFactoryInterface; use Sylius\Component\Product\Generator\ProductVariantGeneratorInterface; @@ -59,6 +60,7 @@ final class ProductContext implements Context private FactoryInterface $productImageFactory, private ObjectManager $objectManager, private ProductVariantGeneratorInterface $productVariantGenerator, + private ProductVariantRepositoryInterface $productVariantRepository, private ProductVariantResolverInterface $defaultVariantResolver, private ImageUploaderInterface $imageUploader, private SlugGeneratorInterface $slugGenerator, @@ -1089,6 +1091,8 @@ final class ProductContext implements Context */ public function theSizeColorVariantOfThisProductIsDisabled(ProductVariantInterface $productVariant): void { + /** @var ProductVariantInterface $productVariant */ + $productVariant = $this->productVariantRepository->find($productVariant->getId()); $productVariant->setEnabled(false); $this->objectManager->flush(); diff --git a/src/Sylius/Behat/Resources/config/services/contexts/setup.xml b/src/Sylius/Behat/Resources/config/services/contexts/setup.xml index a364891901..555c4c5287 100644 --- a/src/Sylius/Behat/Resources/config/services/contexts/setup.xml +++ b/src/Sylius/Behat/Resources/config/services/contexts/setup.xml @@ -153,6 +153,7 @@ + diff --git a/src/Sylius/Behat/Resources/config/suites/api/checkout/paying_for_order.yml b/src/Sylius/Behat/Resources/config/suites/api/checkout/paying_for_order.yml index a125e8ce17..27acc58525 100644 --- a/src/Sylius/Behat/Resources/config/suites/api/checkout/paying_for_order.yml +++ b/src/Sylius/Behat/Resources/config/suites/api/checkout/paying_for_order.yml @@ -15,6 +15,7 @@ default: - sylius.behat.context.transform.locale - sylius.behat.context.transform.payment - sylius.behat.context.transform.product + - sylius.behat.context.transform.product_variant - sylius.behat.context.transform.shared_storage - sylius.behat.context.transform.shipping_method - sylius.behat.context.transform.zone