/**
  * Check whether there is an opportunity to compare products using given attribute.
  *
  * @param InjectableFixture $product
  * @param CatalogProductAttribute $attribute
  * @param BrowserInterface $browser
  * @param CatalogProductView $catalogProductView
  * @param CatalogProductCompare $catalogProductCompare
  */
 public function processAssert(InjectableFixture $product, CatalogProductAttribute $attribute, BrowserInterface $browser, CatalogProductView $catalogProductView, CatalogProductCompare $catalogProductCompare)
 {
     $browser->open($_ENV['app_frontend_url'] . $product->getUrlKey() . '.html');
     $catalogProductView->getViewBlock()->clickAddToCompare();
     $catalogProductCompare->open();
     $label = $attribute->hasData('manage_frontend_label') ? $attribute->getManageFrontendLabel() : $attribute->getFrontendLabel();
     \PHPUnit_Framework_Assert::assertTrue(in_array($label, $catalogProductCompare->getCompareProductsBlock()->getComparableAttributes()), 'Attribute is absent on product compare page.');
 }
 /**
  * Clear data after test.
  *
  * @return void
  */
 public function tearDown()
 {
     $this->cmsIndex->open();
     $this->cmsIndex->getLinksBlock()->openLink("Compare Products");
     for ($i = 1; $i <= count($this->products); $i++) {
         $this->catalogProductCompare->getCompareProductsBlock()->removeProduct();
     }
 }
 /**
  * Clear data after test.
  *
  * @return void
  */
 public function tearDown()
 {
     if (count($this->products) > 1) {
         $this->cmsIndex->open();
         $this->cmsIndex->getLinksBlock()->openLink("Compare Products");
         $this->catalogProductCompare->getCompareProductsBlock()->removeAllProducts();
     }
 }
 /**
  * Assert the product is not displayed on Compare Products page
  *
  * @param CatalogProductCompare $comparePage
  * @param FixtureInterface $product
  * @param int $countProducts [optional]
  * @return void
  */
 public function processAssert(CatalogProductCompare $comparePage, FixtureInterface $product, $countProducts = 0)
 {
     $comparePage->open();
     $compareBlock = $comparePage->getCompareProductsBlock();
     if ($countProducts > 1) {
         \PHPUnit_Framework_Assert::assertFalse($compareBlock->isProductVisibleInCompareBlock($product->getName()), 'The product displays on Compare Products page.');
     } else {
         \PHPUnit_Framework_Assert::assertEquals(self::SUCCESS_MESSAGE, $compareBlock->getEmptyMessage(), 'The product displays on Compare Products page.');
     }
 }
 /**
  * Assert that "Compare Product" page contains product(s) that was added
  * - Product name
  * - Price
  * - SKU
  * - Description (if exists, else text "No")
  * - Short Description (if exists, else text "No")
  *
  * @param array $products
  * @param CatalogProductCompare $comparePage
  * @param CmsIndex $cmsIndex
  * @return void
  *
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function processAssert(array $products, CatalogProductCompare $comparePage, CmsIndex $cmsIndex)
 {
     $cmsIndex->open();
     $cmsIndex->getLinksBlock()->openLink("Compare Products");
     foreach ($products as $key => $product) {
         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()['compare_price'] : number_format($product->getPrice(), 2));
             $attribute = is_numeric($attributeKey) ? 'info' : 'attribute';
             \PHPUnit_Framework_Assert::assertEquals($attributeValue, $comparePage->getCompareProductsBlock()->{'getProduct' . ucfirst($attribute)}($key + 1, $value), 'Product "' . $product->getName() . '" is\'n equals with data from fixture.');
         }
     }
 }
 /**
  * Move recently compared products on order page.
  *
  * @param Customer $customer
  * @param string $products
  * @return array
  */
 public function test(Customer $customer, $products)
 {
     // Preconditions
     // Create product
     $products = $this->objectManager->create('\\Magento\\Catalog\\Test\\TestStep\\CreateProductsStep', ['products' => $products])->run()['products'];
     foreach ($products as $itemProduct) {
         $this->browser->open($_ENV['app_frontend_url'] . $itemProduct->getUrlKey() . '.html');
         $this->catalogProductView->getViewBlock()->clickAddToCompare();
     }
     $this->cmsIndex->getLinksBlock()->openLink("Compare Products");
     $this->catalogProductCompare->getCompareProductsBlock()->removeAllProducts();
     // Steps:
     $this->customerIndex->open();
     $this->customerIndex->getCustomerGridBlock()->searchAndOpen(['email' => $customer->getEmail()]);
     $this->customerIndexEdit->getPageActionsBlock()->createOrder();
     $this->orderCreateIndex->getStoreBlock()->selectStoreView();
     $activitiesBlock = $this->orderCreateIndex->getCustomerActivitiesBlock();
     $activitiesBlock->getRecentlyComparedProductsBlock()->addProductsToOrder($products);
     $activitiesBlock->updateChanges();
     return ['products' => $products, 'productsIsConfigured' => false];
 }
 /**
  * Assert message is appeared on "Compare Products" block on myAccount page
  *
  * @param CatalogProductCompare $catalogProductCompare
  * @param FixtureInterface $product
  * @return void
  */
 public function processAssert(CatalogProductCompare $catalogProductCompare, FixtureInterface $product)
 {
     $successMessage = sprintf(self::SUCCESS_MESSAGE, $product->getName());
     $actualMessage = $catalogProductCompare->getMessagesBlock()->getSuccessMessage();
     \PHPUnit_Framework_Assert::assertEquals($successMessage, $actualMessage, 'Wrong success message is displayed.');
 }
 /**
  * Remove compare product
  *
  * @return void
  */
 protected function removeCompareProducts()
 {
     $this->cmsIndex->open();
     $this->cmsIndex->getLinksBlock()->openLink("Compare Products");
     $this->catalogProductCompare->getCompareProductsBlock()->removeAllProducts();
 }
 /**
  * After removing last product message is appeared on "Compare Products" page
  *
  * @param CatalogProductCompare $comparePage
  * @return void
  */
 public function processAssert(CatalogProductCompare $comparePage)
 {
     $comparePage->open();
     $actualMessage = $comparePage->getCompareProductsBlock()->getEmptyMessage();
     \PHPUnit_Framework_Assert::assertEquals(self::SUCCESS_MESSAGE, $actualMessage, 'Wrong success message is displayed.' . "\nExpected: " . self::SUCCESS_MESSAGE . "\nActual: " . $actualMessage);
 }