Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AbstractProductPromotedProductsTest.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductIndex;
10 use Magento\Catalog\Test\Page\Adminhtml\CatalogProductEdit;
11 use Magento\Catalog\Test\Page\Product\CatalogProductView;
12 use Magento\Mtf\Client\BrowserInterface;
13 use Magento\Mtf\Fixture\FixtureFactory;
14 use Magento\Mtf\Fixture\InjectableFixture;
15 use Magento\Mtf\TestCase\Injectable;
16 
20 abstract class AbstractProductPromotedProductsTest extends Injectable
21 {
27  protected $browser;
28 
34  protected $fixtureFactory;
35 
41  protected $products = [];
42 
49 
56 
63 
71  public function __prepare(BrowserInterface $browser, FixtureFactory $fixtureFactory)
72  {
73  $this->browser = $browser;
74  $this->fixtureFactory = $fixtureFactory;
75  }
76 
85  public function __inject(
86  CatalogProductIndex $catalogProductIndex,
87  CatalogProductEdit $catalogProductEdit,
88  CatalogProductView $catalogProductView
89  ) {
90  $this->catalogProductIndex = $catalogProductIndex;
91  $this->catalogProductEdit = $catalogProductEdit;
92  $this->catalogProductView = $catalogProductView;
93  }
94 
101  protected function createProducts($products)
102  {
103  $list = array_map('trim', explode(',', $products));
104 
105  foreach ($list as $item) {
106  list($productName, $fixtureCode, $dataset) = array_map('trim', explode('::', $item));
107  $product = $this->fixtureFactory->createByCode($fixtureCode, ['dataset' => $dataset]);
108 
109  $product->persist();
110  $this->products[$productName] = $product;
111  }
112  }
113 
121  protected function assignPromotedProducts($promotedProducts, $type)
122  {
123  $promotedProducts = $this->parsePromotedProducts($promotedProducts);
124 
125  foreach ($promotedProducts as $productName => $assignedNames) {
126  $initialProduct = $this->products[$productName];
127  $filter = ['sku' => $initialProduct->getSku()];
128  $assignedProducts = [];
129 
130  foreach ($assignedNames as $assignedName) {
131  $assignedProducts[] = $this->products[$assignedName];
132  }
133 
134  $product = $this->fixtureFactory->create(
135  get_class($initialProduct),
136  [
137  'data' => [
138  $type => [
139  'products' => $assignedProducts
140  ]
141  ]
142  ]
143  );
144  $this->catalogProductIndex->open();
145  $this->catalogProductIndex->getProductGrid()->searchAndOpen($filter);
146  $this->catalogProductEdit->getProductForm()->fill($product);
147  $this->catalogProductEdit->getFormPageActions()->save();
148  $this->catalogProductEdit->getMessagesBlock()->waitSuccessMessage();
149  }
150  }
151 
158  protected function parsePromotedProducts($promotedProducts)
159  {
160  $list = array_map('trim', explode(';', $promotedProducts));
161  $result = [];
162 
163  foreach ($list as $item) {
164  list($productName, $promotedNames) = array_map('trim', explode(':', $item));
165  $result[$productName] = array_map('trim', explode(',', $promotedNames));
166  }
167 
168  return $result;
169  }
170 
177  protected function parseNavigateProductsOrder($navigateProductsOrder)
178  {
179  return array_map('trim', explode(',', $navigateProductsOrder));
180  }
181 
188  protected function parseProductsToVerify($productsToVerify)
189  {
190  $result = [];
191  $list = array_map('trim', explode(';', $productsToVerify));
192 
193  foreach ($list as $item) {
194  list($step, $products) = array_map('trim', explode(':', $item));
195  $result[$step] = empty($products)
196  ? []
197  : array_map('trim', explode(',', $products));
198  }
199 
200  return $result;
201  }
202 }
__inject(CatalogProductIndex $catalogProductIndex, CatalogProductEdit $catalogProductEdit, CatalogProductView $catalogProductView)
$type
Definition: item.phtml:13