/** * Find cart item blocks for associated products. * * @param FixtureInterface $product * @return array */ protected function findCartItems(FixtureInterface $product) { $cartItems = []; /** @var GroupedProduct $product */ $associatedProducts = $product->getAssociated()['products']; foreach ($associatedProducts as $product) { $cartItems[$product->getSku()] = parent::getCartItem($product); } return $cartItems; }
/** * Prepare options * * @param FixtureInterface $product * @return array */ protected function prepareOptions(FixtureInterface $product) { /** @var GroupedProduct $product */ $productOptions = []; $checkoutData = $product->getCheckoutData()['options']; if (count($checkoutData)) { $associated = $product->getAssociated(); foreach ($checkoutData as $optionData) { $productKey = str_replace('product_key_', '', $optionData['name']); $productOptions[] = ['option_name' => $associated['assigned_products'][$productKey]['name'], 'value' => $optionData['qty']]; } } return $productOptions; }
/** * @constructor * @param FixtureInterface $product */ public function __construct(FixtureInterface $product) { /** @var GroupedProduct $product */ $checkoutData = $product->getCheckoutData(); $this->data = isset($checkoutData['cartItem']) ? $checkoutData['cartItem'] : []; $associatedProducts = []; $cartItem = []; foreach ($product->getAssociated()['products'] as $key => $product) { $key = 'product_key_' . $key; $associatedProducts[$key] = $product; } // Replace key in checkout data foreach ($this->data as $fieldName => $fieldValues) { foreach ($fieldValues as $key => $value) { $product = $associatedProducts[$key]; $cartItem[$fieldName][$product->getSku()] = $value; } } // Add empty "options" field foreach ($associatedProducts as $product) { $cartItem['options'][] = ['title' => $product->getName(), 'value' => $cartItem['qty'][$product->getSku()]]; } $this->data = $cartItem; }
/** * Return product options on view page. * * @param FixtureInterface $product * @return array */ public function getOptions(FixtureInterface $product) { /** @var GroupedProduct $product */ $associatedProducts = $product->getAssociated()['products']; $options = []; foreach ($associatedProducts as $subProduct) { /** @var CatalogProductSimple $subProduct */ $subProductBlock = $this->_rootElement->find(sprintf($this->subProductByName, $subProduct->getName()), Locator::SELECTOR_XPATH); $options[] = ['name' => $subProductBlock->find($this->productName)->getText(), 'price' => $subProductBlock->find($this->price)->getText(), 'qty' => $subProductBlock->find($this->qty)->getValue()]; } return $options; }