/** * Assert that duplicated product can be found in grid by type, template, status and stock status. * * @param InjectableFixture $product * @param CatalogProduct $productGrid * @return void */ public function processAssert(InjectableFixture $product, CatalogProduct $productGrid) { $config = $product->getDataConfig(); $filter = ['name' => $product->getName(), 'visibility' => $product->getVisibility(), 'status' => 'Disabled', 'type' => ucfirst($config['create_url_params']['type']) . ' Product', 'price_to' => number_format($product->getPrice(), 2)]; $productGrid->open()->getProductGrid()->search($filter); \PHPUnit_Framework_Assert::assertTrue($productGrid->getProductGrid()->isRowVisible($filter, false, false), 'Product duplicate is absent in Products grid.'); }
/** * Get configurable product price. * * @param InjectableFixture $product * @return int */ protected function getProductPrice(InjectableFixture $product) { $price = $product->getPrice(); if (!$this->productsIsConfigured) { return $price; } $checkoutData = $product->getCheckoutData(); if ($checkoutData === null) { return 0; } $attributesData = $product->getConfigurableOptions()['attributes_data']; foreach ($checkoutData['options']['configurable_options'] as $option) { $itemOption = $attributesData[$option['title']]['options'][$option['value']]; $price += $itemOption['price_type'] == 'Fixed' ? $itemOption['price'] : $product->getPrice() / 100 * $itemOption['price']; } return $price; }
/** * Verify displayed product price on product page(front-end) equals passed from fixture. * * @return string|null */ protected function verifyPrice() { if ($this->product->hasData('price') == false) { return null; } $fixtureProductPrice = number_format($this->product->getPrice(), 2); $formProductPrice = $this->productView->getPriceBlock()->getRegularPrice(); if ($fixtureProductPrice == $formProductPrice) { return null; } $error = "Displayed product price on product page(front-end) not equals passed from fixture. " . "Actual: {$formProductPrice}, expected: {$fixtureProductPrice}."; $verifySpecialPriceResult = $this->verifySpecialPrice(); if ($verifySpecialPriceResult !== null) { $error .= $verifySpecialPriceResult; } return $error; }
/** * Get product actual price. * * @param InjectableFixture $product * @return int */ protected function getProductActualPrice(InjectableFixture $product) { return $product->hasData('special_price') ? $product->getSpecialPrice() : $product->getPrice(); }
/** * Prepare attribute data. * * @param InjectableFixture $product * @param int $key * @return array */ protected function prepareAttributeData(InjectableFixture $product, $key) { $data = []; foreach ($this->attributeProduct as $attributeKey => $attribute) { $value = $attribute; $attribute = is_numeric($attributeKey) ? $attribute : $attributeKey; $attributeValue = $attribute != 'price' ? $product->hasData($attribute) ? $product->getData($attribute) : 'N/A' : ($product->getDataFieldConfig('price')['source']->getPreset() !== null ? $product->getDataFieldConfig('price')['source']->getPreset() : number_format($product->getPrice(), 2)); $data['attributeValues'][$attribute] = !is_array($attributeValue) ? strtolower($attributeValue) : $attributeValue; $attributeName = $value === 'name' || $value === 'price' ? 'Info' : 'MetaData'; $data['attributeValuesFromPage'][$attribute] = $this->comparePage->getCompareProductsBlock()->{'getProduct' . $attributeName}($key + 1, $value); } return $data; }
/** * Get assigned product price. * * @param array $dataAssignedProduct * @param InjectableFixture $fixtureAssignedProduct * @param string $optionType * @return float */ protected function getAssignedProductPrice(array $dataAssignedProduct, InjectableFixture $fixtureAssignedProduct, $optionType) { $resultPrice = $fixtureAssignedProduct->getPrice(); if (isset($dataAssignedProduct['selection_price_value'])) { $assignedItemPrice = $dataAssignedProduct['selection_price_type'] == 'Fixed' ? $dataAssignedProduct['selection_price_value'] : $this->product->getPrice() * $dataAssignedProduct['selection_price_value'] / 100; $resultPrice = $optionType == 'Drop-down' || $optionType == 'Radio Buttons' ? $assignedItemPrice : $assignedItemPrice * $dataAssignedProduct['selection_qty']; } return $resultPrice; }
/** * Verify product price on category view page. * * @param InjectableFixture $product * @param CatalogCategoryView $catalogCategoryView * @return void */ protected function assertPrice(InjectableFixture $product, CatalogCategoryView $catalogCategoryView) { $price = $catalogCategoryView->getListProductBlock()->getProductPriceBlock($product->getName())->getRegularPrice(); \PHPUnit_Framework_Assert::assertEquals(number_format($product->getPrice(), 2), $price, 'Product regular price on category page is not correct.'); }
/** * Prepare product price from fixture. * * @param InjectableFixture $product * @return float */ protected function prepareFixturePrice(InjectableFixture $product) { /** @var CatalogProductSimple $product */ $customOptions = $product->getCustomOptions(); $checkoutData = $product->getCheckoutData(); $checkoutCustomOptions = isset($checkoutData['options']['custom_options']) ? $checkoutData['options']['custom_options'] : []; if (isset($checkoutData['cartItem'])) { $fixturePrice = $checkoutData['cartItem']['price']; } else { $fixturePrice = $product->getPrice(); $groupPrice = $product->getGroupPrice(); $specialPrice = $product->getSpecialPrice(); if ($groupPrice) { $groupPrice = reset($groupPrice); $fixturePrice = $groupPrice['price']; } if ($specialPrice) { $fixturePrice = $specialPrice; } 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']) { $fixturePrice += $option['price']; } else { $fixturePrice += $fixturePrice / 100 * $option['price']; } } } return $fixturePrice; }
/** * Get product price. * * @param InjectableFixture $product * @return int */ protected function getProductPrice(InjectableFixture $product) { return isset($product->getCheckoutData()['cartItem']['price']) ? $product->getCheckoutData()['cartItem']['price'] : $product->getPrice(); }