From 75e00f5a50a07fed9a76eb3445d9dfa5fc87c813 Mon Sep 17 00:00:00 2001
From: Vasyl Kozyrenko <vkozyrenko@magento.com>
Date: Thu, 29 Dec 2016 21:04:25 +0200
Subject: [PATCH] MTA-3901: Add variation for Partial Refund an order placed
 through Braintree with Partial capture

---
 ...ateOnlineCreditMemoBraintreePaypalTest.xml | 12 ++--
 .../CreateOnlineCreditMemoBraintreeTest.xml   | 66 ++++++++++++++++++-
 .../Checkout/Test/Fixture/Cart/Items.php      | 25 +++++--
 .../Checkout/Test/TestStep/PlaceOrderStep.php | 23 +++++--
 .../TestCase/CreateOnlineCreditMemoTest.xml   |  6 +-
 .../Block/Adminhtml/Order/AbstractForm.php    |  4 +-
 .../Adminhtml/Order/Creditmemo/Form/Items.php |  2 +-
 .../AssertRefundInCommentsHistory.php         | 11 ++--
 .../Sales/Test/Fixture/OrderInjectable.xml    |  1 +
 .../TestStep/CreateOnlineCreditMemoStep.php   | 27 +++++---
 .../Sales/Test/TestStep/SubmitOrderStep.php   | 30 ++++++---
 11 files changed, 159 insertions(+), 48 deletions(-)

diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreePaypalTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreePaypalTest.xml
index 2f14871eda9..de243f9f1b2 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreePaypalTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreePaypalTest.xml
@@ -13,8 +13,10 @@
             <data name="customer/dataset" xsi:type="string">default</data>
             <data name="checkoutMethod" xsi:type="string">login</data>
             <data name="taxRule" xsi:type="string">us_ca_ny_rule</data>
-            <data name="refundedPrices" xsi:type="array">
-                <item name="0" xsi:type="string">139.90</item>
+            <data name="order/data/price/refund" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="grand_refund_total" xsi:type="string">139.90</item>
+                </item>
             </data>
             <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data>
             <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
@@ -33,8 +35,10 @@
             <data name="customer/dataset" xsi:type="string">default</data>
             <data name="checkoutMethod" xsi:type="string">login</data>
             <data name="taxRule" xsi:type="string">us_ca_ny_rule</data>
-            <data name="refundedPrices" xsi:type="array">
-                <item name="0" xsi:type="string">621.20</item>
+            <data name="order/data/price/refund" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="grand_refund_total" xsi:type="string">621.20</item>
+                </item>
             </data>
             <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data>
             <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreeTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreeTest.xml
index 8eeec7908c7..c8cf3920902 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreeTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOnlineCreditMemoBraintreeTest.xml
@@ -28,8 +28,10 @@
             <data name="creditCard/data/payment_code" xsi:type="string">braintree</data>
             <data name="configData" xsi:type="string">braintree</data>
             <data name="status" xsi:type="string">Closed</data>
-            <data name="refundedPrices" xsi:type="array">
-                <item name="0" xsi:type="string">145.98</item>
+            <data name="order/data/price/refund" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="grand_refund_total" xsi:type="string">145.98</item>
+                </item>
             </data>
             <data name="transactions/refund" xsi:type="array">
                 <item name="transactionType" xsi:type="string">Refund</item>
@@ -41,5 +43,65 @@
             <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" />
             <constraint name="Magento\Sales\Test\Constraint\AssertTransactionStatus" />
         </variation>
+        <variation name="CreateOnlineCreditMemoBraintreeTestVariation2" summary="Partial Refund an order placed through Braintree with Partial capture" ticketId="MAGETWO-38325">
+            <data name="tag" xsi:type="string">test_type:3rd_party_test, severity:S1</data>
+            <data name="products" xsi:type="array">
+                <item name="0" xsi:type="string">catalogProductSimple::product_10_dollar</item>
+                <item name="1" xsi:type="string">configurableProduct::with_one_option</item>
+                <item name="2" xsi:type="string">bundleProduct::bundle_fixed_100_dollar_product</item>
+            </data>
+            <data name="customer/dataset" xsi:type="string">default</data>
+            <data name="braintreeSandboxCustomer/dataset" xsi:type="string">braintree_sandbox_default</data>
+            <data name="taxRule" xsi:type="string">us_ca_ny_rule</data>
+            <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data>
+            <data name="checkoutMethod" xsi:type="string">guest</data>
+            <data name="shipping" xsi:type="array">
+                <item name="shipping_service" xsi:type="string">Flat Rate</item>
+                <item name="shipping_method" xsi:type="string">Fixed</item>
+            </data>
+            <data name="payment/method" xsi:type="string">braintree</data>
+            <data name="creditCard/dataset" xsi:type="string">visa_default</data>
+            <data name="creditCard/data/payment_code" xsi:type="string">braintree</data>
+            <data name="configData" xsi:type="string">braintree</data>
+            <data name="status" xsi:type="string">Processing</data>
+            <data name="order/data/refund" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="invoiceId" xsi:type="string">0</item>
+                    <item name="items_data" xsi:type="array">
+                        <item name="1" xsi:type="array">
+                            <item name="qty" xsi:type="string">0</item>
+                        </item>
+                    </item>
+                </item>
+                <item name="1" xsi:type="array">
+                    <item name="invoiceId" xsi:type="string">0</item>
+                </item>
+            </data>
+            <data name="order/data/price/refund" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="grand_refund_total" xsi:type="string">1.08</item>
+                </item>
+                <item name="1" xsi:type="array">
+                    <item name="grand_refund_total" xsi:type="string">134.07</item>
+                </item>
+            </data>
+            <data name="transactions/refund" xsi:type="array">
+                <item name="transactionType" xsi:type="string">Refund</item>
+                <item name="statusIsClosed" xsi:type="string">Yes</item>
+            </data>
+            <data name="transactions/capture" xsi:type="array">
+                <item name="transactionType" xsi:type="string">Capture</item>
+                <item name="statusIsClosed" xsi:type="string">Yes</item>
+            </data>
+            <data name="data/items_data" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="qty" xsi:type="string">0</item>
+                </item>
+            </data>
+            <constraint name="Magento\Sales\Test\Constraint\AssertRefundSuccessCreateMessage" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertRefundInCommentsHistory" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertOrderStatusIsCorrect" />
+            <constraint name="Magento\Sales\Test\Constraint\AssertTransactionStatus" />
+        </variation>
     </testCase>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart/Items.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart/Items.php
index 6b270efcb01..4a30bee7265 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart/Items.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Fixture/Cart/Items.php
@@ -34,13 +34,6 @@ class Items extends DataSource
     {
         $this->params = $params;
         $this->products = isset($data['products']) ? $data['products'] : [];
-
-        foreach ($this->products as $product) {
-            $classItem = 'Magento\\' . $this->getModuleName($product) . '\Test\Fixture\Cart\Item';
-            $item = ObjectManager::getInstance()->create($classItem, ['product' => $product]);
-
-            $this->data[] = $item;
-        }
     }
 
     /**
@@ -55,6 +48,24 @@ class Items extends DataSource
         return isset($match[1]) ? $match[1] : '';
     }
 
+    /**
+     * Return prepared dataset.
+     *
+     * @param null|string $key
+     * @return array
+     */
+    public function getData($key = null)
+    {
+        foreach ($this->products as $product) {
+            $classItem = 'Magento\\' . $this->getModuleName($product) . '\Test\Fixture\Cart\Item';
+            $item = ObjectManager::getInstance()->create($classItem, ['product' => $product]);
+            $item->getData();
+            $this->data[] = $item;
+        }
+
+        return $this->data;
+    }
+
     /**
      * Get source products.
      *
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/PlaceOrderStep.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/PlaceOrderStep.php
index 8beada29036..e1eed665851 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/PlaceOrderStep.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/TestStep/PlaceOrderStep.php
@@ -11,6 +11,7 @@ use Magento\Checkout\Test\Page\CheckoutOnepage;
 use Magento\Checkout\Test\Page\CheckoutOnepageSuccess;
 use Magento\Mtf\Fixture\FixtureFactory;
 use Magento\Mtf\TestStep\TestStepInterface;
+use Magento\Sales\Test\Fixture\OrderInjectable;
 
 /**
  * Place order in one page checkout.
@@ -59,11 +60,19 @@ class PlaceOrderStep implements TestStepInterface
      */
     private $products;
 
+    /**
+     * Fixture OrderInjectable.
+     *
+     * @var OrderInjectable
+     */
+    private $order;
+
     /**
      * @param CheckoutOnepage $checkoutOnepage
      * @param AssertGrandTotalOrderReview $assertGrandTotalOrderReview
      * @param CheckoutOnepageSuccess $checkoutOnepageSuccess
      * @param FixtureFactory $fixtureFactory
+     * @param OrderInjectable $order
      * @param array $products
      * @param array $prices
      */
@@ -72,6 +81,7 @@ class PlaceOrderStep implements TestStepInterface
         AssertGrandTotalOrderReview $assertGrandTotalOrderReview,
         CheckoutOnepageSuccess $checkoutOnepageSuccess,
         FixtureFactory $fixtureFactory,
+        OrderInjectable $order = null,
         array $products = [],
         array $prices = []
     ) {
@@ -79,6 +89,7 @@ class PlaceOrderStep implements TestStepInterface
         $this->assertGrandTotalOrderReview = $assertGrandTotalOrderReview;
         $this->checkoutOnepageSuccess = $checkoutOnepageSuccess;
         $this->fixtureFactory = $fixtureFactory;
+        $this->order = $order;
         $this->products = $products;
         $this->prices = $prices;
     }
@@ -95,14 +106,14 @@ class PlaceOrderStep implements TestStepInterface
         }
         $this->checkoutOnepage->getPaymentBlock()->getSelectedPaymentMethodBlock()->clickPlaceOrder();
         $orderId = $this->checkoutOnepageSuccess->getSuccessBlock()->getGuestOrderId();
+        $data = [
+            'id' => $orderId,
+            'entity_id' => ['products' => $this->products]
+        ];
+        $orderData = $this->order !== null ? $this->order->getData() : [];
         $order = $this->fixtureFactory->createByCode(
             'orderInjectable',
-            [
-                'data' => [
-                    'id' => $orderId,
-                    'entity_id' => ['products' => $this->products],
-                ]
-            ]
+            ['data' => array_merge($data, $orderData)]
         );
 
         return [
diff --git a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateOnlineCreditMemoTest.xml b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateOnlineCreditMemoTest.xml
index f859f579ece..10cf09870ee 100644
--- a/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateOnlineCreditMemoTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Paypal/Test/TestCase/CreateOnlineCreditMemoTest.xml
@@ -11,8 +11,10 @@
             <data name="products/0" xsi:type="string">catalogProductSimple::product_10_dollar</data>
             <data name="customer/dataset" xsi:type="string">default</data>
             <data name="checkoutMethod" xsi:type="string">guest</data>
-            <data name="refundedPrices" xsi:type="array">
-                <item name="0" xsi:type="string">15.00</item>
+            <data name="order/data/price/refund" xsi:type="array">
+                <item name="0" xsi:type="array">
+                    <item name="grand_refund_total" xsi:type="string">15.00</item>
+                </item>
             </data>
             <data name="shippingAddress/dataset" xsi:type="string">US_address_1_without_email</data>
             <data name="shipping/shipping_service" xsi:type="string">Flat Rate</data>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/AbstractForm.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/AbstractForm.php
index a309aa87193..4860b076b41 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/AbstractForm.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/AbstractForm.php
@@ -68,8 +68,8 @@ abstract class AbstractForm extends Form
     {
         $data = $this->prepareData($data);
         if (isset($data['items_data']) && $products !== null) {
-            foreach ($products as $key => $product) {
-                $this->getItemsBlock()->getItemProductBlock($product)->fillProduct($data['items_data'][$key]);
+            foreach ($data['items_data'] as $key => $item) {
+                $this->getItemsBlock()->getItemProductBlock($products[$key])->fillProduct($item);
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Creditmemo/Form/Items.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Creditmemo/Form/Items.php
index 52ff585cc43..977742315b5 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Creditmemo/Form/Items.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Creditmemo/Form/Items.php
@@ -38,7 +38,7 @@ class Items extends Block
      */
     public function getItemProductBlock(FixtureInterface $product)
     {
-        $selector = sprintf($this->productItems, $product->getSku());
+        $selector = sprintf($this->productItems, $product->getData()['sku']);
         return $this->blockFactory->create(
             \Magento\Sales\Test\Block\Adminhtml\Order\Creditmemo\Form\Items\Product::class,
             ['element' => $this->_rootElement->find($selector, Locator::SELECTOR_XPATH)]
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundInCommentsHistory.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundInCommentsHistory.php
index c0ce2a87fc1..e7c98aa0f7c 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundInCommentsHistory.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Constraint/AssertRefundInCommentsHistory.php
@@ -6,6 +6,7 @@
 
 namespace Magento\Sales\Test\Constraint;
 
+use Magento\Sales\Test\Fixture\OrderInjectable;
 use Magento\Sales\Test\Page\Adminhtml\SalesOrderView;
 use Magento\Sales\Test\Page\Adminhtml\OrderIndex;
 use Magento\Mtf\Constraint\AbstractConstraint;
@@ -23,25 +24,25 @@ class AssertRefundInCommentsHistory extends AbstractConstraint
     /**
      * Assert that comment about refunded amount exist in Comments History section on order page in Admin.
      *
+     * @param OrderInjectable $order
      * @param SalesOrderView $salesOrderView
      * @param OrderIndex $salesOrder
      * @param string $orderId
-     * @param array $refundedPrices
      * @return void
      */
     public function processAssert(
+        OrderInjectable $order,
         SalesOrderView $salesOrderView,
         OrderIndex $salesOrder,
-        $orderId,
-        array $refundedPrices
+        $orderId
     ) {
         $salesOrder->open();
         $salesOrder->getSalesOrderGrid()->searchAndOpen(['id' => $orderId]);
-
+        $refundedPrices = $order->getPrice()['refund'];
         $actualRefundedAmount = $salesOrderView->getOrderHistoryBlock()->getRefundedAmount();
         foreach ($refundedPrices as $key => $refundedPrice) {
             \PHPUnit_Framework_Assert::assertRegExp(
-                sprintf(self::REFUNDED_AMOUNT_PATTERN, $refundedPrice),
+                sprintf(self::REFUNDED_AMOUNT_PATTERN, $refundedPrice['grand_refund_total']),
                 $actualRefundedAmount[$key],
                 'Incorrect refunded amount value for the order #' . $orderId
             );
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml
index 115ec14741a..056fcc7f9e6 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml
@@ -206,5 +206,6 @@
         <field name="gw_card_tax_refunded" is_required="" />
         <field name="id" />
         <field name="price" is_required="1" group="null" repository="Magento\Sales\Test\Repository\OrderInjectable\Price" />
+        <field name="refund" is_required="" />
     </fixture>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateOnlineCreditMemoStep.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateOnlineCreditMemoStep.php
index 84491c1992e..7a8aa189310 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateOnlineCreditMemoStep.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateOnlineCreditMemoStep.php
@@ -6,6 +6,7 @@
 
 namespace Magento\Sales\Test\TestStep;
 
+use Magento\Checkout\Test\Fixture\Cart;
 use Magento\Mtf\TestStep\TestStepInterface;
 use Magento\Sales\Test\Fixture\OrderInjectable;
 use Magento\Sales\Test\Page\Adminhtml\OrderCreditMemoNew;
@@ -59,9 +60,14 @@ class CreateOnlineCreditMemoStep implements TestStepInterface
      * @var OrderInvoiceView
      */
     private $orderInvoiceView;
+    /**
+     * @var Cart
+     */
+    private $cart;
 
     /**
      * @construct
+     * @param Cart $cart
      * @param OrderIndex $orderIndex
      * @param SalesOrderView $salesOrderView
      * @param OrderInjectable $order
@@ -70,6 +76,7 @@ class CreateOnlineCreditMemoStep implements TestStepInterface
      * @param array|null refundData [optional]
      */
     public function __construct(
+        Cart $cart,
         OrderIndex $orderIndex,
         SalesOrderView $salesOrderView,
         OrderInjectable $order,
@@ -83,6 +90,7 @@ class CreateOnlineCreditMemoStep implements TestStepInterface
         $this->orderCreditMemoNew = $orderCreditMemoNew;
         $this->refundData = $refundData;
         $this->orderInvoiceView = $orderInvoiceView;
+        $this->cart = $cart;
     }
 
     /**
@@ -94,19 +102,20 @@ class CreateOnlineCreditMemoStep implements TestStepInterface
     {
         $this->orderIndex->open();
         $this->orderIndex->getSalesOrderGrid()->searchAndOpen(['id' => $this->order->getId()]);
-        /** @var \Magento\Sales\Test\Block\Adminhtml\Order\View\Tab\Invoices\Grid $invoicesGrid */
-        $invoicesGrid = $this->salesOrderView->getOrderForm()->getTab('invoices')->getGridBlock();
-        $this->salesOrderView->getOrderForm()->openTab('invoices');
-        $invoicesGrid->viewInvoice();
-        $this->salesOrderView->getPageActions()->orderInvoiceCreditMemo();
-        if (!empty($this->refundData)) {
+        $refundsData = $this->order->getRefund();
+        foreach ($refundsData as $refundData) {
+            /** @var \Magento\Sales\Test\Block\Adminhtml\Order\View\Tab\Invoices\Grid $invoicesGrid */
+            $invoicesGrid = $this->salesOrderView->getOrderForm()->getTab('invoices')->getGridBlock();
+            $this->salesOrderView->getOrderForm()->openTab('invoices');
+            $invoicesGrid->viewInvoice();
+            $this->salesOrderView->getPageActions()->orderInvoiceCreditMemo();
             $this->orderCreditMemoNew->getFormBlock()->fillProductData(
-                $this->refundData,
-                $this->order->getEntityId()['products']
+                $refundData,
+                $this->cart->getItems()
             );
             $this->orderCreditMemoNew->getFormBlock()->updateQty();
+            $this->orderCreditMemoNew->getFormBlock()->submit();
         }
-        $this->orderCreditMemoNew->getFormBlock()->submit();
 
         return ['ids' => ['creditMemoIds' => $this->getCreditMemoIds()]];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/SubmitOrderStep.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/SubmitOrderStep.php
index 0a82770fab3..182d37c800f 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/SubmitOrderStep.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/SubmitOrderStep.php
@@ -8,6 +8,7 @@ namespace Magento\Sales\Test\TestStep;
 
 use Magento\Customer\Test\Fixture\Address;
 use Magento\Customer\Test\Fixture\Customer;
+use Magento\Sales\Test\Fixture\OrderInjectable;
 use Magento\Sales\Test\Page\Adminhtml\OrderCreateIndex;
 use Magento\Sales\Test\Page\Adminhtml\SalesOrderView;
 use Magento\Mtf\Fixture\FixtureFactory;
@@ -61,13 +62,20 @@ class SubmitOrderStep implements TestStepInterface
     private $products;
 
     /**
-     * @constructor
+     * Fixture OrderInjectable.
+     *
+     * @var OrderInjectable
+     */
+    private $order;
+
+    /**
      * @param OrderCreateIndex $orderCreateIndex
      * @param SalesOrderView $salesOrderView
      * @param FixtureFactory $fixtureFactory
      * @param Customer $customer
      * @param Address $billingAddress
      * @param \Magento\Mtf\Fixture\FixtureInterface[] $products
+     * @param OrderInjectable $order
      */
     public function __construct(
         OrderCreateIndex $orderCreateIndex,
@@ -75,7 +83,8 @@ class SubmitOrderStep implements TestStepInterface
         FixtureFactory $fixtureFactory,
         Customer $customer,
         Address $billingAddress,
-        array $products
+        array $products,
+        OrderInjectable $order = null
     ) {
         $this->orderCreateIndex = $orderCreateIndex;
         $this->salesOrderView = $salesOrderView;
@@ -83,6 +92,7 @@ class SubmitOrderStep implements TestStepInterface
         $this->customer = $customer;
         $this->billingAddress = $billingAddress;
         $this->products = $products;
+        $this->order = $order;
     }
 
     /**
@@ -95,16 +105,16 @@ class SubmitOrderStep implements TestStepInterface
         $this->orderCreateIndex->getCreateBlock()->submitOrder();
         $this->salesOrderView->getMessagesBlock()->waitSuccessMessage();
         $orderId = trim($this->salesOrderView->getTitleBlock()->getTitle(), '#');
+        $data = [
+            'id' => $orderId,
+            'customer_id' => ['customer' => $this->customer],
+            'entity_id' => ['products' => $this->products],
+            'billing_address_id' => ['billingAddress' => $this->billingAddress],
+        ];
+        $orderData = $this->order !== null ? $this->order->getData() : [];
         $order = $this->fixtureFactory->createByCode(
             'orderInjectable',
-            [
-                'data' => [
-                    'id' => $orderId,
-                    'customer_id' => ['customer' => $this->customer],
-                    'entity_id' => ['products' => $this->products],
-                    'billing_address_id' => ['billingAddress' => $this->billingAddress],
-                ]
-            ]
+            ['data' => array_merge($data, $orderData)]
         );
 
         return ['orderId' => $orderId, 'order' => $order];
-- 
GitLab