// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/SignUpPage.java
// public class SignUpPage extends AbstractPage {
// 
// 
//     private SelenideElement username = $("input#username");
//     private SelenideElement email = $("input#email");
//     private SelenideElement password = $("input#password");
//     private SelenideElement confirmPassword = $("input#confirmPassword");
//     private SelenideElement checkEmail = $("input#check_email");
//     private SelenideElement signUpBtn = $("button.btn");
//     private SelenideElement errorMessage = $("span.error");
// 
//     @Override
//     public String getPath() {
//         return "/view/register";
//     }
// 
//     @Override
//     public boolean isDisplayed() {
//         return $("form#newUserForm").isDisplayed();
//     }
// 
//     @Step("Sign Up with: username={username} and email={email}")
//     public SignUpPage signUpWith(String username, String password, String email) {
//         setUsername(username);
//         setEmail(email);
//         setPassword(password);
//         setConfirmPassword(password);
//         clickSignUp();
//         return this;
//     }
// 
//     @Step("Sign Up with credentials {credentials}")
//     public SignUpPage signUpWith(Credentials credentials) {
//         return signUpWith(credentials.username(), credentials.password(), credentials.email());
//     }
// 
//     @Step("Set username for Singing Up {username}")
//     public SignUpPage setUsername(String username) {
//         this.username.shouldBe(Condition.visible);
//         this.username.setValue(username);
//         return this;
//     }
// 
//     @Step("Set email for Singing Up {email}")
//     public SignUpPage setEmail(String email) {
//         this.email.shouldBe(Condition.visible);
//         this.email.setValue(email);
//         return this;
//     }
// 
//     @Step("Set password for Singing Up {password}")
//     public SignUpPage setPassword(String password) {
//         this.password.shouldBe(Condition.visible);
//         this.password.setValue(password);
//         return this;
//     }
// 
//     @Step("Confirm password for Singing Up {confirmPassword}")
//     public SignUpPage setConfirmPassword(String confirmPassword) {
//         this.confirmPassword.shouldBe(Condition.visible);
//         this.confirmPassword.setValue(confirmPassword);
//         return this;
//     }
// 
//     @Step("Set email into fake field for Singing Up {email}")
//     public SignUpPage setCheckEmail(String email) {
//         this.checkEmail.setValue(email);
//         return this;
//     }
// 
//     @Step("Click Sign Up button")
//     public SignUpPage clickSignUp() {
//         this.signUpBtn.shouldBe(Condition.visible);
//         this.signUpBtn.click();
//         return this;
//     }
// 
//     @Step("Get error message")
//     public String errorMessage() {
//         errorMessage.shouldBe(Condition.visible);
//         return errorMessage.getText();
//     }
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/PageUtils.java
// public static <T extends Page> T to(Class<T> pageClazz) {
//     String pageName = extractPageName(pageClazz);
// 
//     if (pageClazz == LoginPage.class) {
//         return navigateToPage(pageName, pageClazz);
//     } else {
//         // navigate to requested page
//         navigateToPage(pageName, pageClazz);
// 
//         // then make sure we actually arrived by checking with 'at'
//         return at(pageClazz);
//     }
// }


import org.junit.jupiter.api.*;
import org.roag.pages.SignUpPage;
import static org.roag.pages.PageUtils.to;
package org.roag.web;



@DisplayName("SignUp Page Tests")
@Tag("SECURITY")
public class SignUpTest {


    @Test
    @DisplayName("Test password confirmation")
    void passwordConfirmationTest() {
        String error = to(SignUpPage.class)
                .setUsername("robot")
                .setEmail("robot@email.com")
                .setPassword("robot1")
                .setConfirmPassword("robot2")
                .clickSignUp()
                .errorMessage();
        Assertions.assertTrue(error != null && error.contains("confirmation of password does not match"));
    }

    @Test
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/SignUpPage.java
// public class SignUpPage extends AbstractPage {
// 
// 
//     private SelenideElement username = $("input#username");
//     private SelenideElement email = $("input#email");
//     private SelenideElement password = $("input#password");
//     private SelenideElement confirmPassword = $("input#confirmPassword");
//     private SelenideElement checkEmail = $("input#check_email");
//     private SelenideElement signUpBtn = $("button.btn");
//     private SelenideElement errorMessage = $("span.error");
// 
//     @Override
//     public String getPath() {
//         return "/view/register";
//     }
// 
//     @Override
//     public boolean isDisplayed() {
//         return $("form#newUserForm").isDisplayed();
//     }
// 
//     @Step("Sign Up with: username={username} and email={email}")
//     public SignUpPage signUpWith(String username, String password, String email) {
//         setUsername(username);
//         setEmail(email);
//         setPassword(password);
//         setConfirmPassword(password);
//         clickSignUp();
//         return this;
//     }
// 
//     @Step("Sign Up with credentials {credentials}")
//     public SignUpPage signUpWith(Credentials credentials) {
//         return signUpWith(credentials.username(), credentials.password(), credentials.email());
//     }
// 
//     @Step("Set username for Singing Up {username}")
//     public SignUpPage setUsername(String username) {
//         this.username.shouldBe(Condition.visible);
//         this.username.setValue(username);
//         return this;
//     }
// 
//     @Step("Set email for Singing Up {email}")
//     public SignUpPage setEmail(String email) {
//         this.email.shouldBe(Condition.visible);
//         this.email.setValue(email);
//         return this;
//     }
// 
//     @Step("Set password for Singing Up {password}")
//     public SignUpPage setPassword(String password) {
//         this.password.shouldBe(Condition.visible);
//         this.password.setValue(password);
//         return this;
//     }
// 
//     @Step("Confirm password for Singing Up {confirmPassword}")
//     public SignUpPage setConfirmPassword(String confirmPassword) {
//         this.confirmPassword.shouldBe(Condition.visible);
//         this.confirmPassword.setValue(confirmPassword);
//         return this;
//     }
// 
//     @Step("Set email into fake field for Singing Up {email}")
//     public SignUpPage setCheckEmail(String email) {
//         this.checkEmail.setValue(email);
//         return this;
//     }
// 
//     @Step("Click Sign Up button")
//     public SignUpPage clickSignUp() {
//         this.signUpBtn.shouldBe(Condition.visible);
//         this.signUpBtn.click();
//         return this;
//     }
// 
//     @Step("Get error message")
//     public String errorMessage() {
//         errorMessage.shouldBe(Condition.visible);
//         return errorMessage.getText();
//     }
// }
// 
// Path: rss-2-kindle-web-test/src/main/java/org/roag/pages/PageUtils.java
// public static <T extends Page> T to(Class<T> pageClazz) {
//     String pageName = extractPageName(pageClazz);
// 
//     if (pageClazz == LoginPage.class) {
//         return navigateToPage(pageName, pageClazz);
//     } else {
//         // navigate to requested page
//         navigateToPage(pageName, pageClazz);
// 
//         // then make sure we actually arrived by checking with 'at'
//         return at(pageClazz);
//     }
// }


// Path: rss-2-kindle-web-test/src/test/java/org/roag/web/SignUpTest.java
import org.junit.jupiter.api.*;
import org.roag.pages.SignUpPage;
import static org.roag.pages.PageUtils.to;

package org.roag.web;



@DisplayName("SignUp Page Tests")
@Tag("SECURITY")
public class SignUpTest {


    @Test
    @DisplayName("Test password confirmation")
    void passwordConfirmationTest() {
        String error = to(SignUpPage.class)
                .setUsername("robot")
                .setEmail("robot@email.com")
                .setPassword("robot1")
                .setConfirmPassword("robot2")
                .clickSignUp()
                .errorMessage();
        Assertions.assertTrue(error != null && error.contains("confirmation of password does not match"));
    }

    @Test
    @DisplayName("Test if username already exists")