/** * Test update grouped product. * * @param GroupedProduct $product * @param GroupedProduct $originalProduct * @return void */ public function test(GroupedProduct $product, GroupedProduct $originalProduct) { // Precondition $originalProduct->persist(); // Steps $this->catalogProductIndex->open(); $this->catalogProductIndex->getProductGrid()->searchAndOpen(['sku' => $originalProduct->getSku()]); $this->catalogProductEdit->getProductForm()->fill($product); $this->catalogProductEdit->getFormPageActions()->save(); }
/** * Verify product price on grouped product view page * * @param GroupedProduct $product * @param CatalogProductView $catalogProductView * @param AssertPriceOnProductPageInterface $object * @param BrowserInterface $browser * @param string $typePrice [optional] * @return bool|string */ protected function processAssertPrice(GroupedProduct $product, CatalogProductView $catalogProductView, AssertPriceOnProductPageInterface $object, BrowserInterface $browser, $typePrice = '') { $browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html'); $groupedData = $product->getAssociated(); /** @var CatalogProductSimple $subProduct */ foreach ($groupedData['products'] as $key => $subProduct) { //Process assertions $catalogProductView->getGroupedProductViewBlock()->{'item' . $typePrice . 'PriceProductBlock'}(++$key); $object->setErrorMessage(sprintf($this->errorMessage, $subProduct->getData('name'))); $object->assertPrice($subProduct, $catalogProductView->getGroupedProductViewBlock(), 'Grouped'); } }
/** * Assert that default qty for sub products in grouped product displays according to dataset on product page * * @param CatalogProductView $groupedProductView * @param GroupedProduct $product * @param BrowserInterface $browser * @return void */ public function processAssert(CatalogProductView $groupedProductView, GroupedProduct $product, BrowserInterface $browser) { $browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html'); $associatedProducts = $product->getAssociated(); $fixtureQtyData = []; $pageOptions = $groupedProductView->getViewBlock()->getOptions($product); $pageQtyData = []; foreach ($associatedProducts['assigned_products'] as $productData) { $fixtureQtyData[] = ['name' => $productData['name'], 'qty' => $productData['qty']]; } foreach ($pageOptions['grouped_options'] as $productData) { $pageQtyData[] = ['name' => $productData['name'], 'qty' => $productData['qty']]; } $fixtureQtyData = $this->sortDataByPath($fixtureQtyData, '::name'); $pageQtyData = $this->sortDataByPath($pageQtyData, '::name'); $error = $this->verifyData($fixtureQtyData, $pageQtyData); \PHPUnit_Framework_Assert::assertEmpty($error, $error); }
/** * Assert Grouped product on Frontend * * @param GroupedProduct $product * @return void */ protected function assertOnFrontend(GroupedProduct $product) { //Pages $frontendHomePage = Factory::getPageFactory()->getCmsIndexIndex(); $categoryPage = Factory::getPageFactory()->getCatalogCategoryView(); $productPage = Factory::getPageFactory()->getCatalogProductView(); //Steps $frontendHomePage->open(); $frontendHomePage->getTopmenu()->selectCategoryByName($product->getCategoryName()); //Verification on category product list $productListBlock = $categoryPage->getListProductBlock(); $this->assertTrue($productListBlock->isProductVisible($product->getName()), 'Product is absent on category page.'); //Verification on product detail page $productViewBlock = $productPage->getViewBlock(); $productListBlock->openProductViewPage($product->getName()); $this->assertEquals($product->getName(), $productViewBlock->getProductName(), 'Product name does not correspond to specified.'); $optionsOnPage = $productViewBlock->getOptions($product); $pageAssociatedProductNames = []; foreach ($optionsOnPage['grouped_options'] as $optionOnPage) { $pageAssociatedProductNames[] = $optionOnPage['name']; } $this->assertEquals($product->getAssociatedProductNames(), $pageAssociatedProductNames); }