diff --git a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php index b20ff74c9039ffb4a623a9e2c2931f50a9d7eb41..f1f638a852e2e21d213cd0bb6a89b49f69a7695a 100644 --- a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php +++ b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php @@ -1,40 +1,45 @@ <?php /** - * - * Copyright © 2015 Magento. All rights reserved. + * * Copyright © 2015 Magento. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Customer\Controller\Adminhtml\System\Config\Validatevat; +use Magento\Framework\Controller\Result\JsonFactory; + class Validate extends \Magento\Customer\Controller\Adminhtml\System\Config\Validatevat { /** - * @var \Magento\Framework\Controller\Result\RawFactory + * @var JsonFactory */ - protected $resultRawFactory; + protected $resultJsonFactory; /** * @param \Magento\Backend\App\Action\Context $context - * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory + * @param JsonFactory $resultJsonFactory */ public function __construct( \Magento\Backend\App\Action\Context $context, - \Magento\Framework\Controller\Result\RawFactory $resultRawFactory + JsonFactory $resultJsonFactory ) { parent::__construct($context); - $this->resultRawFactory = $resultRawFactory; + $this->resultJsonFactory = $resultJsonFactory; } /** * Check whether vat is valid * - * @return \Magento\Framework\Controller\Result\Raw + * @return \Magento\Framework\Controller\Result\Json */ public function execute() { $result = $this->_validate(); - /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */ - $resultRaw = $this->resultRawFactory->create(); - return $resultRaw->setContents((int)$result->getIsValid()); + + /** @var \Magento\Framework\Controller\Result\Json $resultJson */ + $resultJson = $this->resultJsonFactory->create(); + return $resultJson->setData([ + 'valid' => (int)$result->getIsValid(), + 'message' => $result->getRequestMessage(), + ]); } } diff --git a/app/code/Magento/Customer/Model/Vat.php b/app/code/Magento/Customer/Model/Vat.php index 78fd927507f72990fd8d637d5cbe7de8ac7891de..43c883b5d0e6947b4a94ef95f1d55a3a1273d19c 100644 --- a/app/code/Magento/Customer/Model/Vat.php +++ b/app/code/Magento/Customer/Model/Vat.php @@ -166,7 +166,8 @@ class Vat 'is_valid' => false, 'request_date' => '', 'request_identifier' => '', - 'request_success' => false + 'request_success' => false, + 'request_message' => __('Error during VAT Number verification.'), ]); if (!extension_loaded('soap')) { @@ -194,6 +195,12 @@ class Vat $gatewayResponse->setRequestDate((string)$result->requestDate); $gatewayResponse->setRequestIdentifier((string)$result->requestIdentifier); $gatewayResponse->setRequestSuccess(true); + + if ($gatewayResponse->getIsValid()) { + $gatewayResponse->setRequestMessage(__('VAT Number is valid.')); + } else { + $gatewayResponse->setRequestMessage(__('Please enter a valid VAT number.')); + } } catch (\Exception $exception) { $gatewayResponse->setIsValid(false); $gatewayResponse->setRequestDate(''); diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..ac5625eadef26d993703ae10a3a29d25d43653ec --- /dev/null +++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php @@ -0,0 +1,130 @@ +<?php +/** + * Copyright © 2015 Magento. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\Customer\Test\Unit\Controller\Adminhtml\System\Config\Validatevat; + +class ValidateTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var \Magento\Customer\Controller\Adminhtml\System\Config\Validatevat\Validate + */ + protected $controller; + + /** + * @var \Magento\Backend\App\Action\Context + */ + protected $context; + + /** + * @var \Magento\Framework\Controller\Result\Json | \PHPUnit_Framework_MockObject_MockObject + */ + protected $resultJson; + + /** + * @var \Magento\Framework\ObjectManagerInterface | \PHPUnit_Framework_MockObject_MockObject + */ + protected $objectManager; + + /** + * @var \Magento\Framework\App\Request\Http | \PHPUnit_Framework_MockObject_MockObject + */ + protected $request; + + protected function setUp() + { + $resultJsonFactory = $this->mockResultJson(); + + $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http') + ->disableOriginalConstructor() + ->getMock(); + + $this->objectManager = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface') + ->getMockForAbstractClass(); + + $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $this->context = $objectManager->getObject( + 'Magento\Backend\App\Action\Context', + [ + 'request' => $this->request, + 'objectManager' => $this->objectManager, + ] + ); + $this->controller = $objectManager->getObject( + 'Magento\Customer\Controller\Adminhtml\System\Config\Validatevat\Validate', + [ + 'context' => $this->context, + 'resultJsonFactory' => $resultJsonFactory, + ] + ); + } + + public function testExecute() + { + $country = 'US'; + $vat = '123456789'; + + $isValid = true; + $requestMessage = 'test'; + + $json = '{"valid":' . (int)$isValid . ',"message":"' . $requestMessage . '"}'; + + $gatewayResponse = new \Magento\Framework\DataObject([ + 'is_valid' => $isValid, + 'request_message' => $requestMessage, + ]); + + $this->request->expects($this->any()) + ->method('getParam') + ->willReturnMap([ + ['country', null, $country], + ['vat', null, $vat], + ]); + + $vatMock = $this->getMockBuilder('Magento\Customer\Model\Vat') + ->disableOriginalConstructor() + ->getMock(); + + $vatMock->expects($this->once()) + ->method('checkVatNumber') + ->with($country, $vat) + ->willReturn($gatewayResponse); + + $this->objectManager->expects($this->once()) + ->method('get') + ->with('Magento\Customer\Model\Vat') + ->willReturn($vatMock); + + $this->resultJson->expects($this->once()) + ->method('setData') + ->with([ + 'valid' => $gatewayResponse->getIsValid(), + 'message' => $gatewayResponse->getRequestMessage() + ]) + ->willReturn($json); + + $this->assertEquals($json, $this->controller->execute()); + } + + /** + * @return \PHPUnit_Framework_MockObject_MockObject + */ + protected function mockResultJson() + { + $this->resultJson = $this->getMockBuilder('Magento\Framework\Controller\Result\Json') + ->disableOriginalConstructor() + ->getMock(); + + $resultJsonFactory = $this->getMockBuilder('Magento\Framework\Controller\Result\JsonFactory') + ->setMethods(['create']) + ->disableOriginalConstructor() + ->getMock(); + + $resultJsonFactory->expects($this->any()) + ->method('create') + ->willReturn($this->resultJson); + + return $resultJsonFactory; + } +} diff --git a/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml b/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml index d9916cb30d0d24873fa52d22c669268651caab7d..208394342e1f4e3a3db8363077a020a275cbccc8 100644 --- a/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml +++ b/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml @@ -27,11 +27,13 @@ require(['prototype'], function(){ new Ajax.Request('<?php /* @escapeNotVerified */ echo $block->getAjaxUrl() ?>', { parameters: params, onSuccess: function(response) { - result = '<?php /* @escapeNotVerified */ echo __('Please enter a valid VAT number.') ?>'; + var result = '<?php /* @escapeNotVerified */ echo __('Error during VAT Number verification.') ?>'; try { - response = response.responseText; - if (response == 1) { - result = '<?php /* @escapeNotVerified */ echo __('VAT Number is valid.') ?>'; + if (response.responseText.isJSON()) { + response = response.responseText.evalJSON(); + result = response.message; + } + if (response.valid == 1) { validationMessage.removeClassName('hidden').addClassName('success') } else { validationMessage.removeClassName('hidden').addClassName('error')