TaxQuoteResponseTest.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. /**
  3. * @copyright Vertex. All rights reserved. https://www.vertexinc.com/
  4. * @author Mediotype https://www.mediotype.com/
  5. */
  6. namespace Vertex\Tax\Test\Unit\Model\TaxQuote;
  7. use Magento\Framework\DataObject;
  8. use Magento\Framework\DataObjectFactory;
  9. use SebastianBergmann\Diff\Line;
  10. use Vertex\Data\LineItem;
  11. use Vertex\Data\Tax;
  12. use Vertex\Services\Quote\Response;
  13. use Vertex\Tax\Model\TaxQuote\TaxQuoteResponse;
  14. use Vertex\Tax\Test\Unit\TestCase;
  15. class TaxQuoteResponseTest extends TestCase
  16. {
  17. /** @var Response */
  18. private $response;
  19. private $dataObjectFactory;
  20. protected function setUp()
  21. {
  22. parent::setUp();
  23. $this->dataObjectFactory = $this->createMock(DataObjectFactory::class);
  24. $this->dataObjectFactory->method('create')
  25. ->willReturnCallback(
  26. function () {
  27. return new DataObject();
  28. }
  29. );
  30. $lineItem1 = new LineItem();
  31. $lineItem1->setLineItemId(1);
  32. $lineItem1->setProductCode('PRODUCT-LINE-1');
  33. $lineItem1->setProductClass('Taxable Goods');
  34. $lineItem1->setQuantity(1);
  35. $lineItem1->setUnitPrice(2.50);
  36. $lineItem1->setTotalTax(2.50);
  37. $lineItem1Tax1 = new Tax();
  38. $lineItem1Tax1->setEffectiveRate(1.0);
  39. $lineItem1Tax2 = new Tax();
  40. $lineItem1Tax2->setEffectiveRate(2.0);
  41. $lineItem1->setTaxes([$lineItem1Tax1, $lineItem1Tax2]);
  42. $lineItem2 = new LineItem();
  43. $lineItem2->setTaxes([$lineItem1Tax1]);
  44. $lineItem2->setLineItemId(2);
  45. $lineItem2->setProductCode('PRODUCT-LINE-2');
  46. $lineItem2->setProductClass('None');
  47. $lineItem2->setQuantity(2);
  48. $lineItem2->setUnitPrice(1.50);
  49. $lineItem2->setTotalTax(1.50);
  50. $this->response = new Response();
  51. $this->response->setLineItems([$lineItem1, $lineItem2]);
  52. }
  53. /**
  54. * @covers \Vertex\Tax\Model\TaxQuote\TaxQuoteResponse::__construct()
  55. */
  56. public function testConstructorThrowsNoErrors()
  57. {
  58. $this->getObject(TaxQuoteResponse::class);
  59. }
  60. /**
  61. * @covers \Vertex\Tax\Model\TaxQuote\TaxQuoteResponse::prepareQuoteTaxedItems()
  62. * @covers \Vertex\Tax\Model\TaxQuote\TaxQuoteResponse::getTaxRate()
  63. */
  64. public function testPrepareQuoteTaxedItems()
  65. {
  66. $response = $this->getObject(TaxQuoteResponse::class, ['dataObjectFactory' => $this->dataObjectFactory]);
  67. $response->prepareQuoteTaxedItems($this->response->getLineItems());
  68. $result = $response->getQuoteTaxedItems();
  69. $this->assertInternalType('array', $result);
  70. $this->assertCount(2, $result);
  71. $this->assertTrue(isset($result[1]));
  72. $item = $result[1];
  73. $this->assertEquals('Taxable Goods', $item->getProductClass());
  74. $this->assertEquals('PRODUCT-LINE-1', $item->getProductSku());
  75. $this->assertEquals(1, $item->getProductQty());
  76. $this->assertEquals(2.5, $item->getUnitPrice());
  77. $this->assertEquals(3, $item->getTaxRate());
  78. $this->assertEquals(300, $item->getTaxPercent());
  79. $this->assertEquals(2.5, $item->getTaxAmount());
  80. $this->assertTrue(isset($result[2]));
  81. $item = $result[2];
  82. $this->assertEquals('None', $item->getProductClass());
  83. $this->assertEquals('PRODUCT-LINE-2', $item->getProductSku());
  84. $this->assertEquals(2, $item->getProductQty());
  85. $this->assertEquals(1.5, $item->getUnitPrice());
  86. $this->assertEquals(1, $item->getTaxRate());
  87. $this->assertEquals(100, $item->getTaxPercent());
  88. $this->assertEquals(1.5, $item->getTaxAmount());
  89. }
  90. }