ReservationBuilderTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\InventoryReservations\Test\Unit\Model;
  8. use Magento\Framework\ObjectManagerInterface;
  9. use Magento\Framework\Validation\ValidationResult;
  10. use Magento\Framework\Validation\ValidationResultFactory;
  11. use Magento\InventoryReservations\Model\ReservationBuilder;
  12. use Magento\InventoryReservations\Model\SnakeToCamelCaseConverter;
  13. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  14. use Magento\InventoryReservationsApi\Model\ReservationInterface;
  15. use PHPUnit\Framework\TestCase;
  16. class ReservationBuilderTest extends TestCase
  17. {
  18. /**
  19. * @var ObjectManager|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $objectManager;
  22. /**
  23. * @var ReservationInterface|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $reservation;
  26. /**
  27. * @var ValidationResult|\PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $validationResult;
  30. /**
  31. * @var SnakeToCamelCaseConverter|\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $snakeToCamelCaseConverter;
  34. /** @var ValidationResultFactory|\PHPUnit_Framework_MockObject_MockObject */
  35. private $validationResultFactory;
  36. /**
  37. * @var ReservationBuilder
  38. */
  39. private $reservationBuilder;
  40. protected function setUp()
  41. {
  42. $this->objectManager = $this->getMockBuilder(ObjectManagerInterface::class)->getMock();
  43. $this->snakeToCamelCaseConverter = $this->getMockBuilder(SnakeToCamelCaseConverter::class)->getMock();
  44. $this->reservation = $this->getMockBuilder(ReservationInterface::class)->getMock();
  45. $this->validationResult = $this->getMockBuilder(ValidationResult::class)
  46. ->disableOriginalConstructor()
  47. ->getMock();
  48. $this->validationResultFactory = $this->getMockBuilder(ValidationResultFactory::class)->getMock();
  49. $this->reservationBuilder = (new ObjectManager($this))->getObject(
  50. ReservationBuilder::class,
  51. [
  52. 'objectManager' => $this->objectManager,
  53. 'snakeToCamelCaseConverter' => $this->snakeToCamelCaseConverter,
  54. 'validationResultFactory' => $this->validationResultFactory,
  55. ]
  56. );
  57. }
  58. public function testBuild()
  59. {
  60. $reservationData = [
  61. ReservationInterface::RESERVATION_ID => null,
  62. ReservationInterface::STOCK_ID => 1,
  63. ReservationInterface::SKU => 'somesku',
  64. ReservationInterface::QUANTITY => 11,
  65. ReservationInterface::METADATA => 'some meta data',
  66. ];
  67. $reservationMappedData = [
  68. 'reservationId' => null,
  69. 'stockId' => 1,
  70. 'sku' => 'somesku',
  71. 'quantity' => 11,
  72. 'metadata' => 'some meta data',
  73. ];
  74. $this->snakeToCamelCaseConverter
  75. ->expects($this->once())
  76. ->method('convert')
  77. ->with(array_keys($reservationData))
  78. ->willReturn(array_keys($reservationMappedData));
  79. $this->objectManager
  80. ->expects($this->once())
  81. ->method('create')
  82. ->with(ReservationInterface::class, $reservationMappedData)
  83. ->willReturn($this->reservation);
  84. $this->validationResultFactory
  85. ->expects($this->once())
  86. ->method('create')
  87. ->willReturn($this->validationResult);
  88. $this->validationResult
  89. ->expects($this->once())
  90. ->method('isValid')
  91. ->willReturn(true);
  92. $this->reservationBuilder->setStockId($reservationData[ReservationInterface::STOCK_ID]);
  93. $this->reservationBuilder->setSku($reservationData[ReservationInterface::SKU]);
  94. $this->reservationBuilder->setQuantity($reservationData[ReservationInterface::QUANTITY]);
  95. $this->reservationBuilder->setMetadata($reservationData[ReservationInterface::METADATA]);
  96. self::assertEquals($this->reservation, $this->reservationBuilder->build());
  97. }
  98. /**
  99. * @param array $firstSetter
  100. * @param array $secondSetter
  101. * @dataProvider getSettersAndValues
  102. * @expectedException \Magento\Framework\Validation\ValidationException
  103. * @expectedExceptionMessage Validation error
  104. */
  105. public function testThrowValidationException(array $firstSetter, array $secondSetter)
  106. {
  107. $this->validationResultFactory
  108. ->expects($this->once())
  109. ->method('create')
  110. ->willReturn($this->validationResult);
  111. $this->validationResult
  112. ->expects($this->once())
  113. ->method('isValid')
  114. ->willReturn(false);
  115. $method = $firstSetter['method'];
  116. $argument = $firstSetter['argument'];
  117. $this->reservationBuilder->$method($argument);
  118. $method = $secondSetter['method'];
  119. $argument = $secondSetter['argument'];
  120. $this->reservationBuilder->$method($argument);
  121. $this->reservationBuilder->build();
  122. }
  123. /**
  124. * @return array
  125. */
  126. public function getSettersAndValues(): array
  127. {
  128. return [
  129. 'with_missing_stock_id' => [
  130. ['method' => 'setSku', 'argument' => 'somesku'],
  131. ['method' => 'setQuantity', 'argument' => 11]
  132. ],
  133. 'with_missing_sku' => [
  134. ['method' => 'setStockId', 'argument' => 1],
  135. ['method' => 'setQuantity', 'argument' => 11],
  136. ],
  137. 'with_missing_qty' => [
  138. ['method' => 'setStockId', 'argument' => 1],
  139. ['method' => 'setSku', 'argument' => 'somesku'],
  140. ],
  141. ];
  142. }
  143. }