/**
  * {@inheritdoc}
  */
 public function getTaxClassId($taxClassKey, $taxClassType = self::TYPE_PRODUCT)
 {
     if (!empty($taxClassKey)) {
         switch ($taxClassKey->getType()) {
             case TaxClassKeyInterface::TYPE_ID:
                 return $taxClassKey->getValue();
             case TaxClassKeyInterface::TYPE_NAME:
                 $searchCriteria = $this->searchCriteriaBuilder->addFilters([$this->filterBuilder->setField(ClassModel::KEY_TYPE)->setValue($taxClassType)->create()])->addFilters([$this->filterBuilder->setField(ClassModel::KEY_NAME)->setValue($taxClassKey->getValue())->create()])->create();
                 $taxClasses = $this->classRepository->getList($searchCriteria)->getItems();
                 $taxClass = array_shift($taxClasses);
                 return null == $taxClass ? null : $taxClass->getClassId();
         }
     }
     return null;
 }
 /**
  * @magentoDbIsolation enabled
  */
 public function testGetTaxClassId()
 {
     $taxClassName = 'Get Me';
     $taxClassDataObject = $this->taxClassFactory->create();
     $taxClassDataObject->setClassName($taxClassName)->setClassType(TaxClassManagementInterface::TYPE_CUSTOMER);
     $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
     /** @var \Magento\Tax\Api\Data\TaxClassKeyInterfaceFactory $taxClassKeyFactory */
     $taxClassKeyFactory = $this->objectManager->create('Magento\\Tax\\Api\\Data\\TaxClassKeyInterfaceFactory');
     $taxClassKeyTypeId = $taxClassKeyFactory->create();
     $this->dataObjectHelper->populateWithArray($taxClassKeyTypeId, [TaxClassKeyInterface::KEY_TYPE => TaxClassKeyInterface::TYPE_ID, TaxClassKeyInterface::KEY_VALUE => $taxClassId], '\\Magento\\Tax\\Api\\Data\\TaxClassKeyInterface');
     $this->assertEquals($taxClassId, $this->taxClassManagement->getTaxClassId($taxClassKeyTypeId, TaxClassManagementInterface::TYPE_CUSTOMER));
     $taxClassKeyTypeName = $taxClassKeyFactory->create();
     $this->dataObjectHelper->populateWithArray($taxClassKeyTypeName, [TaxClassKeyInterface::KEY_TYPE => TaxClassKeyInterface::TYPE_NAME, TaxClassKeyInterface::KEY_VALUE => $taxClassName], '\\Magento\\Tax\\Api\\Data\\TaxClassKeyInterface');
     $this->assertEquals($taxClassId, $this->taxClassManagement->getTaxClassId($taxClassKeyTypeId, TaxClassManagementInterface::TYPE_CUSTOMER));
     $this->assertNull($this->taxClassManagement->getTaxClassId(null));
     $this->assertEquals(null, $this->taxClassManagement->getTaxClassId($taxClassKeyTypeName, TaxClassManagementInterface::TYPE_PRODUCT));
 }
 /**
  * @param string $classType
  * @return void
  * @dataProvider validateTaxClassDataProvider
  * @expectedException \Magento\Framework\Exception\InputException
  * @expectedExceptionMessage One or more input exceptions have occurred.
  */
 public function testSaveWithValidateTaxClassDataException($classType)
 {
     $taxClass = $this->getMock('\\Magento\\Tax\\Model\\ClassModel', [], [], '', false);
     $taxClass->expects($this->any())->method('getClassName')->willReturn('');
     $taxClass->expects($this->atLeastOnce())->method('getClassType')->willReturn($classType);
     $taxClass->expects($this->any())->method('getClassId')->willReturn(10);
     $originTaxClass = $this->getMock('\\Magento\\Tax\\Model\\ClassModel', [], [], '', false);
     $originTaxClass->expects($this->once())->method('getClassType')->willReturn($classType);
     $this->classModelRegistryMock->expects($this->once())->method('retrieve')->with(10)->willReturn($originTaxClass);
     $this->model->save($taxClass);
 }
 /**
  * @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);
 }