123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Tax\Model\TaxClass;
- use Magento\Framework\Exception\InputException;
- use Magento\Tax\Api\Data\TaxClassInterfaceFactory;
- use Magento\Tax\Api\TaxClassManagementInterface;
- use Magento\Tax\Model\ClassModel as TaxClassModel;
- use Magento\TestFramework\Helper\Bootstrap;
- class RepositoryTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var Repository
- */
- private $taxClassRepository;
- /**
- * @var TaxClassInterfaceFactory
- */
- private $taxClassFactory;
- /**
- * @var TaxClassModel
- */
- private $taxClassModel;
- /**
- * @var \Magento\Framework\ObjectManagerInterface
- */
- private $objectManager;
- /**
- * @var array
- */
- private $predefinedTaxClasses;
- const SAMPLE_TAX_CLASS_NAME = 'Wholesale Customer';
- protected function setUp()
- {
- $this->objectManager = Bootstrap::getObjectManager();
- $this->taxClassRepository = $this->objectManager->create(\Magento\Tax\Api\TaxClassRepositoryInterface::class);
- $this->taxClassFactory = $this->objectManager->create(\Magento\Tax\Api\Data\TaxClassInterfaceFactory::class);
- $this->taxClassModel = $this->objectManager->create(\Magento\Tax\Model\ClassModel::class);
- $this->predefinedTaxClasses = [
- TaxClassManagementInterface::TYPE_PRODUCT => 'Taxable Goods',
- TaxClassManagementInterface::TYPE_CUSTOMER => 'Retail Customer',
- ];
- }
- /**
- * @magentoDbIsolation enabled
- */
- public function testSave()
- {
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName(self::SAMPLE_TAX_CLASS_NAME)
- ->setClassType(TaxClassManagementInterface::TYPE_CUSTOMER);
- $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
- $this->assertEquals(self::SAMPLE_TAX_CLASS_NAME, $this->taxClassModel->load($taxClassId)->getClassName());
- }
- /**
- * @magentoDbIsolation enabled
- * @expectedException \Magento\Framework\Exception\InputException
- * @expectedExceptionMessage A class with the same name already exists for ClassType PRODUCT.
- */
- public function testSaveThrowsExceptionIfGivenTaxClassNameIsNotUnique()
- {
- //ClassType and name combination has to be unique.
- //Testing against existing Tax classes which are already setup when the instance is installed
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($this->predefinedTaxClasses[TaxClassModel::TAX_CLASS_TYPE_PRODUCT])
- ->setClassType(TaxClassManagementInterface::TYPE_PRODUCT);
- $this->taxClassRepository->save($taxClassDataObject);
- }
- /**
- * @magentoDbIsolation enabled
- */
- public function testSaveThrowsExceptionIfGivenDataIsInvalid()
- {
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName(null)
- ->setClassType('');
- try {
- $this->taxClassRepository->save($taxClassDataObject);
- } catch (InputException $e) {
- $errors = $e->getErrors();
- $this->assertEquals('"class_name" is required. Enter and try again.', $errors[0]->getMessage());
- $this->assertEquals('"class_type" is required. Enter and try again.', $errors[1]->getMessage());
- }
- }
- /**
- * @magentoDbIsolation enabled
- */
- public function testGet()
- {
- $taxClassName = 'Get Me';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($taxClassName)
- ->setClassType(TaxClassManagementInterface::TYPE_CUSTOMER);
- $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
- $data = $this->taxClassRepository->get($taxClassId);
- $this->assertEquals($taxClassId, $data->getClassId());
- $this->assertEquals($taxClassName, $data->getClassName());
- $this->assertEquals(TaxClassManagementInterface::TYPE_CUSTOMER, $data->getClassType());
- }
- /**
- * @magentoDbIsolation enabled
- */
- public function testGetList()
- {
- $taxClassName = 'Get Me';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($taxClassName)
- ->setClassType(TaxClassManagementInterface::TYPE_CUSTOMER);
- $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
- /** @var \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */
- $searchCriteriaBuilder = Bootstrap::getObjectManager()->create(
- \Magento\Framework\Api\SearchCriteriaBuilder::class
- );
- /** @var \Magento\Tax\Api\Data\TaxClassSearchResultsInterface */
- $searchResult = $this->taxClassRepository->getList($searchCriteriaBuilder->create());
- $items = $searchResult->getItems();
- /** @var \Magento\Tax\Api\Data\TaxClassInterface */
- $taxClass = array_pop($items);
- $this->assertInstanceOf(\Magento\Tax\Api\Data\TaxClassInterface::class, $taxClass);
- $this->assertEquals($taxClassName, $taxClass->getClassName());
- $this->assertEquals($taxClassId, $taxClass->getClassId());
- $this->assertEquals(TaxClassManagementInterface::TYPE_CUSTOMER, $taxClass->getClassType());
- }
- /**
- * @expectedException \Magento\Framework\Exception\NoSuchEntityException
- * @expectedExceptionMessage No such entity with class_id = -9999
- */
- public function testGetThrowsExceptionIfRequestedTaxClassDoesNotExist()
- {
- $this->taxClassRepository->get(-9999);
- }
- /**
- * @magentoDbIsolation enabled
- */
- public function testDeleteById()
- {
- $taxClassName = 'Delete Me';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($taxClassName)
- ->setClassType(TaxClassModel::TAX_CLASS_TYPE_CUSTOMER);
- $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
- $this->assertTrue($this->taxClassRepository->deleteById($taxClassId));
- // Verify if the tax class is deleted
- $this->expectException(\Magento\Framework\Exception\NoSuchEntityException::class);
- $this->expectExceptionMessage("No such entity with class_id = $taxClassId");
- $this->taxClassRepository->deleteById($taxClassId);
- }
- /**
- * @expectedException \Magento\Framework\Exception\NoSuchEntityException
- * @expectedExceptionMessage No such entity with class_id = 99999
- */
- public function testDeleteByIdThrowsExceptionIfTargetTaxClassDoesNotExist()
- {
- $nonexistentTaxClassId = 99999;
- $this->taxClassRepository->deleteById($nonexistentTaxClassId);
- }
- /**
- * @magentoDbIsolation enabled
- */
- public function testSaveWithExistingTaxClass()
- {
- $taxClassName = 'New Class Name';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($taxClassName)
- ->setClassType(TaxClassModel::TAX_CLASS_TYPE_CUSTOMER);
- $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
- $this->assertEquals($taxClassName, $this->taxClassModel->load($taxClassId)->getClassName());
- $updatedTaxClassName = 'Updated Class Name';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($updatedTaxClassName)
- ->setClassId($taxClassId)
- ->setClassType(TaxClassModel::TAX_CLASS_TYPE_CUSTOMER);
- $this->assertEquals($taxClassId, $this->taxClassRepository->save($taxClassDataObject));
- $this->assertEquals($updatedTaxClassName, $this->taxClassModel->load($taxClassId)->getClassName());
- }
- /**
- * @magentoDbIsolation enabled
- * @expectedException \Magento\Framework\Exception\InputException
- * @expectedExceptionMessage Updating classType is not allowed.
- */
- public function testSaveThrowsExceptionIfTargetTaxClassHasDifferentClassType()
- {
- $taxClassName = 'New Class Name';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($taxClassName)
- ->setClassType(TaxClassModel::TAX_CLASS_TYPE_CUSTOMER);
- $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
- $this->assertEquals($taxClassName, $this->taxClassModel->load($taxClassId)->getClassName());
- $updatedTaxClassName = 'Updated Class Name';
- $taxClassDataObject = $this->taxClassFactory->create();
- $taxClassDataObject->setClassName($updatedTaxClassName)
- ->setClassId($taxClassId)
- ->setClassType(TaxClassModel::TAX_CLASS_TYPE_PRODUCT);
- $this->taxClassRepository->save($taxClassDataObject);
- }
- }
|