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 17af5b1126..29763d1e8a 100644
--- a/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php
+++ b/src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php
@@ -477,7 +477,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)$/
@@ -513,6 +512,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