Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SourcesTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
19 use PHPUnit\Framework\TestCase;
20 
21 class SourcesTest extends TestCase
22 {
26  private $importer;
27 
31  private $sourceItemRepository;
32 
36  private $sourceRepository;
37 
41  private $searchCriteriaBuilder;
42 
46  private $importDataMock;
47 
48  protected function setUp()
49  {
50  $this->importDataMock = $this->getMockBuilder(ImportData::class)
51  ->disableOriginalConstructor()
52  ->getMock();
53 
54  $this->importer = Bootstrap::getObjectManager()->create(Sources::class, [
55  'importData' => $this->importDataMock
56  ]);
57 
58  $this->sourceItemRepository = Bootstrap::getObjectManager()->create(SourceItemRepositoryInterface::class);
59  $this->sourceRepository = Bootstrap::getObjectManager()->create(SourceRepositoryInterface::class);
60  $this->searchCriteriaBuilder = Bootstrap::getObjectManager()->create(SearchCriteriaBuilder::class);
61  }
62 
67  {
68  $rowData = $this->buildRowDataArray('us-2', 'SKU-55', 33, 1);
69  $result = $this->importer->validateRow($rowData, 2);
70  $this->assertNotTrue($result, 'Expect result FALSE as given source ID is not present in database.');
71  }
72 
78  {
79  $rowData = $this->buildRowDataArray('eu-2', 'SKU-1', 33, 1);
80  $result = $this->importer->validateRow($rowData, 2);
81  $this->assertTrue($result, 'Expect result TRUE as given data is valid.');
82  }
83 
85  {
86  $this->importer->setParameters([
87  'behavior' => 'WrongBehavior'
88  ]);
89 
90  $this->assertEquals($this->importer->getBehavior(), \Magento\ImportExport\Model\Import::getDefaultBehavior());
91  }
92 
103  {
104  $this->importer->setParameters([
105  'behavior' => Import::BEHAVIOR_APPEND
106  ]);
107 
108  $searchCriteria = $this->searchCriteriaBuilder->create();
109  $beforeImportData = $this->getSourceItemList($searchCriteria);
110 
111  $bunch = [
112  $this->buildRowDataArray('eu-1', 'SKU-1', 6.8800, 1),
113  $this->buildRowDataArray('eu-2', 'SKU-1', 5.0000, 1),
114  $this->buildRowDataArray('us-1', 'SKU-2', 15, 1),
115  $this->buildRowDataArray('eu-1', 'SKU-2', 33, 1),
116  ];
117  $this->importData($bunch);
118 
119  $expectedData = $this->updateDataArrayByBunch($beforeImportData, $bunch);
120  $afterImportData = $this->getSourceItemList($searchCriteria);
121 
122  $this->assertEquals($expectedData, $afterImportData);
123  }
124 
135  {
136  $this->importer->setParameters([
137  'behavior' => Import::BEHAVIOR_DELETE
138  ]);
139 
140  $searchCriteria = $this->searchCriteriaBuilder->create();
141 
142  $bunch = [
143  $this->buildRowDataArray('eu-1', 'SKU-1', 6.88, 1),
144  $this->buildRowDataArray('eu-2', 'SKU-1', 5, 1),
145  ];
146  $this->importData($bunch);
147 
148  $afterImportData = $this->getSourceItemList($searchCriteria);
149 
150  $this->assertArrayNotHasKey('10-SKU-1', $afterImportData);
151  $this->assertArrayNotHasKey('20-SKU-1', $afterImportData);
152  }
153 
164  {
166  $this->importer->setParameters([
167  'behavior' => Import::BEHAVIOR_REPLACE
168  ]);
169 
170  $bunch = [
171  $this->buildRowDataArray('eu-2', 'SKU-1', 5, 1),
172  $this->buildRowDataArray('us-1', 'SKU-2', 15, 1),
173  ];
174  $this->importData($bunch);
175 
176  $searchCriteria = $this->searchCriteriaBuilder->create();
177  $afterImportData = $this->getSourceItemList($searchCriteria);
178 
179  $this->assertArrayHasKey('eu-2-SKU-1', $afterImportData);
180  $this->assertArrayHasKey('us-1-SKU-2', $afterImportData);
181  }
182 
193  {
194  $searchCriteria = $this->searchCriteriaBuilder->create();
195  $beforeImportData = $this->getSourceItemList($searchCriteria);
196  $this->assertArrayHasKey('eu-1-SKU-1', $beforeImportData);
197 
199  $this->importer->setParameters([
200  'behavior' => Import::BEHAVIOR_REPLACE
201  ]);
202 
203  $bunch = [
204  $this->buildRowDataArray('eu-2', 'SKU-1', 20, 1),
205  $this->buildRowDataArray('us-1', 'SKU-2', 15, 1),
206  ];
207  $this->importData($bunch);
208  $afterImportData = $this->getSourceItemList($searchCriteria);
209 
210  // checks whether original source item which has not been imported stays in database
211  $this->assertEquals($beforeImportData['eu-1-SKU-1'], $afterImportData['eu-1-SKU-1']);
212 
213  $this->assertArrayHasKey('eu-2-SKU-1', $afterImportData);
214  $this->assertArrayHasKey('us-1-SKU-2', $afterImportData);
215  }
216 
224  private function buildRowDataArray($sourceCode, $sku, $qty, $status)
225  {
226  return [
228  Sources::COL_SKU => $sku,
229  Sources::COL_QTY => $qty,
231  ];
232  }
233 
238  private function buildDataArray(array $sourceItems)
239  {
240  $comparableArray = [];
241  foreach ($sourceItems as $sourceItem) {
242  $key = sprintf('%s-%s', $sourceItem->getSourceCode(), $sourceItem->getSku());
243  $comparableArray[$key] = $this->buildRowDataArray(
244  $sourceItem->getSourceCode(),
245  $sourceItem->getSku(),
246  $sourceItem->getQuantity(),
247  $sourceItem->getStatus()
248  );
249  }
250  return $comparableArray;
251  }
252 
258  private function updateDataArrayByBunch(array $data, array $bunch)
259  {
260  foreach ($bunch as $bunchData) {
261  $key = sprintf('%s-%s', $bunchData[Sources::COL_SOURCE_CODE], $bunchData[Sources::COL_SKU]);
262  $data[$key] = $this->buildRowDataArray(
263  $bunchData[Sources::COL_SOURCE_CODE],
264  $bunchData[Sources::COL_SKU],
265  number_format($bunchData[Sources::COL_QTY], 4),
266  $bunchData[Sources::COL_STATUS]
267  );
268  }
269  return $data;
270  }
271 
276  private function getSourceItemList(SearchCriteria $searchCriteria)
277  {
278  $sourceItems = $this->sourceItemRepository->getList($searchCriteria);
279  return $this->buildDataArray($sourceItems->getItems());
280  }
281 
286  private function importData(array $bunch)
287  {
288  $this->importDataMock->expects($this->any())
289  ->method('getNextBunch')
290  ->will($this->onConsecutiveCalls($bunch, false));
291 
292  $this->importer->importData();
293  }
294 }
$searchCriteria
$sourceItems
$sourceCode
Definition: inventory.phtml:11
$status
Definition: order_status.php:8