/**
  * Assert that product attribute is searchable on Frontend.
  *
  * @param CatalogProductAttribute $attribute
  * @param CmsIndex $cmsIndex
  * @param InjectableFixture $product
  * @param CatalogsearchResult $catalogSearchResult
  * @return void
  */
 public function processAssert(CatalogProductAttribute $attribute, CmsIndex $cmsIndex, InjectableFixture $product, CatalogsearchResult $catalogSearchResult)
 {
     $searchValue = $this->getSearchValue($attribute);
     $cmsIndex->open();
     $cmsIndex->getSearchBlock()->search($searchValue);
     $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible();
     while (!$isVisible && $catalogSearchResult->getBottomToolbar()->nextPage()) {
         $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible();
     }
     \PHPUnit_Framework_Assert::assertTrue($isVisible, 'Product attribute is not searchable on Frontend.');
 }
 /**
  * Assert that product attribute is searchable on Frontend.
  *
  * @param CmsIndex $cmsIndex
  * @param InjectableFixture $product
  * @param AdvancedSearch $searchPage
  * @param CatalogsearchResult $catalogSearchResult
  * @param FixtureFactory $fixtureFactory
  * @return void
  */
 public function processAssert(CmsIndex $cmsIndex, InjectableFixture $product, AdvancedSearch $searchPage, CatalogsearchResult $catalogSearchResult, FixtureFactory $fixtureFactory)
 {
     $this->fixtureFactory = $fixtureFactory;
     $cmsIndex->open();
     $cmsIndex->getFooterBlock()->openAdvancedSearch();
     $searchForm = $searchPage->getForm();
     $productSearch = $this->prepareFixture($product);
     $searchForm->fill($productSearch);
     $searchForm->submit();
     $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible();
     while (!$isVisible && $catalogSearchResult->getBottomToolbar()->nextPage()) {
         $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible();
     }
     \PHPUnit_Framework_Assert::assertTrue($isVisible, 'Product attribute is not searchable on Frontend.');
 }
 /**
  * Assert that product can be searched via Quick Search using searchable product attributes (Search by SKU)
  *
  * @param CatalogsearchResult $catalogSearchResult
  * @param CmsIndex $cmsIndex
  * @param FixtureInterface $product
  * @return void
  *
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function processAssert(CatalogsearchResult $catalogSearchResult, CmsIndex $cmsIndex, FixtureInterface $product)
 {
     $cmsIndex->open();
     $sku = $product->hasData('sku') !== false ? $product->getSku() : $product->getName();
     $cmsIndex->getSearchBlock()->search($sku);
     $quantityAndStockStatus = $product->getQuantityAndStockStatus();
     $stockStatus = isset($quantityAndStockStatus['is_in_stock']) ? $quantityAndStockStatus['is_in_stock'] : null;
     $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible();
     while (!$isVisible && $catalogSearchResult->getBottomToolbar()->nextPage()) {
         $isVisible = $catalogSearchResult->getListProductBlock()->getProductItem($product)->isVisible();
     }
     if ($product->getVisibility() === 'Catalog' || $stockStatus === 'Out of Stock') {
         $isVisible = !$isVisible;
         list($this->errorMessage, $this->successfulMessage) = [$this->successfulMessage, $this->errorMessage];
     }
     \PHPUnit_Framework_Assert::assertTrue($isVisible, $this->errorMessage);
 }
 /**
  * Assert that products generated during configurable product creation - are not visible on frontend(by default).
  *
  * @param CatalogSearchResult $catalogSearchResult
  * @param CmsIndex $cmsIndex
  * @param ConfigurableProduct $product
  * @return void
  */
 public function processAssert(CatalogsearchResult $catalogSearchResult, CmsIndex $cmsIndex, ConfigurableProduct $product)
 {
     $configurableAttributesData = $product->getConfigurableAttributesData();
     $errors = [];
     $cmsIndex->open();
     foreach ($configurableAttributesData['matrix'] as $variation) {
         $cmsIndex->getSearchBlock()->search($variation['sku']);
         $isVisibleProduct = $catalogSearchResult->getListProductBlock()->isProductVisible($variation['name']);
         while (!$isVisibleProduct && $catalogSearchResult->getBottomToolbar()->nextPage()) {
             $isVisibleProduct = $catalogSearchResult->getListProductBlock()->isProductVisible($product->getName());
         }
         if ($isVisibleProduct) {
             $errors[] = sprintf("\nChild product with sku: \"%s\" is visible on frontend(by default).", $variation['sku']);
         }
     }
     \PHPUnit_Framework_Assert::assertEmpty($errors, implode(' ', $errors));
 }