319 lines
12 KiB
PHP
Executable File
319 lines
12 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
|
|
namespace Magento\Tax\Controller\Adminhtml;
|
|
|
|
use Magento\Framework\App\Request\Http as HttpRequest;
|
|
|
|
/**
|
|
* @magentoAppArea adminhtml
|
|
*/
|
|
class RateTest extends \Magento\TestFramework\TestCase\AbstractBackendController
|
|
{
|
|
/**
|
|
* @dataProvider ajaxSaveActionDataProvider
|
|
* @magentoDbIsolation enabled
|
|
*/
|
|
public function testAjaxSaveAction($postData, $expectedData)
|
|
{
|
|
$this->getRequest()->setPostValue($postData)->setMethod('POST');
|
|
|
|
$this->dispatch('backend/tax/rate/ajaxSave');
|
|
|
|
$jsonBody = $this->getResponse()->getBody();
|
|
$result = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
|
|
\Magento\Framework\Json\Helper\Data::class
|
|
)->jsonDecode(
|
|
$jsonBody
|
|
);
|
|
|
|
$this->assertArrayHasKey('tax_calculation_rate_id', $result);
|
|
|
|
$rateId = $result['tax_calculation_rate_id'];
|
|
/** @var $rate \Magento\Tax\Model\Calculation\Rate */
|
|
$rate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
|
|
\Magento\Tax\Model\Calculation\Rate::class
|
|
)->load(
|
|
$rateId,
|
|
'tax_calculation_rate_id'
|
|
);
|
|
|
|
$this->assertEquals($expectedData['zip_is_range'], $rate->getZipIsRange());
|
|
$this->assertEquals($expectedData['zip_from'], $rate->getZipFrom());
|
|
$this->assertEquals($expectedData['zip_to'], $rate->getZipTo());
|
|
$this->assertEquals($expectedData['tax_postcode'], $rate->getTaxPostcode());
|
|
}
|
|
|
|
/**
|
|
* Data provider for testAjaxSaveAction
|
|
*
|
|
* @return array
|
|
*/
|
|
public function ajaxSaveActionDataProvider()
|
|
{
|
|
$postData = ['rate' => '10.0000', 'tax_country_id' => 'US', 'tax_region_id' => '1'];
|
|
return [
|
|
[
|
|
$postData + [
|
|
'code' => 'Rate ' . uniqid(rand()),
|
|
'zip_is_range' => '1',
|
|
'zip_from' => '10000',
|
|
'zip_to' => '20000',
|
|
'tax_postcode' => '*',
|
|
],
|
|
['zip_is_range' => 1, 'zip_from' => '10000', 'zip_to' => '20000', 'tax_postcode' => '10000-20000'],
|
|
],
|
|
[
|
|
$postData + [
|
|
'code' => 'Rate ' . uniqid(rand()),
|
|
'zip_is_range' => '0',
|
|
'zip_from' => '10000',
|
|
'zip_to' => '20000',
|
|
'tax_postcode' => '*',
|
|
],
|
|
['zip_is_range' => null, 'zip_from' => null, 'zip_to' => null, 'tax_postcode' => '*']
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Test wrong data conditions
|
|
*
|
|
* @dataProvider ajaxSaveActionDataInvalidDataProvider
|
|
* @magentoDbIsolation enabled
|
|
*/
|
|
public function testAjaxSaveActionInvalidData($postData, $expectedData)
|
|
{
|
|
$this->getRequest()->setPostValue($postData)->setMethod('POST');
|
|
|
|
$this->dispatch('backend/tax/rate/ajaxSave');
|
|
|
|
$jsonBody = $this->getResponse()->getBody();
|
|
$result = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
|
|
\Magento\Framework\Json\Helper\Data::class
|
|
)->jsonDecode(
|
|
$jsonBody
|
|
);
|
|
|
|
$this->assertEquals($expectedData['success'], $result['success']);
|
|
$this->assertArrayHasKey('error_message', $result);
|
|
$this->assertGreaterThan(1, strlen($result['error_message']));
|
|
}
|
|
|
|
/**
|
|
* Data provider for testAjaxSaveActionInvalidData
|
|
*
|
|
* @return array
|
|
*/
|
|
public function ajaxSaveActionDataInvalidDataProvider()
|
|
{
|
|
$expectedData = [
|
|
'success' => false,
|
|
'error_message' => 'The required information is invalid. Verify the information and try again.',
|
|
];
|
|
return [
|
|
[
|
|
// Zip as range but no range values provided
|
|
[
|
|
'rate' => rand(1, 10000),
|
|
'tax_country_id' => 'US',
|
|
'tax_region_id' => '0',
|
|
'code' => 'Rate ' . uniqid(),
|
|
'zip_is_range' => '1',
|
|
'zip_from' => '',
|
|
'zip_to' => '',
|
|
'tax_postcode' => '*'
|
|
],
|
|
$expectedData,
|
|
],
|
|
// Code is empty
|
|
[
|
|
[
|
|
'rate' => rand(1, 10000),
|
|
'tax_country_id' => 'US',
|
|
'tax_region_id' => '0',
|
|
'code' => '',
|
|
'zip_is_range' => '0',
|
|
'zip_from' => '10000',
|
|
'zip_to' => '20000',
|
|
'tax_postcode' => '*',
|
|
],
|
|
$expectedData
|
|
],
|
|
// Country ID empty
|
|
[
|
|
[
|
|
'rate' => rand(1, 10000),
|
|
'tax_country_id' => '',
|
|
'tax_region_id' => '0',
|
|
'code' => 'Rate ' . uniqid(),
|
|
'zip_is_range' => '0',
|
|
'zip_from' => '10000',
|
|
'zip_to' => '20000',
|
|
'tax_postcode' => '*',
|
|
],
|
|
$expectedData
|
|
],
|
|
// Tax zip code is empty
|
|
[
|
|
[
|
|
'rate' => rand(1, 10000),
|
|
'tax_country_id' => 'US',
|
|
'tax_region_id' => '0',
|
|
'code' => 'Rate ' . uniqid(),
|
|
'zip_is_range' => '0',
|
|
'zip_from' => '10000',
|
|
'zip_to' => '20000',
|
|
'tax_postcode' => '',
|
|
],
|
|
$expectedData
|
|
],
|
|
// All params empty
|
|
[
|
|
[
|
|
'rate' => '',
|
|
'tax_country_id' => '',
|
|
'tax_region_id' => '1',
|
|
'code' => '',
|
|
'zip_is_range' => '0',
|
|
'zip_from' => '',
|
|
'zip_to' => '',
|
|
'tax_postcode' => '',
|
|
],
|
|
$expectedData
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @dataProvider ajaxSaveActionDataProvider
|
|
* @magentoDbIsolation enabled
|
|
*
|
|
* @param array $rateClassData
|
|
* @SuppressWarnings(PHPMD.NPathComplexity)
|
|
*/
|
|
public function testAjaxLoadAction($rateClassData)
|
|
{
|
|
/** @var \Magento\Tax\Api\Data\TaxRateInterfaceFactory $rateClassFactory */
|
|
$rateClassFactory = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
|
|
\Magento\Tax\Api\Data\TaxRateInterfaceFactory::class
|
|
);
|
|
|
|
$rateClass = $rateClassFactory->create();
|
|
$rateClass->setRate($rateClassData['rate'])
|
|
->setTaxCountryId($rateClassData['tax_country_id'])
|
|
->setTaxRegionId($rateClassData['tax_region_id'])
|
|
->setCode($rateClassData['code'])
|
|
->setZipFrom($rateClassData['zip_from'])
|
|
->setZipIsRange($rateClassData['zip_is_range'])
|
|
->setZipFrom($rateClassData['zip_from'])
|
|
->setZipTo($rateClassData['zip_to'])
|
|
->setTaxPostcode($rateClassData['tax_postcode']);
|
|
|
|
$rateClass->save($rateClass);
|
|
|
|
$rateClassId=$rateClass->getTaxCalculationRateId();
|
|
/** @var $class \Magento\Tax\Model\Calculation\Rate */
|
|
$class = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
|
|
->create(\Magento\Tax\Model\Calculation\Rate::class)
|
|
->load($rateClassId, 'tax_calculation_rate_id');
|
|
|
|
$this->assertEquals($rateClassData['tax_country_id'], $class->getTaxCountryId());
|
|
$this->assertEquals($rateClassData['tax_region_id'], $class->getTaxRegionId());
|
|
$this->assertEquals($rateClassData['code'], $class->getCode());
|
|
$this->assertEquals($rateClassData['rate'], $class->getRate());
|
|
$this->assertEquals($rateClassData['zip_is_range']==1 ? 1 : 0, $class->getZipIsRange() ? 1 : 0);
|
|
if ($rateClassData['zip_is_range']=='1') {
|
|
$this->assertEquals($rateClassData['zip_from'], $class->getZipFrom());
|
|
$this->assertEquals($rateClassData['zip_to'], $class->getZipTo());
|
|
}
|
|
|
|
$postData = [ 'id' => $rateClassId ];
|
|
$this->getRequest()->setPostValue($postData);
|
|
$this->dispatch('backend/tax/rate/ajaxLoad');
|
|
$jsonBody = $this->getResponse()->getBody();
|
|
|
|
$result = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
|
|
\Magento\Framework\Json\Helper\Data::class
|
|
)->jsonDecode(
|
|
$jsonBody
|
|
);
|
|
|
|
$this->assertIsArray($result);
|
|
$this->assertArrayHasKey('success', $result);
|
|
$this->assertTrue($result['success'] == true);
|
|
$this->assertArrayHasKey('result', $result);
|
|
$this->assertIsArray($result['result']);
|
|
$this->assertEquals($result['result']['tax_country_id'], $class->getTaxCountryId());
|
|
$this->assertEquals($result['result']['tax_region_id'], $class->getTaxRegionId());
|
|
$this->assertEquals($result['result']['tax_postcode'], $class->getTaxPostcode());
|
|
$this->assertEquals($result['result']['code'], $class->getCode());
|
|
$this->assertEquals($result['result']['rate'], $class->getRate());
|
|
|
|
$expectedZipIsRange=$result['result']['zip_is_range'] == 1 ? 1 : 0;
|
|
$this->assertEquals($expectedZipIsRange, $class->getZipIsRange() ? 1 : 0);
|
|
if ($expectedZipIsRange) {
|
|
$this->assertEquals($result['result']['zip_from'], $class->getZipFrom());
|
|
$this->assertEquals($result['result']['zip_to'], $class->getZipTo());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @magentoDbIsolation enabled
|
|
*
|
|
*/
|
|
public function testAjaxNonLoadAction()
|
|
{
|
|
$postData = [ 'id' => 99999999 ];
|
|
$this->getRequest()->setPostValue($postData);
|
|
$this->dispatch('backend/tax/rate/ajaxLoad');
|
|
$jsonBody = $this->getResponse()->getBody();
|
|
|
|
$result = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
|
|
\Magento\Framework\Json\Helper\Data::class
|
|
)->jsonDecode(
|
|
$jsonBody
|
|
);
|
|
|
|
$this->assertIsArray($result);
|
|
$this->assertArrayHasKey('success', $result);
|
|
$this->assertTrue($result['success'] == false);
|
|
$this->assertTrue(!array_key_exists('result', $result));
|
|
$this->assertArrayHasKey('error_message', $result);
|
|
$this->assertTrue(strlen($result['error_message'])>0);
|
|
}
|
|
|
|
/** Test Delete Tax Rate
|
|
* @magentoAppIsolation enabled
|
|
* @magentoDbIsolation enabled
|
|
* @return void
|
|
*/
|
|
public function testDeleteRate(): void
|
|
{
|
|
$rateId = 2;
|
|
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
|
|
$this->getRequest()->setPostValue(['rate' => $rateId]);
|
|
$this->dispatch('backend/tax/rate/delete');
|
|
$successMessage = (string)__('You deleted the tax rate.');
|
|
$this->assertSessionMessages($this->equalTo([$successMessage]));
|
|
}
|
|
|
|
/** Test Delete Incorrect Tax Rate
|
|
* @magentoAppIsolation enabled
|
|
* @magentoDbIsolation enabled
|
|
* @return void
|
|
*/
|
|
public function testDeleteIncorrectRate(): void
|
|
{
|
|
$incorrectRateId = 20999;
|
|
$this->getRequest()->setMethod(HttpRequest::METHOD_POST);
|
|
$this->getRequest()->setPostValue(['rate' => $incorrectRateId]);
|
|
$this->dispatch('backend/tax/rate/delete');
|
|
$errorMessage = (string)_("We can't delete this rate because of an incorrect rate ID.");
|
|
$this->assertSessionMessages($this->equalTo([$errorMessage]));
|
|
}
|
|
}
|