/** * 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]); }
/** * 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]]; }