Skip to content

Commit 3636f31

Browse files
author
Stanislav Idolov
authored
ENGCOM-2382: Validate that the PO Number is set on the payment instance. #14393
2 parents 190c9b8 + 1d833da commit 3636f31

File tree

6 files changed

+68
-9
lines changed

6 files changed

+68
-9
lines changed

app/code/Magento/OfflinePayments/Model/Purchaseorder.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\OfflinePayments\Model;
77

8+
use Magento\Framework\Exception\LocalizedException;
9+
810
/**
911
* Class Purchaseorder
1012
*
@@ -46,11 +48,29 @@ class Purchaseorder extends \Magento\Payment\Model\Method\AbstractMethod
4648
*
4749
* @param \Magento\Framework\DataObject|mixed $data
4850
* @return $this
49-
* @throws \Magento\Framework\Exception\LocalizedException
51+
* @throws LocalizedException
5052
*/
5153
public function assignData(\Magento\Framework\DataObject $data)
5254
{
5355
$this->getInfoInstance()->setPoNumber($data->getPoNumber());
5456
return $this;
5557
}
58+
59+
/**
60+
* Validate payment method information object
61+
*
62+
* @return $this
63+
* @throws LocalizedException
64+
* @api
65+
*/
66+
public function validate()
67+
{
68+
parent::validate();
69+
70+
if (empty($this->getInfoInstance()->getPoNumber())) {
71+
throw new LocalizedException(__('Purchase order number is a required field.'));
72+
}
73+
74+
return $this;
75+
}
5676
}

app/code/Magento/OfflinePayments/Test/Unit/Model/PurchaseorderTest.php

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,21 @@
55
*/
66
namespace Magento\OfflinePayments\Test\Unit\Model;
77

8+
use Magento\Framework\App\Config\ScopeConfigInterface;
9+
use Magento\Framework\DataObject;
10+
use Magento\Framework\Event\ManagerInterface as EventManagerInterface;
11+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
12+
use Magento\OfflinePayments\Model\Purchaseorder;
13+
use Magento\Payment\Helper\Data as PaymentHelper;
14+
use Magento\Payment\Model\Info as PaymentInfo;
15+
use Magento\Sales\Api\Data\OrderAddressInterface;
16+
use Magento\Sales\Api\Data\OrderInterface;
17+
use Magento\Sales\Model\Order\Payment;
18+
819
class PurchaseorderTest extends \PHPUnit\Framework\TestCase
920
{
1021
/**
11-
* @var \Magento\OfflinePayments\Model\Purchaseorder
22+
* @var Purchaseorder
1223
*/
1324
protected $_object;
1425

@@ -19,15 +30,15 @@ class PurchaseorderTest extends \PHPUnit\Framework\TestCase
1930

2031
protected function setUp()
2132
{
22-
$objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
23-
$eventManager = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
24-
$paymentDataMock = $this->createMock(\Magento\Payment\Helper\Data::class);
33+
$objectManagerHelper = new ObjectManager($this);
34+
$eventManager = $this->createMock(EventManagerInterface::class);
35+
$paymentDataMock = $this->createMock(PaymentHelper::class);
2536
$this->_scopeConfig = $this->createPartialMock(
26-
\Magento\Framework\App\Config\ScopeConfigInterface::class,
37+
ScopeConfigInterface::class,
2738
['getValue', 'isSetFlag']
2839
);
2940
$this->_object = $objectManagerHelper->getObject(
30-
\Magento\OfflinePayments\Model\Purchaseorder::class,
41+
Purchaseorder::class,
3142
[
3243
'eventManager' => $eventManager,
3344
'paymentData' => $paymentDataMock,
@@ -38,13 +49,37 @@ protected function setUp()
3849

3950
public function testAssignData()
4051
{
41-
$data = new \Magento\Framework\DataObject([
52+
$data = new DataObject([
4253
'po_number' => '12345'
4354
]);
4455

45-
$instance = $this->createMock(\Magento\Payment\Model\Info::class);
56+
$instance = $this->createMock(PaymentInfo::class);
4657
$this->_object->setData('info_instance', $instance);
4758
$result = $this->_object->assignData($data);
4859
$this->assertEquals($result, $this->_object);
4960
}
61+
62+
/**
63+
* @expectedException \Magento\Framework\Exception\LocalizedException
64+
* @expectedExceptionMessage Purchase order number is a required field.
65+
*/
66+
public function testValidate()
67+
{
68+
$data = new DataObject([]);
69+
70+
$addressMock = $this->createMock(OrderAddressInterface::class);
71+
$addressMock->expects($this->once())->method('getCountryId')->willReturn('UY');
72+
73+
$orderMock = $this->createMock(OrderInterface::class);
74+
$orderMock->expects($this->once())->method('getBillingAddress')->willReturn($addressMock);
75+
76+
$instance = $this->createMock(Payment::class);
77+
78+
$instance->expects($this->once())->method('getOrder')->willReturn($orderMock);
79+
80+
$this->_object->setData('info_instance', $instance);
81+
$this->_object->assignData($data);
82+
83+
$this->_object->validate();
84+
}
5085
}

app/code/Magento/OfflinePayments/i18n/en_US.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Enabled,Enabled
1111
"New Order Status","New Order Status"
1212
"Sort Order","Sort Order"
1313
Title,Title
14+
"Purchase order number is a required field.","Purchase order number is a required field."
1415
"Payment from Applicable Countries","Payment from Applicable Countries"
1516
"Payment from Specific Countries","Payment from Specific Countries"
1617
"Make Check Payable to","Make Check Payable to"

dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CancelCreatedOrderTest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
<variation name="CancelCreatedOrderTestVariationWithPurchaseOrderPaymentMethod" summary="Cancel order with purchase order payment method and check status on storefront">
4949
<data name="order/dataset" xsi:type="string">default</data>
5050
<data name="order/data/payment_auth_expiration/method" xsi:type="string">purchaseorder</data>
51+
<data name="order/data/payment_auth_expiration/po_number" xsi:type="string">po_number</data>
5152
<data name="status" xsi:type="string">Canceled</data>
5253
<data name="configData" xsi:type="string">purchaseorder</data>
5354
<constraint name="Magento\Sales\Test\Constraint\AssertOrderCancelSuccessMessage" />

dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateCreditMemoEntityTest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
</data>
105105
<data name="order/dataset" xsi:type="string">default</data>
106106
<data name="order/data/payment_auth_expiration/method" xsi:type="string">purchaseorder</data>
107+
<data name="order/data/payment_auth_expiration/po_number" xsi:type="string">po_number</data>
107108
<data name="order/data/price/dataset" xsi:type="string">full_refund_with_zero_shipping_refund</data>
108109
<data name="configData" xsi:type="string">purchaseorder</data>
109110
<constraint name="Magento\Sales\Test\Constraint\AssertRefundSuccessCreateMessage" />

dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateInvoiceEntityTest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
<data name="order/data/entity_id/products" xsi:type="string">catalogProductSimple::product_100_dollar</data>
8989
<data name="order/data/total_qty_ordered/0" xsi:type="string">-</data>
9090
<data name="order/data/payment_auth_expiration/method" xsi:type="string">purchaseorder</data>
91+
<data name="order/data/payment_auth_expiration/po_number" xsi:type="string">po_number</data>
9192
<data name="order/data/invoice" xsi:type="array">
9293
<item name="0" xsi:type="array">
9394
<item name="items_data" xsi:type="array">

0 commit comments

Comments
 (0)