// Path: rss-2-kindle-web-test/src/main/java/org/roag/junit/LifecycleTestExtension.java
// public class LifecycleTestExtension implements BeforeAllCallback, BeforeEachCallback, AfterEachCallback, AfterAllCallback {
// 
//     @Override
//     public void beforeAll(ExtensionContext extensionContext) throws Exception {
//         //we ignore error message here that such user already exists
//         to(SignUpPage.class).signUpWith(Config.credentials());
//     }
// 
//     @Override
//     public void beforeEach(ExtensionContext extensionContext) throws Exception {
//         to(LoginPage.class).loginWith(Config.credentials());
//         at(ProfilePage.class);
//     }
// 
//     @Override
//     public void afterEach(ExtensionContext extensionContext) throws Exception {
//         clearBrowserCache();
//     }
// 
//     @Override
//     public void afterAll(ExtensionContext extensionContext) throws Exception {
//         closeWebDriver();
//     }
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/ProfilePage.java
// @ExtendWith(LifecycleTestExtension.class)
// public class ProfilePage extends AbstractPage {
// 
//     private PageModuleCollection<SubscriberRecord> subscriberList = new PageModuleCollection<>(
//             $$x("div[id='subscribers_view']/table/tbody/tr"), SubscriberRecord::new);
// 
//     @Override
//     public String getPath() {
//         return "/view/profile";
//     }
// 
// 
//     private SubscriberRecord findSubscriberBy(Condition condition) {
//         return subscriberList.findBy(condition);
//     }
// 
//     @Step("Get subscriber by name {name}")
//     public SubscriberRecord getSubscriberByName(String name) {
//         return findSubscriberBy(Condition.text(name));
//     }
// 
//     @Step("Get subscriber by email {email}")
//     public SubscriberRecord getSubscriberByEmail(String email) {
//         return findSubscriberBy(Condition.text(email));
//     }
// 
//     @Step("Get first subscriber")
//     public SubscriberRecord getFirstSubscriber() {
//         return subscriberList.first();
//     }
// 
//     @Step("Get last subscriber")
//     public SubscriberRecord getLastSubscriber() {
//         return subscriberList.last();
//     }
// 
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/ServicePage.java
// public class ServicePage extends AbstractPage {
// 
//     private SelenideElement pollBtn = $("button#run_all");
// 
//     @Override
//     public String getPath() {
//         return "/view/service";
//     }
// 
//     @Step("Click poll my subscriptions immediately")
//     public ServicePage clickPollSubscriptionsImmediately() {
//         pollBtn.shouldBe(Condition.visible);
//         pollBtn.click();
//         return this;
//     }
// 
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/SubscribersPage.java
// public class SubscribersPage extends AbstractPage {
// 
//     private SelenideElement newSubscriberLink = $("a#new-tab");
//     private SelenideElement editSubscriberLink = $("a#edit-tab");
// 
//     private NewSubscriberForm newSubscriberForm = new NewSubscriberForm($("div#new"));
//     private EditSubscribersForm editSubscribersForm = new EditSubscribersForm($("div#edit"));
// 
//     @Override
//     public String getPath() {
//         return "/view/subscribers";
//     }
// 
//     @Step("Add new subscriber")
//     public SubscribersPage addNewSubscriber(Consumer<NewSubscriberForm> consumer) {
//         newSubscriberLink.click();
//         newSubscriberForm.shouldBe(Condition.visible);
//         consumer.accept(newSubscriberForm);
//         return this;
//     }
// 
//     @Step("Edit subscriber")
//     public SubscribersPage editSubscriber(Consumer<EditSubscribersForm> consumer) {
//         editSubscriberLink.click();
//         editSubscribersForm.shouldBe(Condition.visible);
//         consumer.accept(editSubscribersForm);
//         return this;
//     }
// 
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/modules/NavigationItem.java
// public enum NavigationItem {
//     SIGN_IN,
//     SIGN_UP,
//     HOWTO,
//     ABOUT,
//     CONTACT,
//     PROFILE,
//     SUBSCRIBERS,
//     SERVICES,
//     LOGOUT
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/PageUtils.java
// public static <T extends Page> T at(Class<T> pageClazz) {
//     return verifyAtPage(extractPageName(pageClazz), pageClazz);
// }


import com.codeborne.selenide.Condition;
import com.github.javafaker.Faker;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.roag.junit.LifecycleTestExtension;
import org.roag.pages.ProfilePage;
import org.roag.pages.ServicePage;
import org.roag.pages.SubscribersPage;
import org.roag.pages.modules.NavigationItem;
import static org.roag.pages.PageUtils.at;
package org.roag.web;



@ExtendWith(LifecycleTestExtension.class)
@DisplayName("Services tests")
@Tag("SERVICES")
public class ServicePageTest {

    private Faker faker = new Faker();

    @Test
    @DisplayName("Test poll subscriptions immediately")
// Path: rss-2-kindle-web-test/src/main/java/org/roag/junit/LifecycleTestExtension.java
// public class LifecycleTestExtension implements BeforeAllCallback, BeforeEachCallback, AfterEachCallback, AfterAllCallback {
// 
//     @Override
//     public void beforeAll(ExtensionContext extensionContext) throws Exception {
//         //we ignore error message here that such user already exists
//         to(SignUpPage.class).signUpWith(Config.credentials());
//     }
// 
//     @Override
//     public void beforeEach(ExtensionContext extensionContext) throws Exception {
//         to(LoginPage.class).loginWith(Config.credentials());
//         at(ProfilePage.class);
//     }
// 
//     @Override
//     public void afterEach(ExtensionContext extensionContext) throws Exception {
//         clearBrowserCache();
//     }
// 
//     @Override
//     public void afterAll(ExtensionContext extensionContext) throws Exception {
//         closeWebDriver();
//     }
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/ProfilePage.java
// @ExtendWith(LifecycleTestExtension.class)
// public class ProfilePage extends AbstractPage {
// 
//     private PageModuleCollection<SubscriberRecord> subscriberList = new PageModuleCollection<>(
//             $$x("div[id='subscribers_view']/table/tbody/tr"), SubscriberRecord::new);
// 
//     @Override
//     public String getPath() {
//         return "/view/profile";
//     }
// 
// 
//     private SubscriberRecord findSubscriberBy(Condition condition) {
//         return subscriberList.findBy(condition);
//     }
// 
//     @Step("Get subscriber by name {name}")
//     public SubscriberRecord getSubscriberByName(String name) {
//         return findSubscriberBy(Condition.text(name));
//     }
// 
//     @Step("Get subscriber by email {email}")
//     public SubscriberRecord getSubscriberByEmail(String email) {
//         return findSubscriberBy(Condition.text(email));
//     }
// 
//     @Step("Get first subscriber")
//     public SubscriberRecord getFirstSubscriber() {
//         return subscriberList.first();
//     }
// 
//     @Step("Get last subscriber")
//     public SubscriberRecord getLastSubscriber() {
//         return subscriberList.last();
//     }
// 
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/ServicePage.java
// public class ServicePage extends AbstractPage {
// 
//     private SelenideElement pollBtn = $("button#run_all");
// 
//     @Override
//     public String getPath() {
//         return "/view/service";
//     }
// 
//     @Step("Click poll my subscriptions immediately")
//     public ServicePage clickPollSubscriptionsImmediately() {
//         pollBtn.shouldBe(Condition.visible);
//         pollBtn.click();
//         return this;
//     }
// 
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/SubscribersPage.java
// public class SubscribersPage extends AbstractPage {
// 
//     private SelenideElement newSubscriberLink = $("a#new-tab");
//     private SelenideElement editSubscriberLink = $("a#edit-tab");
// 
//     private NewSubscriberForm newSubscriberForm = new NewSubscriberForm($("div#new"));
//     private EditSubscribersForm editSubscribersForm = new EditSubscribersForm($("div#edit"));
// 
//     @Override
//     public String getPath() {
//         return "/view/subscribers";
//     }
// 
//     @Step("Add new subscriber")
//     public SubscribersPage addNewSubscriber(Consumer<NewSubscriberForm> consumer) {
//         newSubscriberLink.click();
//         newSubscriberForm.shouldBe(Condition.visible);
//         consumer.accept(newSubscriberForm);
//         return this;
//     }
// 
//     @Step("Edit subscriber")
//     public SubscribersPage editSubscriber(Consumer<EditSubscribersForm> consumer) {
//         editSubscriberLink.click();
//         editSubscribersForm.shouldBe(Condition.visible);
//         consumer.accept(editSubscribersForm);
//         return this;
//     }
// 
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/modules/NavigationItem.java
// public enum NavigationItem {
//     SIGN_IN,
//     SIGN_UP,
//     HOWTO,
//     ABOUT,
//     CONTACT,
//     PROFILE,
//     SUBSCRIBERS,
//     SERVICES,
//     LOGOUT
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/PageUtils.java
// public static <T extends Page> T at(Class<T> pageClazz) {
//     return verifyAtPage(extractPageName(pageClazz), pageClazz);
// }


// Path: rss-2-kindle-web-test/src/test/java/org/roag/web/ServicePageTest.java
import com.codeborne.selenide.Condition;
import com.github.javafaker.Faker;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.roag.junit.LifecycleTestExtension;
import org.roag.pages.ProfilePage;
import org.roag.pages.ServicePage;
import org.roag.pages.SubscribersPage;
import org.roag.pages.modules.NavigationItem;
import static org.roag.pages.PageUtils.at;

package org.roag.web;



@ExtendWith(LifecycleTestExtension.class)
@DisplayName("Services tests")
@Tag("SERVICES")
public class ServicePageTest {

    private Faker faker = new Faker();

    @Test
    @DisplayName("Test poll subscriptions immediately")
    void pollingTest() {