Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
TaxClassRepositoryTest.php
Go to the documentation of this file.
1 <?php
7 namespace Magento\Tax\Api;
8 
13 use Magento\Tax\Api\Data\TaxClassInterfaceFactory;
18 
24 {
25  const SERVICE_NAME = 'taxTaxClassRepositoryV1';
26  const SERVICE_VERSION = 'V1';
27  const RESOURCE_PATH = '/V1/taxClasses';
28 
30  private $searchCriteriaBuilder;
31 
33  private $filterBuilder;
34 
36  private $sortOrderBuilder;
37 
39  private $taxClassFactory;
40 
42  private $taxClassRepository;
43 
45  private $taxClassRegistry;
46 
47  const SAMPLE_TAX_CLASS_NAME = 'Wholesale Customer';
48 
52  public function setUp()
53  {
54  $this->searchCriteriaBuilder = Bootstrap::getObjectManager()->create(
55  \Magento\Framework\Api\SearchCriteriaBuilder::class
56  );
57  $this->filterBuilder = Bootstrap::getObjectManager()->create(
58  \Magento\Framework\Api\FilterBuilder::class
59  );
60  $this->taxClassFactory = Bootstrap::getObjectManager()->create(
61  \Magento\Tax\Api\Data\TaxClassInterfaceFactory::class
62  );
63  $this->taxClassRegistry = Bootstrap::getObjectManager()->create(
64  \Magento\Tax\Model\ClassModelRegistry::class
65  );
66  $this->taxClassRepository = Bootstrap::getObjectManager()->create(
67  \Magento\Tax\Model\TaxClass\Repository::class,
68  ['classModelRegistry' => $this->taxClassRegistry]
69  );
70  $this->sortOrderBuilder = Bootstrap::getObjectManager()->create(
71  \Magento\Framework\Api\SortOrderBuilder::class
72  );
73  }
74 
78  public function testCreateTaxClass()
79  {
80  $taxClassName = self::SAMPLE_TAX_CLASS_NAME . uniqid();
82  $taxClassDataObject = $this->taxClassFactory->create();
83  $taxClassDataObject->setClassName($taxClassName)
85  $serviceInfo = [
86  'rest' => [
87  'resourcePath' => self::RESOURCE_PATH,
89  ],
90  'soap' => [
91  'service' => self::SERVICE_NAME,
92  'serviceVersion' => self::SERVICE_VERSION,
93  'operation' => self::SERVICE_NAME . 'Save',
94  ],
95  ];
96 
97  $requestData = ['taxClass' => [
98  'class_id' => $taxClassDataObject->getClassId(),
99  'class_name' => $taxClassDataObject->getClassName(),
100  'class_type' => $taxClassDataObject->getClassType(),
101  ],
102  ];
103  $taxClassId = $this->_webApiCall($serviceInfo, $requestData);
104  $this->assertNotNull($taxClassId);
105 
106  //Verify by getting the Data\TaxClassInterface
107  $taxClassData = $this->taxClassRepository->get($taxClassId);
108  $this->assertEquals($taxClassData->getClassName(), $taxClassName);
109  $this->assertEquals($taxClassData->getClassType(), TaxClassManagementInterface::TYPE_CUSTOMER);
110  }
111 
115  public function testUpdateTaxClass()
116  {
117  //Create Tax Class
118  $taxClassDataObject = $this->taxClassFactory->create();
119  $taxClassDataObject->setClassName(self::SAMPLE_TAX_CLASS_NAME . uniqid())
121  $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
122  $this->assertNotNull($taxClassId);
123 
124  //Update Tax Class
125  $updatedTaxClassName = self::SAMPLE_TAX_CLASS_NAME . uniqid();
126  $updatedTaxClassDataObject = $taxClassDataObject;
127  $updatedTaxClassDataObject->setClassName($updatedTaxClassName);
128 
129  $serviceInfo = [
130  'rest' => [
131  'resourcePath' => self::RESOURCE_PATH . '/' . $taxClassId,
133  ],
134  'soap' => [
135  'service' => self::SERVICE_NAME,
136  'serviceVersion' => self::SERVICE_VERSION,
137  'operation' => self::SERVICE_NAME . 'Save',
138  ],
139  ];
140 
141  $taxClass = [
142  'class_id' => $updatedTaxClassDataObject->getClassId(),
143  'class_name' => $updatedTaxClassDataObject->getClassName(),
144  'class_type' => $updatedTaxClassDataObject->getClassType(),
145  ];
146 
147  $requestData = ['taxClass' => $taxClass, 'ClassId' => $taxClassId];
148 
149  $this->assertEquals($taxClassId, $this->_webApiCall($serviceInfo, $requestData));
150 
151  //Verify by getting the Data\TaxClassInterface
152  $this->taxClassRegistry->remove($taxClassId);
153  $taxClassData = $this->taxClassRepository->get($taxClassId);
154  $this->assertEquals($taxClassData->getClassName(), $updatedTaxClassName);
155  }
156 
157  public function testGetTaxClass()
158  {
159  //Create Tax Class
160  $taxClassName = self::SAMPLE_TAX_CLASS_NAME . uniqid();
161  $taxClassDataObject = $this->taxClassFactory->create();
162  $taxClassDataObject->setClassName($taxClassName)
164  $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
165  $this->assertNotNull($taxClassId);
166 
167  //Verify by getting the Data\TaxClassInterface
168  $serviceInfo = [
169  'rest' => [
170  'resourcePath' => self::RESOURCE_PATH . '/' . $taxClassId,
172  ],
173  'soap' => [
174  'service' => self::SERVICE_NAME,
175  'serviceVersion' => self::SERVICE_VERSION,
176  'operation' => self::SERVICE_NAME . 'Get',
177  ],
178  ];
179  $requestData = ['taxClassId' => $taxClassId];
180  $taxClassData = $this->_webApiCall($serviceInfo, $requestData);
181  $this->assertEquals($taxClassData[ClassModel::KEY_NAME], $taxClassName);
182  $this->assertEquals(
183  $taxClassData[ClassModel::KEY_TYPE],
185  );
186  }
187 
191  public function testDeleteTaxClass()
192  {
193  $taxClassDataObject = $this->taxClassFactory->create();
194  $taxClassDataObject->setClassName(self::SAMPLE_TAX_CLASS_NAME . uniqid())
196  $taxClassId = $this->taxClassRepository->save($taxClassDataObject);
197  $this->assertNotNull($taxClassId);
198 
199  //Verify by getting the Data\TaxClassInterface
200  $serviceInfo = [
201  'rest' => [
202  'resourcePath' => self::RESOURCE_PATH . '/' . $taxClassId,
204  ],
205  'soap' => [
206  'service' => self::SERVICE_NAME,
207  'serviceVersion' => self::SERVICE_VERSION,
208  'operation' => self::SERVICE_NAME . 'DeleteById',
209  ],
210  ];
211  $requestData = ['taxClassId' => $taxClassId];
212  $result = $this->_webApiCall($serviceInfo, $requestData);
213  $this->assertTrue($result);
214 
215  try {
216  $this->taxClassRegistry->remove($taxClassId);
217  $this->taxClassRepository->get($taxClassId);
218  $this->fail("Tax class was not expected to be returned after being deleted.");
219  } catch (NoSuchEntityException $e) {
220  $this->assertEquals('No such entity with class_id = ' . $taxClassId, $e->getMessage());
221  }
222  }
223 
227  public function testSearchTaxClass()
228  {
229  $taxClassName = 'Retail Customer';
230  $taxClassNameField = ClassModel::KEY_NAME;
231  $filter = $this->filterBuilder->setField($taxClassNameField)
232  ->setValue($taxClassName)
233  ->create();
234  $this->searchCriteriaBuilder->addFilters([$filter]);
235  $searchData = $this->searchCriteriaBuilder->create()->__toArray();
236  $requestData = ['searchCriteria' => $searchData];
237  $serviceInfo = [
238  'rest' => [
239  'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData),
241  ],
242  'soap' => [
243  'service' => self::SERVICE_NAME,
244  'serviceVersion' => self::SERVICE_VERSION,
245  'operation' => self::SERVICE_NAME . 'GetList',
246  ],
247  ];
248  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
249  $this->assertEquals(1, $searchResults['total_count']);
250  $this->assertEquals($taxClassName, $searchResults['items'][0][$taxClassNameField]);
251  }
252 
257  {
258  $productTaxClass = [
259  ClassModel::KEY_NAME => 'Taxable Goods',
260  ClassModel::KEY_TYPE => 'PRODUCT',
261  ];
262  $customerTaxClass = [ClassModel::KEY_NAME => 'Retail Customer',
263  ClassModel::KEY_TYPE => 'CUSTOMER', ];
264 
265  $filter1 = $this->filterBuilder->setField(ClassModel::KEY_NAME)
266  ->setValue($productTaxClass[ClassModel::KEY_NAME])
267  ->create();
268  $filter2 = $this->filterBuilder->setField(ClassModel::KEY_NAME)
270  ->create();
271  $filter3 = $this->filterBuilder->setField(ClassModel::KEY_TYPE)
272  ->setValue($productTaxClass[ClassModel::KEY_TYPE])
273  ->create();
274  $filter4 = $this->filterBuilder->setField(ClassModel::KEY_TYPE)
276  ->create();
277  $sortOrder = $this->sortOrderBuilder->setField("class_type")
278  ->setDirection("ASC")->create();
279 
284  $this->searchCriteriaBuilder->addFilters([$filter1, $filter2]);
285  $this->searchCriteriaBuilder->addFilters([$filter3, $filter4]);
286  $this->searchCriteriaBuilder->addSortOrder($sortOrder);
287  $searchCriteria = $this->searchCriteriaBuilder->setCurrentPage(1)->setPageSize(10)->create();
288  $searchData = $searchCriteria->__toArray();
289  $requestData = ['searchCriteria' => $searchData];
290  $serviceInfo = [
291  'rest' => [
292  'resourcePath' => self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData),
294  ],
295  'soap' => [
296  'service' => self::SERVICE_NAME,
297  'serviceVersion' => self::SERVICE_VERSION,
298  'operation' => self::SERVICE_NAME . 'GetList',
299  ],
300  ];
301  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
302  $this->assertEquals(2, $searchResults['total_count']);
303 
304  $this->assertEquals(
306  $searchResults['items'][0][ClassModel::KEY_NAME]
307  );
308  $this->assertEquals(
309  $productTaxClass[ClassModel::KEY_NAME],
310  $searchResults['items'][1][ClassModel::KEY_NAME]
311  );
313  $this->searchCriteriaBuilder->addFilters([$filter2]);
314  $this->searchCriteriaBuilder->addFilters([$filter3, $filter4]);
315  $searchCriteria = $this->searchCriteriaBuilder->create();
316  $searchData = $searchCriteria->__toArray();
317  $requestData = ['searchCriteria' => $searchData];
318  $serviceInfo['rest']['resourcePath'] = self::RESOURCE_PATH . '/search' . '?' . http_build_query($requestData);
319  $searchResults = $this->_webApiCall($serviceInfo, $requestData);
320  $this->assertEquals(1, $searchResults['total_count']);
321  $this->assertEquals(
323  $searchResults['items'][0][ClassModel::KEY_NAME]
324  );
325  }
326 }
_webApiCall( $serviceInfo, $arguments=[], $webApiAdapterCode=null, $storeCode=null, $integration=null)
$searchCriteria
$customerTaxClass
Definition: tax_rule.php:9