/**
  * Fill product variations and save product
  *
  * @param ConfigurableProduct $variations
  * @return void
  */
 protected function fillProductVariationsAndSave(ConfigurableProduct $variations)
 {
     $variationsData = $variations->getData();
     $matrix = [];
     foreach ($variationsData['fields']['variations-matrix']['value'] as $variation) {
         $matrix[] = ['quantity_and_stock_status' => ['qty' => $variation['value']['qty']['value']]];
     }
     $createProductPage = Factory::getPageFactory()->getCatalogProductNew();
     $productForm = $createProductPage->getProductForm();
     $productForm->openTab('variations');
     /** @var \Magento\ConfigurableProduct\Test\Block\Adminhtml\Product\Edit\Tab\Super\Config $variationsTab */
     $variationsTab = $productForm->getTabElement('variations');
     $variationsTab->generateVariations();
     $variationsTab->getVariationsBlock()->fillVariations($matrix);
     $createProductPage->getFormPageActions()->save($variations);
 }
 /**
  * Prepare new product for update.
  *
  * @param ConfigurableProduct $initialProduct
  * @param ConfigurableProduct $product
  * @param string $attributeTypeAction
  * @return ConfigurableProduct
  */
 protected function prepareProduct(ConfigurableProduct $initialProduct, ConfigurableProduct $product, $attributeTypeAction)
 {
     if ($attributeTypeAction == 'deleteAll') {
         $this->deletedAttributes = $initialProduct->getDataFieldConfig('configurable_attributes_data')['source']->getAttributes();
         return $product;
     }
     $dataProduct = $product->getData();
     $dataInitialProduct = $initialProduct->getData();
     $oldMatrix = [];
     if ($attributeTypeAction == 'deleteLast') {
         array_pop($dataInitialProduct['configurable_attributes_data']['attributes_data']);
         $attributes = $initialProduct->getDataFieldConfig('configurable_attributes_data')['source']->getAttributes();
         $this->deletedAttributes[] = array_pop($attributes);
     }
     $attributesData = $dataInitialProduct['configurable_attributes_data']['attributes_data'];
     if ($attributeTypeAction == 'addOptions') {
         $oldMatrix = $dataInitialProduct['configurable_attributes_data']['matrix'];
         $this->addOptions($attributesData, $dataProduct['configurable_attributes_data']['attributes_data']);
     } else {
         $this->addAttributes($attributesData, $dataProduct['configurable_attributes_data']['attributes_data']);
     }
     $dataProduct['configurable_attributes_data'] = ['attributes_data' => $attributesData, 'matrix' => $oldMatrix];
     if ($product->hasData('category_ids')) {
         $dataProduct['category_ids']['category'] = $product->getDataFieldConfig('category_ids')['source']->getCategories()[0];
     }
     return $this->fixtureFactory->createByCode('configurableProduct', ['data' => $dataProduct]);
 }
Example #3
0
 /**
  * Get variations data for curl
  *
  * @param ConfigurableProduct $fixture
  * @return array
  */
 protected function _getVariationMatrix(ConfigurableProduct $fixture)
 {
     $config = $fixture->getDataConfig();
     $variationData = $fixture->getData('fields/variations-matrix/value');
     $curlData = [];
     $variationNumber = 0;
     foreach ($config['options'] as $attributeId => $options) {
         foreach ($options['id'] as $option) {
             foreach ($variationData[$variationNumber]['value'] as $fieldName => $fieldData) {
                 if ($fieldName == 'qty') {
                     $curlData[$option]['quantity_and_stock_status'][$fieldName] = $fieldData['value'];
                 } else {
                     $curlData[$option][$fieldName] = $fieldData['value'];
                 }
             }
             if (!isset($curlData[$option]['weight']) && $fixture->getData('fields/weight/value')) {
                 $curlData[$option]['weight'] = $fixture->getData('fields/weight/value');
             }
             $curlData[$option]['configurable_attribute'] = '{"' . $config['attributes'][$attributeId]['code'] . '":"' . $option . '"}';
             ++$variationNumber;
         }
     }
     return $curlData;
 }