/**
  * Run Delete used in configurable product attribute test
  *
  * @param ConfigurableProduct $product
  * @return array
  */
 public function test(ConfigurableProduct $product)
 {
     // Precondition
     $product->persist();
     /** @var CatalogProductAttribute $attribute */
     $attribute = $product->getDataFieldConfig('configurable_attributes_data')['source']->getAttributes()['attribute_key_0'];
     // Steps
     $this->attributeIndex->open();
     $this->attributeIndex->getGrid()->searchAndOpen(['attribute_code' => $attribute->getAttributeCode()]);
     $this->attributeNew->getPageActions()->delete();
     return ['attribute' => $attribute];
 }
 /**
  * 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
 /**
  * Prepare data for configurable product.
  *
  * @param ConfigurableProduct $product
  * @return array
  */
 protected function prepareConfigurableData(ConfigurableProduct $product)
 {
     $result = [];
     $checkoutData = $product->getCheckoutData();
     $result['qty'] = $checkoutData['qty'];
     $attributesData = $product->hasData('configurable_attributes_data') ? $product->getDataFieldConfig('configurable_attributes_data')['source']->getAttributesData() : null;
     if ($attributesData == null) {
         return $result;
     }
     foreach ($checkoutData['options']['configurable_options'] as $option) {
         $attributeId = $attributesData[$option['title']]['attribute_id'];
         $optionId = $attributesData[$option['title']]['options'][$option['value']]['id'];
         $result['super_attribute'][$attributeId] = $optionId;
     }
     return $result;
 }
 /**
  * Prepare configurable product options.
  *
  * @param ConfigurableProduct $product
  * @return array
  */
 protected function prepareConfigurableOptions(ConfigurableProduct $product)
 {
     $options = [];
     $attributesData = $product->getDataFieldConfig('configurable_attributes_data')['source']->getAttributesData();
     foreach ($product->getCheckoutData()['options']['configurable_options'] as $checkoutOption) {
         $options[] = ['option_id' => $attributesData[$checkoutOption['title']]['attribute_id'], 'option_value' => $attributesData[$checkoutOption['title']]['options'][$checkoutOption['value']]['id']];
     }
     return ['extension_attributes' => ['configurable_item_options' => $options]];
 }