magento2-docker/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRuleFixtureFactory.php

161 lines
5.2 KiB
PHP
Executable File

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Tax\Model;
use Magento\TestFramework\Helper\Bootstrap;
/**
* TaxRuleFixtureFactory is meant to help in testing tax by creating/destroying tax rules/classes/rates easily.
*/
class TaxRuleFixtureFactory
{
/**
* Object Manager
*
* @var \Magento\Framework\ObjectManagerInterface
*/
private $objectManager;
/**
* @var \Magento\Framework\Api\DataObjectHelper
*/
private $dataObjectHelper;
public function __construct()
{
$this->objectManager = Bootstrap::getObjectManager();
$this->dataObjectHelper = $this->objectManager->create(\Magento\Framework\Api\DataObjectHelper::class);
}
/**
* Helper to create tax rules.
*
* @param array $rulesData Keys match populateWithArray
* @return array code => rule id
*/
public function createTaxRules($rulesData)
{
/** @var \Magento\Tax\Api\Data\TaxRuleInterfaceFactory $taxRuleFactory */
$taxRuleFactory = $this->objectManager->create(\Magento\Tax\Api\Data\TaxRuleInterfaceFactory::class);
/** @var \Magento\Tax\Api\TaxRuleRepositoryInterface $taxRuleService */
$taxRuleService = $this->objectManager->create(\Magento\Tax\Api\TaxRuleRepositoryInterface::class);
$rules = [];
foreach ($rulesData as $ruleData) {
$taxRule = $taxRuleFactory->create();
$this->dataObjectHelper->populateWithArray(
$taxRule,
$ruleData,
\Magento\Tax\Api\Data\TaxRuleInterface::class
);
$rules[$ruleData['code']] = $taxRuleService->save($taxRule)->getId();
}
return $rules;
}
/**
* Helper function that deletes tax rules
*
* @param int[] $ruleIds
*/
public function deleteTaxRules($ruleIds)
{
/** @var \Magento\Tax\Api\TaxRuleRepositoryInterface $taxRuleService */
$taxRuleService = $this->objectManager->create(\Magento\Tax\Api\TaxRuleRepositoryInterface::class);
foreach ($ruleIds as $ruleId) {
$taxRuleService->deleteById($ruleId);
}
}
/**
* Helper function that creates rates based on a set of input percentages.
*
* Returns a map of percentage => rate
*
* @param array $ratesData array of rate data, keys are 'country', 'region' and 'percentage'
* @return int[] Tax Rate Id
*/
public function createTaxRates($ratesData)
{
/** @var \Magento\Tax\Api\Data\TaxRateInterfaceFactory $taxRateFactory */
$taxRateFactory = $this->objectManager->create(\Magento\Tax\Api\Data\TaxRateInterfaceFactory::class);
/** @var \Magento\Tax\Api\TaxRateRepositoryInterface $taxRateService */
$taxRateService = $this->objectManager->create(\Magento\Tax\Api\TaxRateRepositoryInterface::class);
$rates = [];
foreach ($ratesData as $rateData) {
$code = "{$rateData['country']} - {$rateData['region']} - {$rateData['percentage']}";
$postcode = '*';
if (isset($rateData['postcode'])) {
$postcode = $rateData['postcode'];
$code = $code . " - " . $postcode;
}
$taxRate = $taxRateFactory->create();
$taxRate->setTaxCountryId($rateData['country'])
->setTaxRegionId($rateData['region'])
->setTaxPostcode($postcode)
->setCode($code)
->setRate($rateData['percentage']);
$rates[$code] = $taxRateService->save($taxRate)->getId();
}
return $rates;
}
/**
* Helper function that deletes tax rates
*
* @param int[] $rateIds
*/
public function deleteTaxRates($rateIds)
{
/** @var \Magento\Tax\Api\TaxRateRepositoryInterface $taxRateService */
$taxRateService = $this->objectManager->create(\Magento\Tax\Api\TaxRateRepositoryInterface::class);
foreach ($rateIds as $rateId) {
$taxRateService->deleteById($rateId);
}
}
/**
* Helper function that creates tax classes based on input.
*
* @param array $classesData Keys include 'name' and 'type'
* @return array ClassName => ClassId
*/
public function createTaxClasses($classesData)
{
$classes = [];
foreach ($classesData as $classData) {
/** @var \Magento\Tax\Model\ClassModel $class */
$class = $this->objectManager->create(\Magento\Tax\Model\ClassModel::class)
->setClassName($classData['name'])
->setClassType($classData['type'])
->save();
$classes[$classData['name']] = $class->getId();
}
return $classes;
}
/**
* Helper function that deletes tax classes
*
* @param int[] $classIds
*/
public function deleteTaxClasses($classIds)
{
/** @var \Magento\Tax\Model\ClassModel $class */
$class = $this->objectManager->create(\Magento\Tax\Model\ClassModel::class);
foreach ($classIds as $classId) {
$class->load($classId);
$class->delete();
}
}
}