/** * Assert that product is present in products grid and can be found by sku, type, status and attribute set. * * @param FixtureInterface $product * @param CatalogProductIndex $productIndex * @return void */ public function processAssert(FixtureInterface $product, CatalogProductIndex $productIndex) { $this->product = $product; $productIndex->open(); $productIndex->getProductGrid()->resetFilter(); \PHPUnit_Framework_Assert::assertTrue($productIndex->getProductGrid()->isRowVisible($this->prepareFilter()), 'Product \'' . $this->product->getName() . '\' is absent in Products grid.'); }
/** * Assert that video is not displayed in admin panel. * * @param CatalogProductIndex $productGrid * @param InjectableFixture $product * @return void */ public function processAssert(CatalogProductIndex $productGrid, InjectableFixture $product) { $filter = ['sku' => $product->getSku()]; $productGrid->open(); $productGrid->getProductGrid()->search($filter); $src = $productGrid->getProductGrid()->getBaseImageSource(); \PHPUnit_Framework_Assert::assertTrue(strpos($src, '/placeholder/') !== false, 'Product image is displayed in product grid when it should not'); }
/** * 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(); }
/** * Test update bundle product * * @param BundleProduct $product * @param BundleProduct $originalProduct * @return array */ public function test(BundleProduct $product, BundleProduct $originalProduct) { // Preconditions $originalProduct->persist(); $originalCategory = $originalProduct->hasData('category_ids') ? $originalProduct->getDataFieldConfig('category_ids')['source']->getCategories() : null; $category = $product->hasData('category_ids') ? $product->getDataFieldConfig('category_ids')['source']->getCategories() : $originalCategory; // Steps $filter = ['sku' => $originalProduct->getSku()]; $this->catalogProductIndex->open(); $this->catalogProductIndex->getProductGrid()->searchAndOpen($filter); $this->catalogProductEdit->getProductForm()->fill($product); $this->catalogProductEdit->getFormPageActions()->save(); return ['category' => $category]; }
/** * Run update product simple entity test * * @param CatalogProductSimple $initialProduct * @param CatalogProductSimple $product * @return array */ public function test(CatalogProductSimple $initialProduct, CatalogProductSimple $product) { // Preconditions $initialProduct->persist(); $initialCategory = $initialProduct->hasData('category_ids') ? $initialProduct->getDataFieldConfig('category_ids')['source']->getCategories()[0] : null; $category = $product->hasData('category_ids') && $product->getCategoryIds()[0] ? $product->getDataFieldConfig('category_ids')['source']->getCategories()[0] : $initialCategory; // Steps $filter = ['sku' => $initialProduct->getSku()]; $this->productGrid->open(); $this->productGrid->getProductGrid()->searchAndOpen($filter); $this->editProductPage->getProductForm()->fill($product); $this->editProductPage->getFormPageActions()->save(); return ['category' => $category]; }
/** * Run delete product test. * * @param string $products * @param FixtureFactory $fixtureFactory * @param Category $category * @return array */ public function test($products, FixtureFactory $fixtureFactory, Category $category) { //Steps $products = explode(',', $products); $deleteProducts = []; foreach ($products as &$product) { list($fixture, $dataset) = explode('::', $product); $product = $fixtureFactory->createByCode($fixture, ['dataset' => $dataset, 'data' => ['category_ids' => ['category' => $category]]]); $product->persist(); $deleteProducts[] = ['sku' => $product->getSku()]; } $this->catalogProductIndex->open(); $this->catalogProductIndex->getProductGrid()->massaction($deleteProducts, 'Delete', true); return ['product' => $products]; }
/** * Run mass update product simple entity test. * * @param CatalogProductSimple $initialProduct * @param CatalogProductSimple $product * @param string $configData * @return array */ public function test(CatalogProductSimple $initialProduct, CatalogProductSimple $product, $configData) { $this->configData = $configData; // Preconditions $initialProduct->persist(); $this->objectManager->create('Magento\\Config\\Test\\TestStep\\SetupConfigurationStep', ['configData' => $configData])->run(); // Steps $this->productGrid->open(); $this->productGrid->getProductGrid()->updateAttributes([['sku' => $initialProduct->getSku()]]); $this->attributeMassActionPage->getAttributesBlockForm()->fill($product); $this->attributeMassActionPage->getFormPageActions()->save(); $data = array_merge($initialProduct->getData(), $product->getData()); $product = $this->objectManager->create('Magento\\Catalog\\Test\\Fixture\\CatalogProductSimple', ['data' => $data]); return ['category' => $initialProduct->getDataFieldConfig('category_ids')['source']->getCategories()[0], 'product' => $product]; }
/** * Run update product simple entity test. * * @param CatalogProductSimple $initialProduct * @param CatalogProductSimple $product * @param string $configData * @return array */ public function test(CatalogProductSimple $initialProduct, CatalogProductSimple $product, $configData = '') { $this->configData = $configData; // Preconditions $initialProduct->persist(); $initialCategory = $initialProduct->hasData('category_ids') ? $initialProduct->getDataFieldConfig('category_ids')['source']->getCategories()[0] : null; $category = $product->hasData('category_ids') && $product->getCategoryIds()[0] ? $product->getDataFieldConfig('category_ids')['source']->getCategories()[0] : $initialCategory; $this->objectManager->create('Magento\\Config\\Test\\TestStep\\SetupConfigurationStep', ['configData' => $configData])->run(); // Steps $filter = ['sku' => $initialProduct->getSku()]; $this->productGrid->open(); $this->productGrid->getProductGrid()->searchAndOpen($filter); $this->editProductPage->getProductForm()->fill($product); $this->editProductPage->getFormPageActions()->save(); return ['category' => $category]; }
/** * Assert that duplicated product is found by sku and has correct product type, product template, * product status disabled and out of stock * * @param FixtureInterface $product * @param CatalogProductIndex $productGrid * @return void */ public function processAssert(FixtureInterface $product, CatalogProductIndex $productGrid) { $config = $product->getDataConfig(); $filter = ['name' => $product->getName(), 'visibility' => $product->getVisibility(), 'status' => 'Disabled', 'sku' => $product->getSku() . '-1', 'type' => ucfirst($config['create_url_params']['type']) . ' Product', 'price_to' => number_format($product->getPrice(), 2)]; $productGrid->open()->getProductGrid()->search($filter); $filter['price_to'] = '$' . $filter['price_to']; \PHPUnit_Framework_Assert::assertTrue($productGrid->getProductGrid()->isRowVisible($filter, false), 'Product duplicate is absent in Products grid.'); }
/** * Run update product virtual entity test * * @param CatalogProductVirtual $product * @return void */ public function test(CatalogProductVirtual $product) { // Steps $this->productGrid->open(); $this->productGrid->getProductGrid()->searchAndOpen(['sku' => $this->product->getSku()]); $this->editProductPage->getProductForm()->fill($product); $this->editProductPage->getFormPageActions()->save(); }
/** * Test update bundle product * * @param CatalogProductBundle $product * @param CatalogProductBundle $originalProduct * @return void */ public function test(CatalogProductBundle $product, CatalogProductBundle $originalProduct) { $originalProduct->persist(); $this->catalogProductIndex->open(); $filter = ['sku' => $originalProduct->getSku()]; $this->catalogProductIndex->getProductGrid()->searchAndOpen($filter); $this->catalogProductEdit->getForm()->fill($product); $this->catalogProductEdit->getFormAction()->save(); }
/** * Assert that product cannot be found by name and sku * * @param FixtureInterface|FixtureInterface[] $product * @param CatalogProductIndex $productGrid * @return void */ public function processAssert($product, CatalogProductIndex $productGrid) { $products = is_array($product) ? $product : [$product]; foreach ($products as $product) { $filter = ['sku' => $product->getSku(), 'name' => $product->getName()]; $productGrid->open(); \PHPUnit_Framework_Assert::assertFalse($productGrid->getProductGrid()->isRowVisible($filter), "Product with sku \"{$filter['sku']}\" and name \"{$filter['name']}\" is attend in Products grid."); } }
/** * Assert that video data received from external service is correct. * * @param CatalogProductIndex $productGrid * @param CatalogProductEdit $editProductPage * @param InjectableFixture $product * @param array $video * @return void */ public function processAssert(CatalogProductIndex $productGrid, CatalogProductEdit $editProductPage, InjectableFixture $product, array $video) { $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen(['sku' => $product->getSku()]); $editProductPage->getProductForm()->openSection('images-and-videos'); $imagesTab = $editProductPage->getProductForm()->getSection('images-and-videos'); $result = $imagesTab->clickFirstVideo()->getVideoDialog()->validate($video); \PHPUnit_Framework_Assert::assertTrue($result, 'Video data received from external service is not correct.'); }
/** * Assert form data equals fixture data * * @param FixtureInterface $product * @param CatalogProductIndex $productGrid * @param CatalogProductEdit $productPage * @return void */ public function processAssert(FixtureInterface $product, CatalogProductIndex $productGrid, CatalogProductEdit $productPage) { $filter = ['sku' => $product->getSku()]; $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen($filter); $fixtureData = $this->prepareFixtureData($product->getData(), $product, $this->sortFields); $formData = $this->prepareFormData($productPage->getForm()->getData($product), $this->sortFields); $error = $this->verifyData($fixtureData, $formData); \PHPUnit_Framework_Assert::assertTrue(empty($error), $error); }
/** * Add this attribute to Default attribute Template. Create product and Assert that created attribute * is displayed on product form (Products > Inventory > Catalog). * * @param InjectableFixture $product * @param CatalogProductIndex $productGrid * @param CatalogProductEdit $productEdit * @param CatalogProductAttribute $attribute * @param CatalogAttributeSet $attributeSet * @param CatalogProductAttribute $productAttributeOriginal * @throws \Exception * @return void */ public function processAssert(InjectableFixture $product, CatalogProductIndex $productGrid, CatalogProductEdit $productEdit, CatalogProductAttribute $attribute, CatalogAttributeSet $attributeSet, CatalogProductAttribute $productAttributeOriginal = null) { if (!$product->hasData('sku')) { $product = $this->createProductWithAttributeSet($productAttributeOriginal, $attributeSet); } $filterProduct = ['sku' => $product->getSku()]; $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen($filterProduct); $catalogProductAttribute = $productAttributeOriginal !== null ? array_merge($productAttributeOriginal->getData(), $attribute->getData()) : $attribute->getData(); \PHPUnit_Framework_Assert::assertTrue($productEdit->getProductForm()->checkAttributeLabel($catalogProductAttribute), "Product Attribute is absent on Product form."); }
/** * Run test duplicate product entity. * * @param string $productType * @return array */ public function test($productType) { // Precondition $product = $this->createProduct($productType); // Steps $filter = ['sku' => $product->getSku()]; $this->productGrid->open(); $this->productGrid->getProductGrid()->searchAndOpen($filter); $this->editProductPage->getFormPageActions()->saveAndDuplicate(); return ['product' => $product]; }
/** * Assert that child products generated during configurable product are present in products grid * * @param CatalogProductIndex $productGrid * @param ConfigurableProduct $product * @return void */ public function processAssert(CatalogProductIndex $productGrid, ConfigurableProduct $product) { $configurableAttributesData = $product->getConfigurableAttributesData(); $errors = []; $productGrid->open(); foreach ($configurableAttributesData['matrix'] as $variation) { $filter = ['name' => $variation['name'], 'type' => isset($variation['weight']) && (int) $variation['weight'] > 0 ? 'Simple Product' : 'Virtual Product', 'sku' => $variation['sku'], 'visibility' => self::NOT_VISIBLE_INDIVIDUALLY]; if (!$productGrid->getProductGrid()->isRowVisible($filter)) { $errors[] = sprintf('Child product with name: "%s" and sku:"%s" is absent in grid.', $filter['name'], $filter['sku']); } } \PHPUnit_Framework_Assert::assertEmpty($errors, implode(' ', $errors)); }
/** * Assert all product attribute options on product creation form. * * @param InjectableFixture $product * @param CatalogProductIndex $productGrid * @param CatalogProductAttribute $attribute * @param CatalogProductEdit $productEdit * @return void */ public function processAssert(InjectableFixture $product, CatalogProductIndex $productGrid, CatalogProductAttribute $attribute, CatalogProductEdit $productEdit) { $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen(['sku' => $product->getSku()]); $attributeOptions = $attribute->getOptions(); $options[] = $attribute->getFrontendLabel(); foreach ($attributeOptions as $option) { $options[] = $option['admin']; } $productAttributeOptions = $productEdit->getProductForm()->getAttributeElement($attribute)->getText(); $productOptions = explode("\n", $productAttributeOptions); $diff = array_diff($options, $productOptions); \PHPUnit_Framework_Assert::assertTrue(empty($diff), "Products attribute options are absent on product form: " . implode(', ', $diff)); }
/** * Update product. * * @param ConfigurableProduct $product * @return void */ protected function updateProduct(ConfigurableProduct $product) { //open product $filter = ['sku' => $this->initialProduct->getSku()]; $this->productGrid->open(); $this->productGrid->getProductGrid()->searchAndOpen($filter); //update $productForm = $this->catalogProductEdit->getProductForm(); $productForm->openSection('variations'); /** @var Config $variationsSection */ $variationsSection = $productForm->getSection('variations'); $variationsSection->deleteVariations(); $this->catalogProductEdit->getProductForm()->fill($product); }
/** * Viewed product report list * * @param string $products * @param array $viewsReport * @param string $total * @return array */ public function test($products, array $viewsReport, $total) { // Preconditions $this->catalogProductIndexPage->open(); $this->catalogProductIndexPage->getProductGrid()->massaction([], 'Delete', true, 'Select All'); $productsList = $this->prepareProducts($products); $this->openProducts($productsList, $total); $this->productReportView->open(); $this->productReportView->getMessagesBlock()->clickLinkInMessage('notice', 'here'); // Steps $this->productReportView->getFilterBlock()->viewsReport($viewsReport); $this->productReportView->getActionsBlock()->showReport(); return ['productsList' => $productsList]; }
/** * Assert form data equals fixture data * * @param FixtureInterface $product * @param CatalogProductIndex $productGrid * @param CatalogProductEdit $productPage * @return void */ public function processAssert(FixtureInterface $product, CatalogProductIndex $productGrid, CatalogProductEdit $productPage) { $filter = ['sku' => $product->getSku()]; $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen($filter); $productData = $product->getData(); if ($product->hasData('custom_options')) { $customOptionsSource = $product->getDataFieldConfig('custom_options')['source']; $productData['custom_options'] = $customOptionsSource->getCustomOptions(); } $fixtureData = $this->prepareFixtureData($productData, $this->sortFields); $formData = $this->prepareFormData($productPage->getProductForm()->getData($product), $this->sortFields); $error = $this->verifyData($fixtureData, $formData); \PHPUnit_Framework_Assert::assertTrue(empty($error), $error); }
/** * Update product review on product page * * @param Review $review * @param int $rating * @return array */ public function test(Review $review, $rating) { // Steps $review = $this->createReview($review, $rating); $this->catalogProductIndex->open(); /** @var CatalogProductSimple $product */ $product = $this->reviewInitial->getDataFieldConfig('entity_id')['source']->getEntity(); $this->catalogProductIndex->getProductGrid()->searchAndOpen(['sku' => $product->getSku()]); $this->catalogProductEdit->getProductForm()->openTab('product_reviews'); $filter = ['title' => $this->reviewInitial->getTitle(), 'sku' => $product->getSku()]; $this->catalogProductEdit->getProductForm()->getTabElement('product_reviews')->getReviewsGrid()->searchAndOpen($filter); $this->reviewEdit->getReviewForm()->fill($review); $this->reviewEdit->getPageActions()->save(); $productRating = $this->reviewInitial->getDataFieldConfig('ratings')['source']->getRatings()[0]; return ['product' => $product, 'productRating' => $productRating]; }
/** * Run product type switching on updating test. * * @param string $productOrigin * @param string $product * @param string $actionName * @return array */ public function test($productOrigin, $product, $actionName) { // Preconditions list($fixtureClass, $dataset) = explode('::', $productOrigin); $productOrigin = $this->fixtureFactory->createByCode(trim($fixtureClass), ['dataset' => trim($dataset)]); $productOrigin->persist(); list($fixtureClass, $dataset) = explode('::', $product); $product = $this->fixtureFactory->createByCode(trim($fixtureClass), ['dataset' => trim($dataset)]); // Steps $this->catalogProductIndex->open(); $this->catalogProductIndex->getProductGrid()->searchAndOpen(['sku' => $productOrigin->getSku()]); $this->performAction($actionName); $this->catalogProductEdit->getProductForm()->fill($product); $this->catalogProductEdit->getFormPageActions()->save($product); return ['product' => $product]; }
/** * Add this attribute to Default attribute Template. Create product and Assert that created attribute * is displayed on product form (Products > Inventory > Catalog) * * @param FixtureFactory $fixtureFactory * @param CatalogProductSetIndex $productSet * @param CatalogProductSetEdit $productSetEdit * @param CatalogAttributeSet $productTemplate * @param CatalogProductIndex $productGrid * @param CatalogProductAttribute $productAttributeOriginal * @param CatalogProductEdit $productEdit * @param CatalogProductAttribute|null $productAttribute * @return void */ public function processAssert(FixtureFactory $fixtureFactory, CatalogProductSetIndex $productSet, CatalogProductSetEdit $productSetEdit, CatalogAttributeSet $productTemplate, CatalogProductIndex $productGrid, CatalogProductEdit $productEdit, CatalogProductAttribute $productAttribute, CatalogProductAttribute $productAttributeOriginal = null) { $filterAttribute = ['set_name' => $productTemplate->getAttributeSetName()]; $productSet->open(); $productSet->getGrid()->searchAndOpen($filterAttribute); $attributeData = $productAttributeOriginal !== null ? array_merge($productAttribute->getData(), $productAttributeOriginal->getData()) : $productAttribute->getData(); $productSetEdit->getAttributeSetEditBlock()->moveAttribute($attributeData, 'Product Details'); $productSetEdit->getPageActions()->save(); $product = $fixtureFactory->createByCode('catalogProductSimple', ['dataSet' => 'product_with_category', 'data' => ['attribute_set_id' => ['attribute_set' => $productTemplate]]]); $product->persist(); $filterProduct = ['sku' => $product->getSku()]; $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen($filterProduct); $catalogProductAttribute = $productAttributeOriginal !== null ? array_merge($productAttributeOriginal->getData(), $productAttribute->getData()) : $productAttribute->getData(); \PHPUnit_Framework_Assert::assertTrue($productEdit->getProductForm()->checkAttributeLabel($catalogProductAttribute), "Product Attribute is absent on Product form."); }
/** * Assign promoted products. * * @param string $promotedProducts * @param string $type * @return void */ protected function assignPromotedProducts($promotedProducts, $type) { $promotedProducts = $this->parsePromotedProducts($promotedProducts); foreach ($promotedProducts as $productName => $assignedNames) { $initialProduct = $this->products[$productName]; $filter = ['sku' => $initialProduct->getSku()]; $assignedProducts = []; foreach ($assignedNames as $assignedName) { $assignedProducts[] = $this->products[$assignedName]; } $product = $this->fixtureFactory->create(get_class($initialProduct), ['data' => [$type => ['products' => $assignedProducts]]]); $this->catalogProductIndex->open(); $this->catalogProductIndex->getProductGrid()->searchAndOpen($filter); $this->catalogProductEdit->getProductForm()->fill($product); $this->catalogProductEdit->getFormPageActions()->save(); $this->catalogProductEdit->getMessagesBlock()->waitSuccessMessage(); } }
/** * Add this attribute to Default attribute Template. Create product and Assert that created attribute * is displayed on product form (Products > Inventory > Catalog). * * @param InjectableFixture $product * @param FixtureFactory $fixtureFactory * @param CatalogProductIndex $catalogProductIndex * @param CatalogProductEdit $catalogProductEdit * @param CatalogProductAttribute $attribute * @param CatalogAttributeSet $attributeSet * @param CatalogProductAttribute $productAttributeOriginal * @throws \Exception * @return void */ public function processAssert(InjectableFixture $product, FixtureFactory $fixtureFactory, CatalogProductIndex $catalogProductIndex, CatalogProductEdit $catalogProductEdit, CatalogProductAttribute $attribute, CatalogAttributeSet $attributeSet, CatalogProductAttribute $productAttributeOriginal = null) { $this->fixtureFactory = $fixtureFactory; $this->catalogProductIndex = $catalogProductIndex; $this->catalogProductEdit = $catalogProductEdit; if (!$product->hasData('sku')) { if (!$productAttributeOriginal) { $productAttributeOriginal = $attribute; } $product = $this->objectManager->create('Magento\\Catalog\\Test\\TestStep\\CreateProductWithAttributeSetStep', ['attribute' => $productAttributeOriginal, 'attributeSet' => $attributeSet])->run(); $product = $product['product']; } $filterProduct = ['sku' => $product->getSku()]; $catalogProductIndex->open(); $catalogProductIndex->getProductGrid()->searchAndOpen($filterProduct); $catalogProductAttribute = $productAttributeOriginal !== null ? array_merge($productAttributeOriginal->getData(), $attribute->getData()) : $attribute->getData(); \PHPUnit_Framework_Assert::assertTrue($catalogProductEdit->getProductForm()->checkAttributeLabel($catalogProductAttribute), "Product Attribute is absent on Product form."); }
/** * Assert form data equals duplicate product configurable data. * * @param FixtureInterface $product * @param CatalogProductIndex $productGrid * @param CatalogProductEdit $productPage * @return void */ public function processAssert(FixtureInterface $product, CatalogProductIndex $productGrid, CatalogProductEdit $productPage) { $duplicateProductSku = $product->getSku() . '-1'; $filter = ['sku' => $duplicateProductSku]; $productGrid->open(); $productGrid->getProductGrid()->searchAndOpen($filter); $productData = $product->getData(); $productData['sku'] = $duplicateProductSku; $productData['status'] = 'Product offline'; if (isset($compareData['quantity_and_stock_status']['qty'])) { $compareData['quantity_and_stock_status']['qty'] = ''; $compareData['quantity_and_stock_status']['is_in_stock'] = 'Out of Stock'; } $fixtureData = $this->prepareFixtureData($productData, $this->sortFields); $formData = $this->prepareFormData($productPage->getProductForm()->getData($product), $this->sortFields); $error = $this->verifyData($fixtureData, $formData); \PHPUnit_Framework_Assert::assertTrue(empty($error), $error); }
/** * Open products on backend. * * @return void */ public function run() { $this->catalogProductIndex->open(); $this->catalogProductIndex->getProductGrid()->searchAndOpen(['sku' => $this->product->getSku()]); }
/** * Asserts that SKU successfully generated * * @param FixtureInterface $product * @param CatalogProductIndex $productGrid * @return void */ public function processAssert(FixtureInterface $product, CatalogProductIndex $productGrid) { $filter = ['sku' => $product->getName()]; $productGrid->open(); \PHPUnit_Framework_Assert::assertTrue($productGrid->getProductGrid()->isRowVisible($filter), 'SKU is not automatically generated for a product.'); }
/** * Assert product availability in products grid * * @param CatalogProductConfigurable $configurable * @param CatalogProductIndex $productPageGrid * @return void */ public function processAssert(CatalogProductConfigurable $configurable, CatalogProductIndex $productPageGrid) { $filter = ['sku' => $configurable->getSku()]; $productPageGrid->open(); \PHPUnit_Framework_Assert::assertTrue($productPageGrid->getProductGrid()->isRowVisible($filter), 'Product with sku \'' . $configurable->getSku() . '\' is absent in Products grid.'); }