/** * Assert prices on the shopping cart * * @param FixtureInterface $product * @param CheckoutCart $checkoutCart * @return void * * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function assertOnShoppingCart(FixtureInterface $product, CheckoutCart $checkoutCart) { $checkoutCart->open(); /** @var CatalogProductSimple $product */ $customOptions = $product->getCustomOptions(); $checkoutData = $product->getCheckoutData(); $checkoutCartItem = isset($checkoutData['cartItem']) ? $checkoutData['cartItem'] : []; $checkoutCustomOptions = isset($checkoutData['options']['custom_options']) ? $checkoutData['options']['custom_options'] : []; $fixturePrice = $product->getPrice(); $specialPrice = $product->getSpecialPrice(); $cartItem = $checkoutCart->getCartBlock()->getCartItem($product); $formPrice = $cartItem->getPrice(); if ($specialPrice) { $fixturePrice = $specialPrice; } if (isset($checkoutCartItem['price'])) { $fixturePrice = $checkoutCartItem['price']; } $fixtureActualPrice = $fixturePrice; foreach ($checkoutCustomOptions as $checkoutOption) { $attributeKey = str_replace('attribute_key_', '', $checkoutOption['title']); $optionKey = str_replace('option_key_', '', $checkoutOption['value']); $option = $customOptions[$attributeKey]['options'][$optionKey]; if ('Fixed' == $option['price_type']) { $fixtureActualPrice += $option['price']; } else { $fixtureActualPrice += $fixturePrice / 100 * $option['price']; } } \PHPUnit_Framework_Assert::assertEquals($fixtureActualPrice, $formPrice, 'Product price in shopping cart is not correct.'); }
/** * Prepare options * * @param FixtureInterface $product * @return array */ protected function prepareOptions(FixtureInterface $product) { $productOptions = []; $checkoutData = $product->getCheckoutData()['options']; $customOptions = $product->getCustomOptions(); if (isset($checkoutData['custom_options'])) { foreach ($checkoutData['custom_options'] as $option) { $optionKey = str_replace('attribute_key_', '', $option['title']); $valueKey = str_replace('option_key_', '', $option['value']); $productOptions[] = ['option_name' => $customOptions[$optionKey]['title'], 'value' => isset($customOptions[$optionKey]['options'][$valueKey]['title']) ? $customOptions[$optionKey]['options'][$valueKey]['title'] : $valueKey]; } } return $productOptions; }
/** * @constructor * @param FixtureInterface $product */ public function __construct(FixtureInterface $product) { /** @var CatalogProductSimple $product */ $checkoutData = $product->getCheckoutData(); $cartItem = isset($checkoutData['cartItem']) ? $checkoutData['cartItem'] : []; $customOptions = $product->hasData('custom_options') ? $product->getCustomOptions() : []; $checkoutCustomOptions = isset($checkoutData['options']['custom_options']) ? $checkoutData['options']['custom_options'] : []; foreach ($checkoutCustomOptions as $key => $checkoutCustomOption) { $attribute = str_replace('attribute_key_', '', $checkoutCustomOption['title']); $option = str_replace('option_key_', '', $checkoutCustomOption['value']); $checkoutCustomOptions[$key] = ['title' => isset($customOptions[$attribute]['title']) ? $customOptions[$attribute]['title'] : $attribute, 'value' => isset($customOptions[$attribute]['options'][$option]['title']) ? $customOptions[$attribute]['options'][$option]['title'] : $option]; } $cartItem['options'] = $checkoutCustomOptions; $cartItem['qty'] = isset($checkoutData['qty']) ? $checkoutData['qty'] : 1; $this->data = $cartItem; }