magento2-docker/dev/tests/integration/testsuite/Magento/Tax/Controller/Adminhtml/RuleTest.php

151 lines
4.2 KiB
PHP

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Tax\Controller\Adminhtml;
use Magento\Directory\Model\CountryFactory;
use Magento\Directory\Model\RegionFactory;
use Magento\Framework\Api\DataObjectHelper;
use Magento\Framework\Json\Helper\Data;
use Magento\Tax\Api\Data\TaxRateInterfaceFactory;
use Magento\Tax\Api\TaxRateRepositoryInterface;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\Tax\Api\Data\TaxRateInterface;
use Magento\Tax\Model\TaxRuleFixtureFactory;
use Magento\Tax\Model\Rate\Provider as RatesProvider;
/**
* Tests for Tax Rules controllers.
*
* @magentoAppArea adminhtml
*/
class RuleTest extends \Magento\TestFramework\TestCase\AbstractBackendController
{
/**
* TaxRate factory
*
* @var TaxRateInterfaceFactory
*/
private $taxRateFactory;
/**
* TaxRateService
*
* @var TaxRateRepositoryInterface
*/
private $rateRepository;
/**
* Helps in creating required tax rules.
*
* @var TaxRuleFixtureFactory
*/
private $taxRateFixtureFactory;
/**
* @var CountryFactory
*/
private $countryFactory;
/**
* @var RegionFactory
*/
private $regionFactory;
/**
* @var DataObjectHelper
*/
private $dataObjectHelper;
/**
* @var RatesProvider
*/
private $taxRatesProvider;
/**
* @inheritdoc
*/
protected function setUp(): void
{
parent::setUp();
$this->rateRepository = $this->_objectManager->get(TaxRateRepositoryInterface::class);
$this->taxRateFactory = $this->_objectManager->create(TaxRateInterfaceFactory::class);
$this->dataObjectHelper = $this->_objectManager->create(DataObjectHelper::class);
$this->taxRateFixtureFactory = new TaxRuleFixtureFactory();
$this->countryFactory = $this->_objectManager->create(CountryFactory::class);
$this->regionFactory = $this->_objectManager->create(RegionFactory::class);
$this->taxRatesProvider = $this->_objectManager->create(RatesProvider::class);
$this->_generateTaxRates();
}
/**
* Tests request of tax rates collection set.
*
* @param array $postData
* @param int $itemsCount
* @dataProvider ajaxActionDataProvider
* @magentoDbIsolation enabled
*/
public function testAjaxLoadRates($postData, $itemsCount)
{
$this->getRequest()->setPostValue($postData);
$this->dispatch('backend/tax/rule/ajaxLoadRates');
$jsonBody = $this->getResponse()->getBody();
$response = Bootstrap::getObjectManager()->get(Data::class)
->jsonDecode($jsonBody);
$this->assertArrayHasKey('success', $response);
$this->assertTrue($response['success']);
$this->assertArrayHasKey('errorMessage', $response);
$this->assertEmpty($response['errorMessage']);
$this->assertArrayHasKey('result', $response);
$this->assertCount($itemsCount, $response['result']);
}
/**
* Creates tax rates items in repository.
*/
private function _generateTaxRates()
{
$ratesCount = $this->taxRatesProvider->getPageSize() + 1;
for ($i = 0; $i <= $ratesCount; $i++) {
$taxData = [
'tax_country_id' => 'US',
'tax_region_id' => '8',
'rate' => '8.25',
'code' => 'US-CA-*-Rate' . $i . rand(),
'zip_is_range' => true,
'zip_from' => 78765,
'zip_to' => 78780,
];
// Tax rate data object created
$taxRate = $this->taxRateFactory->create();
$this->dataObjectHelper->populateWithArray($taxRate, $taxData, TaxRateInterface::class);
//Tax rate service call
$this->rateRepository->save($taxRate);
}
}
/**
* Provides POST data
*
* @return array
*/
public function ajaxActionDataProvider()
{
$taxRatesProvider = Bootstrap::getObjectManager()->create(RatesProvider::class);
return [
[['p' => 1], $taxRatesProvider->getPageSize()],
[['p' => 1, 's' => 'no_such_code'], 0]
];
}
}