diff --git a/app/code/Magento/Braintree/Model/PaymentMethod.php b/app/code/Magento/Braintree/Model/PaymentMethod.php index 45171956e87bcf8832723f7b7dffeb90ea5f1f79..b7deb858a89c99de75b05c3463a39c470042ff6d 100644 --- a/app/code/Magento/Braintree/Model/PaymentMethod.php +++ b/app/code/Magento/Braintree/Model/PaymentMethod.php @@ -604,7 +604,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc if ($result->success) { $payment->setIsTransactionClosed(false) ->setShouldCloseParentTransaction(false); - if ($this->isFinalCapture($payment->getParentId(), $amount)) { + if ($payment->isCaptureFinal($amount)) { $payment->setShouldCloseParentTransaction(true); } } else { @@ -905,7 +905,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc ->setAdditionalInformation($this->getExtraTransactionInformation($result->transaction)) ->setAmount($amount) ->setShouldCloseParentTransaction(false); - if ($this->isFinalCapture($payment->getParentId(), $amount)) { + if ($payment->isCaptureFinal($amount)) { $payment->setShouldCloseParentTransaction(true); } if (isset($result->transaction->creditCard['token']) && $result->transaction->creditCard['token']) { @@ -964,21 +964,4 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc { return json_decode(json_encode($data), true); } - - /** - * Checks whether the capture is final - * - * @param string $orderId - * @param string $amount - * @return bool - */ - protected function isFinalCapture($orderId, $amount) - { - if (!empty($orderId)) { - $order = $this->orderRepository->get($orderId); - return (float)$order->getTotalDue() === (float) $amount; - } - - return false; - } } diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php index e20af765062e3b3b0713c5732d5b67f8f3c279f3..079730c97307f5a173583fa783f882b20742c83a 100644 --- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php +++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php @@ -32,6 +32,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase const LNAME = 'Doe'; const AUTH_TRAN_ID = 'r4z34j'; const AUTH_AMOUNT = 5.76; + const TOTAL_AMOUNT = 10.02; const AUTH_CC_LAST_4 = '0004'; const CUSTOMER_ID = '221b3649effb4bb1b62fc940691bd18c'; @@ -325,11 +326,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase * @param $ccType * @param null $ccToken */ - protected function setupInfoInstance( - $countryId, - $ccType, - $ccToken = null - ) { + protected function setupInfoInstance($countryId, $ccType, $ccToken = null) + { $quoteObj = new \Magento\Framework\DataObject( [ 'billing_address' => new \Magento\Framework\DataObject( @@ -501,6 +499,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase 'getCustomerEmail', 'getCustomerId', 'getStoreId', + 'getTotalDue' ] )->getMock(); @@ -522,18 +521,25 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase $orderMock->expects($this->any()) ->method('getStoreId') ->willReturn($storeId); + $orderMock->expects(static::any()) + ->method('getTotalDue') + ->willReturn(self::TOTAL_AMOUNT); + + $this->orderRepository->expects(static::any()) + ->method('get') + ->willReturn($orderMock); + return $orderMock; } + /** * @param \Magento\Framework\DataObject $paymentObject * @param int $storeId * @return array * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ - protected function setupPaymentObject( - \Magento\Framework\DataObject $paymentObject, - $storeId - ) { + protected function setupPaymentObject(\Magento\Framework\DataObject $paymentObject, $storeId) + { $customerId = '12'; $customerEmail = 'abc@example.com'; $company = 'NA'; @@ -564,13 +570,9 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase 'address_type' => 'billing', ]; - $billingAddress = new \Magento\Framework\DataObject( - $addressData - ); + $billingAddress = new \Magento\Framework\DataObject($addressData); $addressData['address_type'] = 'shipping'; - $shippingAddress = new \Magento\Framework\DataObject( - $addressData - ); + $shippingAddress = new \Magento\Framework\DataObject($addressData); $order = $this->setupOrderMock( $billingAddress, @@ -606,26 +608,26 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->willReturn($regionMock); $braintreeAddressData = [ - 'firstName' => self::FNAME, - 'lastName' => self::LNAME, - 'company' => $company, - 'streetAddress' => $street, - 'extendedAddress' => $street2, - 'locality' => $city, - 'region' => $regionCode, - 'postalCode' => $postcode, + 'firstName' => self::FNAME, + 'lastName' => self::LNAME, + 'company' => $company, + 'streetAddress' => $street, + 'extendedAddress' => $street2, + 'locality' => $city, + 'region' => $regionCode, + 'postalCode' => $postcode, 'countryCodeAlpha2' => $countryId, ]; return [ - 'channel' => self::CHANNEL, - 'orderId' => $orderId, - 'customer' => [ + 'channel' => self::CHANNEL, + 'orderId' => $orderId, + 'customer' => [ 'firstName' => self::FNAME, - 'lastName' => self::LNAME, - 'company' => $company, - 'phone' => $phone, - 'fax' => $fax, - 'email' => $customerEmail, + 'lastName' => self::LNAME, + 'company' => $company, + 'phone' => $phone, + 'fax' => $fax, + 'email' => $customerEmail, ], 'billing' => $braintreeAddressData, 'shipping' => $braintreeAddressData, @@ -765,8 +767,11 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ) { $storeId = 3; $amount = self::AUTH_AMOUNT; - $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment'); - + $currencyMock = $this->getPriceCurrencyMock(); + /** @var \Magento\Sales\Model\Order\Payment $paymentObject */ + $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment', [ + 'priceCurrency' => $currencyMock + ]); $expectedRequestAttribs = $this->setupAuthorizeRequest( $configData, @@ -798,14 +803,6 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase } $paymentObject->setParentId('1'); - $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') - ->getMockForAbstractClass(); - $order->expects($this->once()) - ->method('getTotalDue') - ->willReturn(10.02); - $this->orderRepository->expects($this->once()) - ->method('get') - ->willReturn($order); $this->assertEquals($this->model, $this->model->authorize($paymentObject, $amount)); foreach ($expectedPaymentFields as $key => $value) { @@ -1598,13 +1595,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedExceptionMessage error */ - public function testAuthorizeError( - array $configData, - $vault, - $registry, - $existingCustomer, - array $paymentInfo - ) { + public function testAuthorizeError(array $configData, $vault, $registry, $existingCustomer, array $paymentInfo) + { $storeId = 3; $amount = self::AUTH_AMOUNT; $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment'); @@ -1649,13 +1641,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedExceptionMessage Please try again later */ - public function testAuthorizeException( - array $configData, - $vault, - $registry, - $existingCustomer, - array $paymentInfo - ) { + public function testAuthorizeException(array $configData, $vault, $registry, $existingCustomer, array $paymentInfo) + { $storeId = 3; $amount = self::AUTH_AMOUNT; $paymentObject = $this->objectManagerHelper->getObject('Magento\Sales\Model\Order\Payment'); @@ -1716,10 +1703,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase * @param int $numberOfTransactions * @return $this */ - protected function setupSalesTransaction( - $paymentId, - $numberOfTransactions - ) { + protected function setupSalesTransaction($paymentId, $numberOfTransactions) + { $transactionCollectionMock = $this->getMockBuilder( 'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection' )->disableOriginalConstructor() @@ -1741,12 +1726,24 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase return $this; } - protected function setupPaymentObjectForCapture( - $paymentId - ) { + protected function setupPaymentObjectForCapture($paymentId) + { + $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') + ->getMockForAbstractClass(); + $order->expects(static::any()) + ->method('getTotalDue') + ->willReturn(self::TOTAL_AMOUNT); + $this->orderRepository->expects(static::any()) + ->method('get') + ->willReturn($order); + + $currencyMock = $this->getPriceCurrencyMock(); + $paymentObject = $this->objectManagerHelper->getObject( 'Magento\Sales\Model\Order\Payment', [ + 'priceCurrency' => $currencyMock, + 'orderRepository' => $this->orderRepository, 'data' => [ 'id' => $paymentId, 'cc_trans_id' => self::AUTH_TRAN_ID, @@ -1756,6 +1753,11 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase return $paymentObject; } + + /** + * @covers \Magento\Braintree\Model\PaymentMethod::capture() + * @throws LocalizedException + */ public function testCaptureSuccess() { $amount = self::AUTH_AMOUNT; @@ -1774,20 +1776,40 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->method('critical'); $paymentObject->setParentId('1'); - $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') - ->getMockForAbstractClass(); - $order->expects($this->once()) - ->method('getTotalDue') - ->willReturn(10.02); - $this->orderRepository->expects($this->once()) - ->method('get') - ->willReturn($order); $this->model->capture($paymentObject, $amount); $this->assertEquals(0, $paymentObject->getIsTransactionClosed()); $this->assertFalse($paymentObject->getShouldCloseParentTransaction()); } + /** + * @covers \Magento\Braintree\Model\PaymentMethod::capture() + * @return void + */ + public function testCaptureSuccessAuthTransactionClosed() + { + $paymentId = 31232; + /** @var \Magento\Sales\Model\Order\Payment $payment */ + $payment = $this->setupPaymentObjectForCapture($paymentId); + $this->setupSalesTransaction($paymentId, 0); //no existing capture transaction + + $result = $this->setupSuccessResponse([]); + $this->braintreeTransactionMock->expects(static::once()) + ->method('submitForSettlement') + ->with(self::AUTH_TRAN_ID, self::TOTAL_AMOUNT) + ->willReturn($result); + + $this->psrLoggerMock->expects(static::never()) + ->method('critical'); + + $payment->setParentId(1); + $this->model->capture($payment, self::TOTAL_AMOUNT); + + static::assertFalse($payment->getIsTransactionClosed()); + static::assertTrue($payment->getShouldCloseParentTransaction()); + + } + /** * @expectedException \Magento\Framework\Exception\LocalizedException * @expectedExceptionMessage There was an error capturing the transaction: error. @@ -1820,10 +1842,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase $this->model->capture($paymentObject, $amount); } - protected function setupAuthTransaction( - $paymentId, - $authTransaction - ) { + protected function setupAuthTransaction($paymentId, $authTransaction) + { $authTransactionCollectionMock = $this->getMockBuilder( 'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection' )->disableOriginalConstructor() @@ -1926,14 +1946,6 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->willReturn($result); $paymentObject->setParentId('1'); - $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') - ->getMockForAbstractClass(); - $order->expects($this->once()) - ->method('getTotalDue') - ->willReturn(10.02); - $this->orderRepository->expects($this->once()) - ->method('get') - ->willReturn($order); $this->model->capture($paymentObject, $amount); $this->assertEquals(0, $paymentObject->getIsTransactionClosed()); @@ -2115,17 +2127,10 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase 'submitForSettlement' => true, ], ] - )->willReturn($resultSuccess); + ) + ->willReturn($resultSuccess); $paymentObject->setParentId('1'); - $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface') - ->getMockForAbstractClass(); - $order->expects($this->once()) - ->method('getTotalDue') - ->willReturn(10.02); - $this->orderRepository->expects($this->once()) - ->method('get') - ->willReturn($order); $this->model->capture($paymentObject, $amount); $this->assertEquals(PaymentMethod::STATUS_APPROVED, $paymentObject->getStatus()); @@ -2192,9 +2197,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase //End: test capture //Start: test refund - protected function setupPaymentObjectForRefund( - $refundTransactionId - ) { + protected function setupPaymentObjectForRefund($refundTransactionId) + { $paymentObject = $this->objectManagerHelper->getObject( 'Magento\Sales\Model\Order\Payment', [ @@ -2461,9 +2465,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->willReturnArgument(0); } - protected function setupPaymentObjectForVoid( - $orderId - ) { + protected function setupPaymentObjectForVoid($orderId) + { $paymentObject = $this->objectManagerHelper->getObject( 'Magento\Sales\Model\Order\Payment' ); @@ -2666,4 +2669,22 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase ->willReturn($orderMock); $this->assertEquals(false, $this->model->canVoid()); } + + /** + * @return \Magento\Directory\Model\PriceCurrency|\PHPUnit_Framework_MockObject_MockObject + */ + protected function getPriceCurrencyMock() + { + $currencyMock = $this->getMockBuilder('\Magento\Directory\Model\PriceCurrency') + ->disableOriginalConstructor() + ->setMethods(['round']) + ->getMock(); + $currencyMock->expects(static::any()) + ->method('round') + ->willReturnMap([ + [self::TOTAL_AMOUNT, round(self::TOTAL_AMOUNT, 2)], + [self::AUTH_AMOUNT, round(self::AUTH_AMOUNT, 2)] + ]); + return $currencyMock; + } } diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php index 690bde68d5c575ece27f56d68165d1ccf31bc7d5..7adf8f447f0499ec84088cd350c2eff4fc2d4812 100644 --- a/app/code/Magento/Sales/Model/Order/Payment.php +++ b/app/code/Magento/Sales/Model/Order/Payment.php @@ -1263,16 +1263,8 @@ class Payment extends Info implements OrderPaymentInterface */ public function isCaptureFinal($amountToCapture) { - $amountPaid = $this->formatAmount($this->getBaseAmountPaid(), true); - $amountToCapture = $this->formatAmount($amountToCapture, true); - $orderGrandTotal = $this->formatAmount($this->getOrder()->getBaseGrandTotal(), true); - if ($orderGrandTotal == $amountPaid + $amountToCapture) { - if (false !== $this->getShouldCloseParentTransaction()) { - $this->setShouldCloseParentTransaction(true); - } - return true; - } - return false; + $total = $this->getOrder()->getTotalDue(); + return $this->formatAmount($total, true) == $this->formatAmount($amountToCapture, true); } /** diff --git a/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php b/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php index 590422b153130b34b55dddb6f1777fd206ec4149..3bb13ccca2bf88b3d99cce521f59e7e0b6fb2126 100644 --- a/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php +++ b/app/code/Magento/Sales/Model/Order/Payment/Operations/CaptureOperation.php @@ -37,13 +37,6 @@ class CaptureOperation extends AbstractOperation $amountToCapture = $payment->formatAmount($invoice->getBaseGrandTotal()); $order = $payment->getOrder(); - // prepare parent transaction and its amount - $paidWorkaround = 0; - if (!$invoice->wasPayCalled()) { - $paidWorkaround = (double)$amountToCapture; - } - $payment->isCaptureFinal($paidWorkaround); - $payment->setTransactionId( $this->transactionManager->generateTransactionId( $payment, @@ -72,38 +65,48 @@ class CaptureOperation extends AbstractOperation ); } - if (!$invoice->getIsPaid()) { - // attempt to capture: this can trigger "is_transaction_pending" - $method = $payment->getMethodInstance(); - $method->setStore( - $order->getStoreId() + if ($invoice->getIsPaid()) { + throw new \Magento\Framework\Exception\LocalizedException( + __('The transaction "%1" cannot be captured yet.', $invoice->getTransactionId()) ); - //TODO replace for sale usage - $method->capture($payment, $amountToCapture); + } + + // attempt to capture: this can trigger "is_transaction_pending" + $method = $payment->getMethodInstance(); + $method->setStore( + $order->getStoreId() + ); + //TODO replace for sale usage + $method->capture($payment, $amountToCapture); - $transactionBuilder = $this->transactionBuilder->setPayment($payment); - $transactionBuilder->setOrder($order); - $transactionBuilder->setFailSafe(true); - $transactionBuilder->setTransactionId($payment->getTransactionId()); - $transactionBuilder->setAdditionalInformation($payment->getTransactionAdditionalInfo()); - $transactionBuilder->setSalesDocument($invoice); - $transaction = $transactionBuilder->build(Transaction::TYPE_CAPTURE); + // prepare parent transaction and its amount + $paidWorkaround = 0; + if (!$invoice->wasPayCalled()) { + $paidWorkaround = (double)$amountToCapture; + } + if ($payment->isCaptureFinal($paidWorkaround)) { + $payment->setShouldCloseParentTransaction(true); + } - $message = $this->stateCommand->execute($payment, $amountToCapture, $order); - if ($payment->getIsTransactionPending()) { - $invoice->setIsPaid(false); - } else { - $invoice->setIsPaid(true); - $this->updateTotals($payment, ['base_amount_paid_online' => $amountToCapture]); - } - $message = $payment->prependMessage($message); - $payment->addTransactionCommentsToOrder($transaction, $message); - $invoice->setTransactionId($payment->getLastTransId()); + $transactionBuilder = $this->transactionBuilder->setPayment($payment); + $transactionBuilder->setOrder($order); + $transactionBuilder->setFailSafe(true); + $transactionBuilder->setTransactionId($payment->getTransactionId()); + $transactionBuilder->setAdditionalInformation($payment->getTransactionAdditionalInfo()); + $transactionBuilder->setSalesDocument($invoice); + $transaction = $transactionBuilder->build(Transaction::TYPE_CAPTURE); - return $payment; + $message = $this->stateCommand->execute($payment, $amountToCapture, $order); + if ($payment->getIsTransactionPending()) { + $invoice->setIsPaid(false); + } else { + $invoice->setIsPaid(true); + $this->updateTotals($payment, ['base_amount_paid_online' => $amountToCapture]); } - throw new \Magento\Framework\Exception\LocalizedException( - __('The transaction "%1" cannot be captured yet.', $invoice->getTransactionId()) - ); + $message = $payment->prependMessage($message); + $payment->addTransactionCommentsToOrder($transaction, $message); + $invoice->setTransactionId($payment->getLastTransId()); + + return $payment; } } diff --git a/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php b/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php index 7c5e892ce035878f1ae41ee5c55d89c0bab8056c..8b7759b79a680079aadee62d56279e59a267cc2d 100644 --- a/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php +++ b/app/code/Magento/Sales/Model/Order/Payment/Operations/RegisterCaptureNotificationOperation.php @@ -44,6 +44,7 @@ class RegisterCaptureNotificationOperation extends AbstractOperation $invoice->setOrder($order); $order->addRelatedObject($invoice); $payment->setCreatedInvoice($invoice); + $payment->setShouldCloseParentTransaction(true); } else { $payment->setIsFraudDetected(!$skipFraudDetection); $this->updateTotals($payment, ['base_amount_paid_online' => $amount]); diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php index 29757fc570f2380410376d09d3ca137062ffad9d..243588761cc85e9f839b3a5afc403c151a09081f 100644 --- a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php +++ b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php @@ -1437,6 +1437,36 @@ class PaymentTest extends \PHPUnit_Framework_TestCase ]; } + /** + * @covers \Magento\Sales\Model\Order\Payment::isCaptureFinal() + * @return void + */ + public function testIsCaptureFinal() + { + $amount = 23.02; + $partialAmount = 12.00; + + $this->orderMock->expects(static::exactly(2)) + ->method('getTotalDue') + ->willReturn($amount); + + static::assertFalse($this->payment->isCaptureFinal($partialAmount)); + static::assertTrue($this->payment->isCaptureFinal($amount)); + } + + /** + * @covers \Magento\Sales\Model\Order\Payment::getShouldCloseParentTransaction() + * @return void + */ + public function testGetShouldCloseParentTransaction() + { + $this->payment->setShouldCloseParentTransaction(1); + static::assertTrue($this->payment->getShouldCloseParentTransaction()); + + $this->payment->setShouldCloseParentTransaction(0); + static::assertFalse($this->payment->getShouldCloseParentTransaction()); + } + protected function initPayment() { return (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))->getObject( diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php index 5c27950d64f00760345068372d780397163c04f0..3949117079b68d8ecc8a93bcd86dac4a886b87ce 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/ipn.php @@ -8,6 +8,7 @@ return [ 'mc_gross' => '100.00', 'invoice' => '100000001', 'payment_status' => 'Completed', + 'auth_status' => 'Completed', 'mc_currency' => 'USD', 'receiver_email' => 'merchant_2012050718_biz@example.com' ]; diff --git a/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php b/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php index cc659a62b1eb2361855aa61bfeb812ff92966c2d..9fbab06028d7988f983157325c5f8e64fdb38eec 100644 --- a/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php +++ b/dev/tests/integration/testsuite/Magento/Paypal/_files/order_express.php @@ -18,30 +18,21 @@ $shippingAddress->setId(null)->setAddressType('shipping'); $payment = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order\Payment'); $payment->setMethod(\Magento\Paypal\Model\Config::METHOD_WPP_EXPRESS); -$order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order'); -$order - ->setCustomerEmail('co@co.co') - ->setIncrementId( - '100000001' -)->setSubtotal( - 100 -)->setBaseSubtotal( - 100 -)->setBaseGrandTotal( - 100 -)->setBaseCurrencyCode( - 'USD' -)->setCustomerIsGuest( - true -)->setStoreId( - 1 -)->setEmailSent( - 1 -)->setBillingAddress( - $billingAddress -)->setShippingAddress( - $shippingAddress -)->setPayment( - $payment -); +$amount = 100; + +/** @var \Magento\Sales\Model\Order $order */ +$order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(Magento\Sales\Model\Order::class); +$order->setCustomerEmail('co@co.co') + ->setIncrementId('100000001') + ->setSubtotal($amount) + ->setBaseSubtotal($amount) + ->setBaseGrandTotal($amount) + ->setGrandTotal($amount) + ->setBaseCurrencyCode('USD') + ->setCustomerIsGuest(true) + ->setStoreId(1) + ->setEmailSent(true) + ->setBillingAddress($billingAddress) + ->setShippingAddress($shippingAddress) + ->setPayment($payment); $order->save();