From 6d2ab318c8cd58d4f5efa988d37fda6a1d08a960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz?= Date: Wed, 16 Nov 2016 09:00:24 +0100 Subject: [PATCH] [Behat] Implemet latest product scenario --- .../viewing_latest_products.feature} | 4 +- .../Behat/Context/Setup/ProductContext.php | 14 +++++ .../Behat/Context/Ui/Shop/HomepageContext.php | 57 +++++++++++++++++++ src/Sylius/Behat/Page/Shop/HomePage.php | 11 ++++ .../Behat/Page/Shop/HomePageInterface.php | 5 ++ .../Resources/config/services/contexts/ui.xml | 5 ++ src/Sylius/Behat/Resources/config/suites.yml | 1 + .../suites/ui/homepage/viewing_products.yml | 20 +++++++ 8 files changed, 115 insertions(+), 2 deletions(-) rename features/{product/viewing_products/viewing_latest_product.feature => homepage/viewing_latest_products.feature} (86%) create mode 100644 src/Sylius/Behat/Context/Ui/Shop/HomepageContext.php create mode 100644 src/Sylius/Behat/Resources/config/suites/ui/homepage/viewing_products.yml diff --git a/features/product/viewing_products/viewing_latest_product.feature b/features/homepage/viewing_latest_products.feature similarity index 86% rename from features/product/viewing_products/viewing_latest_product.feature rename to features/homepage/viewing_latest_products.feature index 0be9a4246e..1d6f351568 100644 --- a/features/product/viewing_products/viewing_latest_product.feature +++ b/features/homepage/viewing_latest_products.feature @@ -1,4 +1,4 @@ -@viewing_products +@homepage Feature: Viewing a latest product list In order to be up-to-date with the newest products As a Visitor @@ -6,7 +6,7 @@ Feature: Viewing a latest product list Background: Given the store operates on a single channel in "United States" - And the store has "Belvedere Vodka", "Coconaut Liqeur", "Chopin Chocolate Liquer" and "Capitan Morgan White Rum" products + And this channel has "Belvedere Vodka", "Coconaut Liqeur", "Chopin Chocolate Liquer" and "Capitan Morgan White Rum" products @ui Scenario: Viewing latest products diff --git a/src/Sylius/Behat/Context/Setup/ProductContext.php b/src/Sylius/Behat/Context/Setup/ProductContext.php index 278886157d..54cd580fe1 100644 --- a/src/Sylius/Behat/Context/Setup/ProductContext.php +++ b/src/Sylius/Behat/Context/Setup/ProductContext.php @@ -224,6 +224,7 @@ final class ProductContext implements Context /** * @Given /^(this product) is named "([^"]+)" (in the "([^"]+)" locale)$/ + * @Given /^the (product "[^"]+") is named "([^"]+)" (in the "([^"]+)" locale)$/ */ public function thisProductIsNamedIn(ProductInterface $product, $name, $locale) { @@ -272,6 +273,19 @@ final class ProductContext implements Context } } + /** + * @Given /^(this channel) has "([^"]+)", "([^"]+)", "([^"]+)" and "([^"]+)" products$/ + */ + public function thisChannelHasProducts(ChannelInterface $channel, ...$productsNames) + { + foreach ($productsNames as $productName) { + $product = $this->createProduct($productName); + $product->addChannel($channel); + + $this->saveProduct($product); + } + } + /** * @Given /^the (product "[^"]+") has(?:| a) "([^"]+)" variant priced at ("[^"]+")$/ * @Given /^(this product) has "([^"]+)" variant priced at ("[^"]+")$/ diff --git a/src/Sylius/Behat/Context/Ui/Shop/HomepageContext.php b/src/Sylius/Behat/Context/Ui/Shop/HomepageContext.php new file mode 100644 index 0000000000..b6efaa8b99 --- /dev/null +++ b/src/Sylius/Behat/Context/Ui/Shop/HomepageContext.php @@ -0,0 +1,57 @@ + + */ +final class HomepageContext implements Context +{ + /** + * @var HomePageInterface + */ + private $homePage; + + /** + * @param HomePageInterface $homepage + */ + public function __construct(HomePageInterface $homepage) + { + $this->homePage = $homepage; + } + + /** + * @When I check latest products + */ + public function iCheckLatestProducts() + { + $this->homePage->open(); + } + + /** + * @Then I should see :numberOfProducts products in the list + */ + public function iShouldSeeProductsInTheList($numberOfProducts) + { + $foundProductsNames = $this->homePage->getLatestProductsNames(); + + Assert::same( + (int) $numberOfProducts, + count($foundProductsNames), + '%d rows with products should appear on page, %d rows has been found' + ); + } +} diff --git a/src/Sylius/Behat/Page/Shop/HomePage.php b/src/Sylius/Behat/Page/Shop/HomePage.php index 4a3ce5c3c7..25061d8cc2 100644 --- a/src/Sylius/Behat/Page/Shop/HomePage.php +++ b/src/Sylius/Behat/Page/Shop/HomePage.php @@ -102,6 +102,17 @@ class HomePage extends SymfonyPage implements HomePageInterface $this->getElement('locale_selector')->clickLink($localeCode); } + /** + * {@inheritdoc} + */ + public function getLatestProductsNames() + {; + return array_map( + function (NodeElement $element) { return $element->getText(); }, + $this->getDocument()->findAll('css', '.sylius-product-name') + ); + } + /** * {@inheritdoc} */ diff --git a/src/Sylius/Behat/Page/Shop/HomePageInterface.php b/src/Sylius/Behat/Page/Shop/HomePageInterface.php index a45d605951..b059766c12 100644 --- a/src/Sylius/Behat/Page/Shop/HomePageInterface.php +++ b/src/Sylius/Behat/Page/Shop/HomePageInterface.php @@ -57,4 +57,9 @@ interface HomePageInterface extends SymfonyPageInterface * @param string $localeCode */ public function switchLocale($localeCode); + + /** + * @return array + */ + public function getLatestProductsNames(); } diff --git a/src/Sylius/Behat/Resources/config/services/contexts/ui.xml b/src/Sylius/Behat/Resources/config/services/contexts/ui.xml index 7516600a79..4ad253f8ab 100644 --- a/src/Sylius/Behat/Resources/config/services/contexts/ui.xml +++ b/src/Sylius/Behat/Resources/config/services/contexts/ui.xml @@ -333,6 +333,11 @@ + + + + + diff --git a/src/Sylius/Behat/Resources/config/suites.yml b/src/Sylius/Behat/Resources/config/suites.yml index aa0db56a41..d7e6473904 100644 --- a/src/Sylius/Behat/Resources/config/suites.yml +++ b/src/Sylius/Behat/Resources/config/suites.yml @@ -29,6 +29,7 @@ imports: - suites/ui/checkout/paying_for_order.yml - suites/ui/currency/currencies.yml - suites/ui/currency/managing_currencies.yml + - suites/ui/homepage/viewing_products.yml - suites/ui/inventory/cart_inventory.yml - suites/ui/inventory/checkout_inventory.yml - suites/ui/inventory/managing_inventory.yml diff --git a/src/Sylius/Behat/Resources/config/suites/ui/homepage/viewing_products.yml b/src/Sylius/Behat/Resources/config/suites/ui/homepage/viewing_products.yml new file mode 100644 index 0000000000..0ebf708209 --- /dev/null +++ b/src/Sylius/Behat/Resources/config/suites/ui/homepage/viewing_products.yml @@ -0,0 +1,20 @@ +# This file is part of the Sylius package. +# (c) Paweł Jędrzejewski + +default: + suites: + ui_homepage: + contexts_services: + - sylius.behat.context.hook.doctrine_orm + + - sylius.behat.context.transform.lexical + - sylius.behat.context.transform.product + - sylius.behat.context.transform.shared_storage + + - sylius.behat.context.setup.channel + - sylius.behat.context.setup.product + - sylius.behat.context.setup.shop_security + + - sylius.behat.context.ui.shop.homepage + filters: + tags: "@homepage && @ui"