Skip to content

Commit

Permalink
Refactor change payment methods behats
Browse files Browse the repository at this point in the history
  • Loading branch information
AdamKasp committed Oct 14, 2020
1 parent 759fcc1 commit f068817
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,24 @@ Feature: Changing the method after order confirmation
And the store has a product "PHP T-Shirt" priced at "$19.99"
And the store ships everywhere for free

@ui
@ui @api
Scenario: Retrying the payment with offline payment
Given I added product "PHP T-Shirt" to the cart
And I complete addressing step with email "john@example.com" and "United States" based billing address
And I have proceeded selecting "Free" shipping method
And I have proceeded selecting "Cash on delivery" payment method
And I have confirmed order
When I go to the change payment method page
And I try to pay with "Offline" payment method
Then I should see the thank you page
When I change payment method to "Offline"
Then I should have chosen "Offline" payment method

@ui
@ui @api
Scenario: Retrying the payment with offline payment works correctly together with inventory
Given there is 1 unit of product "PHP T-Shirt" available in the inventory
And this product is tracked by the inventory
And I added product "PHP T-Shirt" to the cart
And I complete addressing step with email "john@example.com" and "United States" based billing address
And I have proceeded selecting "Free" shipping method
And I have proceeded selecting "Cash on delivery" payment method
And I have confirmed order
When I go to the change payment method page
And I try to pay with "Offline" payment method
Then I should see the thank you page

@api
Scenario: Changing the payment method for placed order
Given I added product "PHP T-Shirt" to the cart
When I complete addressing step with email "john@example.com" and "United States" based billing address
And I select "Free" shipping method
And I select "Cash on delivery" payment method
And I confirm my order
And I change payment method to "Offline"
Then I should have chosen "Offline" payment method for my order
When I change payment method to "Offline"
Then I should have chosen "Offline" payment method
2 changes: 2 additions & 0 deletions src/Sylius/Behat/Context/Api/Shop/CheckoutContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ public function iProvideAdditionalNotesLike(string $notes): void
/**
* @Given I confirmed my order
* @When I confirm my order
* @When I have confirmed order
* @When I try to confirm my order
* @When /^the (?:visitor|customer) confirm his order$/
*/
Expand Down Expand Up @@ -340,6 +341,7 @@ public function iConfirmMyOrder(): void
* @Given /^the (?:visitor|customer) has proceeded ("[^"]+" shipping method)$/
* @When /^the visitor try to proceed with ("[^"]+" shipping method) in the customer cart$/
* @When I try to change shipping method to :shippingMethod
* @When I have proceeded selecting :shippingMethod shipping method
*/
public function iProceededWithShippingMethod(ShippingMethodInterface $shippingMethod): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Sylius/Behat/Context/Api/Shop/OrderContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ public function theShouldHaveUnitPriceDiscountedFor(ProductInterface $product, i
}

/**
* @Then I should have chosen :paymentMethod payment method for my order
* @Then I should have chosen :paymentMethod payment method
*/
public function iShouldHaveChosenPaymentMethodForMyOrder(PaymentMethod $paymentMethod): void
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

use Behat\Behat\Context\Context;
use Sylius\Behat\Page\Shop\Order\ShowPageInterface;
use Sylius\Behat\Page\Shop\Order\ThankYouPageInterface;
use Sylius\Component\Core\Model\OrderInterface;
use Webmozart\Assert\Assert;

Expand All @@ -23,23 +24,27 @@ final class CheckoutOrderDetailsContext implements Context
/** @var ShowPageInterface */
private $orderDetails;

public function __construct(ShowPageInterface $orderDetails)
/** @var ThankYouPageInterface */
private $thankYouPage;

public function __construct(ShowPageInterface $orderDetails, ThankYouPageInterface $thankYouPage)
{
$this->orderDetails = $orderDetails;
$this->thankYouPage = $thankYouPage;
}

/**
* @When /^I want to browse order details for (this order)$/
*/
public function iWantToBrowseOrderDetailsForThisOrder(OrderInterface $order)
public function iWantToBrowseOrderDetailsForThisOrder(OrderInterface $order): void
{
$this->orderDetails->open(['tokenValue' => $order->getTokenValue()]);
}

/**
* @When I try to pay with :paymentMethodName payment method
*/
public function iChangePaymentMethodTo($paymentMethodName)
public function iChangePaymentMethodTo(string $paymentMethodName): void
{
$this->orderDetails->choosePaymentMethod($paymentMethodName);
$this->orderDetails->pay();
Expand All @@ -48,15 +53,15 @@ public function iChangePaymentMethodTo($paymentMethodName)
/**
* @Then I should be able to pay (again)
*/
public function iShouldBeAbleToPay()
public function iShouldBeAbleToPay(): void
{
Assert::true($this->orderDetails->hasPayAction());
}

/**
* @Then I should not be able to pay (again)
*/
public function iShouldNotBeAbleToPay()
public function iShouldNotBeAbleToPay(): void
{
Assert::false($this->orderDetails->hasPayAction());
}
Expand All @@ -68,4 +73,13 @@ public function iShouldSeeAsNumberOfItems(int $quantity): void
{
Assert::same($this->orderDetails->getAmountOfItems(), $quantity);
}

/**
* @Then I should have chosen :paymentMethodName payment method
*/
public function iShouldHaveChosenPaymentMethod(string $paymentMethodName): void
{
$this->thankYouPage->goToTheChangePaymentMethodPage();
Assert::same($this->orderDetails->getChosenPaymentMethod(), $paymentMethodName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

use Behat\Behat\Context\Context;
use Sylius\Behat\Page\Shop\Account\Order\ShowPageInterface;
use Sylius\Behat\Page\Shop\Order\ShowPageInterface as OrderDetailsPage;
use Sylius\Behat\Page\Shop\Order\ThankYouPageInterface;
use Sylius\Component\Core\Model\PaymentMethodInterface;
use Sylius\Component\Core\Repository\OrderRepositoryInterface;
Expand All @@ -28,17 +29,22 @@ final class CheckoutThankYouContext implements Context
/** @var ShowPageInterface */
private $orderShowPage;

/** @var OrderDetailsPage */
private $orderDetails;

/** @var OrderRepositoryInterface */
private $orderRepository;

public function __construct(
ThankYouPageInterface $thankYouPage,
ShowPageInterface $orderShowPage,
OrderRepositoryInterface $orderRepository
OrderRepositoryInterface $orderRepository,
OrderDetailsPage $orderDetails
) {
$this->thankYouPage = $thankYouPage;
$this->orderShowPage = $orderShowPage;
$this->orderRepository = $orderRepository;
$this->orderDetails = $orderDetails;
}

/**
Expand All @@ -57,6 +63,16 @@ public function iProceedToTheRegistration(): void
$this->thankYouPage->createAccount();
}

/**
* @When I change payment method to :paymentMethodName
*/
public function iChoosePaymentMethod(string $paymentMethodName): void
{
$this->iGoToTheChangePaymentMethodPage();
$this->orderDetails->choosePaymentMethod($paymentMethodName);
$this->orderDetails->pay();
}

/**
* @Then I should be able to access this order's details
*/
Expand Down
13 changes: 13 additions & 0 deletions src/Sylius/Behat/Page/Shop/Order/ShowPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,19 @@ public function getAmountOfItems(): int
return count($paymentItems);
}

public function getChosenPaymentMethod(): string
{
$paymentItems = $this->getDocument()->findAll('css', '[data-test-payment-item]');

foreach ($paymentItems as $method) {
if ($method->find('css', '[data-test-payment-method-select]')->hasAttribute('checked')) {
return $method->find('css', 'a')->getText();
}
}

return '';
}

protected function getDefinedElements(): array
{
return array_merge(parent::getDefinedElements(), [
Expand Down
2 changes: 2 additions & 0 deletions src/Sylius/Behat/Page/Shop/Order/ShowPageInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@ public function choosePaymentMethod(string $paymentMethodName): void;
public function getNotifications(): array;

public function getAmountOfItems(): int;

public function getChosenPaymentMethod(): string;
}
4 changes: 3 additions & 1 deletion src/Sylius/Behat/Resources/config/services/contexts/ui.xml
Original file line number Diff line number Diff line change
Expand Up @@ -319,12 +319,14 @@

<service id="sylius.behat.context.ui.shop.checkout.thank_you" class="Sylius\Behat\Context\Ui\Shop\Checkout\CheckoutThankYouContext">
<argument type="service" id="sylius.behat.page.shop.order.thank_you" />
<argument type="service" id="sylius.behat.page.shop.account.order.show"></argument>
<argument type="service" id="sylius.behat.page.shop.account.order.show" />
<argument type="service" id="sylius.repository.order" />
<argument type="service" id="sylius.behat.page.shop.order.show" />
</service>

<service id="sylius.behat.context.ui.shop.checkout.order_details" class="Sylius\Behat\Context\Ui\Shop\Checkout\CheckoutOrderDetailsContext">
<argument type="service" id="sylius.behat.page.shop.order.show" />
<argument type="service" id="sylius.behat.page.shop.order.thank_you" />
</service>

<service id="sylius.behat.context.ui.shop.checkout.addressing" class="Sylius\Behat\Context\Ui\Shop\Checkout\CheckoutAddressingContext">
Expand Down

0 comments on commit f068817

Please sign in to comment.