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