Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SourceAssignTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
15 use PHPUnit\Framework\TestCase;
16 
17 class SourceAssignTest extends TestCase
18 {
22  private $bulkSourceAssign;
23 
27  private $searchCriteriaBuilder;
28 
32  private $sourceItemRepository;
33 
34  public function setUp()
35  {
36  parent::setUp();
37  $this->bulkSourceAssign = Bootstrap::getObjectManager()->get(BulkSourceAssignInterface::class);
38  $this->searchCriteriaBuilder = Bootstrap::getObjectManager()->get(SearchCriteriaBuilder::class);
39  $this->sourceItemRepository = Bootstrap::getObjectManager()->get(SourceItemRepositoryInterface::class);
40  }
41 
46  private function getSourceItemCodesBySku(string $sku): array
47  {
48  $searchCriteria = $this->searchCriteriaBuilder
49  ->addFilter(SourceItemInterface::SKU, $sku)
50  ->create();
51  $sourceItems = $this->sourceItemRepository->getList($searchCriteria)->getItems();
52 
53  $res = [];
54  foreach ($sourceItems as $sourceItem) {
55  $res[] = $sourceItem->getSourceCode();
56  }
57 
58  return $res;
59  }
60 
67  public function testBulkSourceAssignment()
68  {
69  $skus = ['SKU-1', 'SKU-2'];
70  $sources = ['eu-1'];
71  $count = $this->bulkSourceAssign->execute($skus, $sources);
72 
73  self::assertEquals(
74  2,
75  $count,
76  'Products source assignment count do not match'
77  );
78 
79  foreach ($skus as $sku) {
80  $sourceItemCodes = $this->getSourceItemCodesBySku($sku);
81  self::assertContains(
82  'eu-1',
83  $sourceItemCodes,
84  'Mass source assignment failed with a single source item'
85  );
86  }
87 
88  $skus = ['SKU-1', 'SKU-2'];
89  $sources = ['eu-1'];
90  $count = $this->bulkSourceAssign->execute($skus, $sources);
91 
92  self::assertEquals(
93  0,
94  $count,
95  'Source items are created in mass assignment operation even if they were existing'
96  );
97 
98  $skus = ['SKU-1', 'SKU-2', 'SKU-3', 'SKU-4'];
99  $sources = ['eu-1', 'eu-2', 'eu-3'];
100  $count = $this->bulkSourceAssign->execute($skus, $sources);
101 
102  foreach ($skus as $sku) {
103  $sourceItemCodes = $this->getSourceItemCodesBySku($sku);
104 
105  foreach ($sources as $source) {
106  self::assertContains(
107  $source,
108  $sourceItemCodes,
109  'Mass source assignment failed with multiple source items'
110  );
111  }
112  }
113 
114  self::assertEquals(
115  10, // (4skus x 3source) - (2previous_assignment) = 10
116  $count,
117  'Products source assignment count do not match with overlapping sources'
118  );
119  }
120 
127  {
128  $skus = ['simple_sku', 'configurable_sku', 'virtual_sku', 'grouped_sku', 'bundle_sku', 'downloadable_sku'];
129  $sources = ['eu-1', 'eu-2', 'eu-3'];
130  $count = $this->bulkSourceAssign->execute($skus, $sources);
131 
132  self::assertEquals(
133  9, // (simple + downloadable + virtual) x (eu-1, eu-2, eu-3) = 9
134  $count,
135  'Products source assignment count do not match with mixed product types'
136  );
137  }
138 }
$source
Definition: source.php:23
$count
Definition: recent.phtml:13
foreach($websiteCodes as $websiteCode) $skus
$searchCriteria
$sourceItems