Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ReservationBuilderTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
12 use Magento\Framework\Validation\ValidationResultFactory;
17 use PHPUnit\Framework\TestCase;
18 
19 class ReservationBuilderTest extends TestCase
20 {
24  private $objectManager;
25 
29  private $reservation;
30 
34  private $validationResult;
35 
39  private $snakeToCamelCaseConverter;
40 
42  private $validationResultFactory;
43 
47  private $reservationBuilder;
48 
49  protected function setUp()
50  {
51  $this->objectManager = $this->getMockBuilder(ObjectManagerInterface::class)->getMock();
52  $this->snakeToCamelCaseConverter = $this->getMockBuilder(SnakeToCamelCaseConverter::class)->getMock();
53  $this->reservation = $this->getMockBuilder(ReservationInterface::class)->getMock();
54  $this->validationResult = $this->getMockBuilder(ValidationResult::class)
55  ->disableOriginalConstructor()
56  ->getMock();
57  $this->validationResultFactory = $this->getMockBuilder(ValidationResultFactory::class)->getMock();
58 
59  $this->reservationBuilder = (new ObjectManager($this))->getObject(
60  ReservationBuilder::class,
61  [
62  'objectManager' => $this->objectManager,
63  'snakeToCamelCaseConverter' => $this->snakeToCamelCaseConverter,
64  'validationResultFactory' => $this->validationResultFactory,
65  ]
66  );
67  }
68 
69  public function testBuild()
70  {
71  $reservationData = [
74  ReservationInterface::SKU => 'somesku',
76  ReservationInterface::METADATA => 'some meta data',
77  ];
78 
79  $reservationMappedData = [
80  'reservationId' => null,
81  'stockId' => 1,
82  'sku' => 'somesku',
83  'quantity' => 11,
84  'metadata' => 'some meta data',
85  ];
86 
87  $this->snakeToCamelCaseConverter
88  ->expects($this->once())
89  ->method('convert')
90  ->with(array_keys($reservationData))
91  ->willReturn(array_keys($reservationMappedData));
92 
93  $this->objectManager
94  ->expects($this->once())
95  ->method('create')
96  ->with(ReservationInterface::class, $reservationMappedData)
97  ->willReturn($this->reservation);
98 
99  $this->validationResultFactory
100  ->expects($this->once())
101  ->method('create')
102  ->willReturn($this->validationResult);
103 
104  $this->validationResult
105  ->expects($this->once())
106  ->method('isValid')
107  ->willReturn(true);
108 
109  $this->reservationBuilder->setStockId($reservationData[ReservationInterface::STOCK_ID]);
110  $this->reservationBuilder->setSku($reservationData[ReservationInterface::SKU]);
111  $this->reservationBuilder->setQuantity($reservationData[ReservationInterface::QUANTITY]);
112  $this->reservationBuilder->setMetadata($reservationData[ReservationInterface::METADATA]);
113 
114  self::assertEquals($this->reservation, $this->reservationBuilder->build());
115  }
116 
124  public function testThrowValidationException(array $firstSetter, array $secondSetter)
125  {
126  $this->validationResultFactory
127  ->expects($this->once())
128  ->method('create')
129  ->willReturn($this->validationResult);
130 
131  $this->validationResult
132  ->expects($this->once())
133  ->method('isValid')
134  ->willReturn(false);
135 
136  $method = $firstSetter['method'];
137  $argument = $firstSetter['argument'];
138  $this->reservationBuilder->$method($argument);
139 
140  $method = $secondSetter['method'];
141  $argument = $secondSetter['argument'];
142  $this->reservationBuilder->$method($argument);
143 
144  $this->reservationBuilder->build();
145  }
146 
150  public function getSettersAndValues(): array
151  {
152  return [
153  'with_missing_stock_id' => [
154  ['method' => 'setSku', 'argument' => 'somesku'],
155  ['method' => 'setQuantity', 'argument' => 11]
156  ],
157  'with_missing_sku' => [
158  ['method' => 'setStockId', 'argument' => 1],
159  ['method' => 'setQuantity', 'argument' => 11],
160  ],
161  'with_missing_qty' => [
162  ['method' => 'setStockId', 'argument' => 1],
163  ['method' => 'setSku', 'argument' => 'somesku'],
164  ],
165  ];
166  }
167 }
$method
Definition: info.phtml:13