Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Testes com Cucumber e correção de bug com cadastro de Pets e Raças #17

Merged
merged 14 commits into from
Oct 4, 2024
27 changes: 27 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,33 @@
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity6</artifactId>
</dependency>

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.23.1</version>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.0-RC1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>gherkin</artifactId>
<version>29.0.0</version>
</dependency>

<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.18.1</version>
</dependency>


</dependencies>

<build>
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/templates/formulario_cadastrar_pet.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ <h1>Cadastro de Pet</h1>
</small>
</div>

<input type="hidden" name="_csrf" th:value="${_csrf.token}">

<button class="btn btn-primary mt-4" type="submit">Submit</button>

</form>
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/templates/formulario_cadastrar_raca.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ <h1>Cadastro de Raça</h1>
th:field="*{descricao}">
</div>

<input type="hidden" name="_csrf" th:value="${_csrf.token}">

<button class="btn btn-primary mt-4" type="submit">Submit</button>

</form>
Expand Down
8 changes: 4 additions & 4 deletions src/main/resources/templates/formulario_login_usuario.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

<div class="container mt-5">
<div class="row mb-3">
<h1>Cutcute Petshop</h1>
<h1 id="login-title">Cutcute Petshop</h1>
</div>

<div class="alert alert-success" role="alert" th:if="${param.logout}">
<div id="alert-logout-success" class="alert alert-success" role="alert" th:if="${param.logout}">
Logout efetuado com sucesso
</div>

Expand All @@ -25,11 +25,11 @@ <h1>Cutcute Petshop</h1>
<input class="form-control" type="password" id="password" name="password">
</div>

<div class="alert alert-danger" role="alert" th:if="${param.erro_login}">
<div id="alert-invalid-user" class="alert alert-danger" role="alert" th:if="${param.erro_login}">
Usuário ou senha inválido
</div>

<button class="btn btn-primary" type="submit">Entrar</button>
<button id="btn-signin" class="btn btn-primary" type="submit">Entrar</button>

</form>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/templates/fragmentos.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

<div class="ms-auto">
<form class="form-inline" th:action="@{/logout}" method="post">
<button class="btn btn-outline-light" type="submit">Sair</button>
<button id="btn-sair" class="btn btn-outline-light" type="submit">Sair</button>
</form>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

<div class="jumbotron jumbotron-fluid mt-5">
<div class="container">
<h1 class="display-6">CPSB-API</h1>
<h1 id="home-title" class="display-6">CPSB-API</h1>
<p class="lead">Seja muito bem vindo ao Cutcute Petshop Spring Boot API!</p>
<hr class="my-4">
<p>Caso necessite de ajuda, entrar em contato com
Expand Down
13 changes: 0 additions & 13 deletions src/test/java/br/com/cpsb/CpsbApiApplicationTests.java

This file was deleted.

34 changes: 34 additions & 0 deletions src/test/java/features/Login.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# language: pt

@Login
Funcionalidade: Login

@LoginValido @SmokeTest
Cenário: Login com credenciais validas
Dado que estou na tela de login
Quando entro com credenciais validas
E clico no botao de submit
Entao vejo a tela Home

@LoginInvalido
Cenário: Login com username invalido
Dado que estou na tela de login
Quando entro com username invalido
E clico no botao de submit
Entao vejo a mensagem de erro

@LoginInvalido
Cenário: Login com password invalido
Dado que estou na tela de login
Quando entro com password invalido
E clico no botao de submit
Entao vejo a mensagem de erro

@SignOff
Cenário: Realizar o Sign Off
Dado que estou na tela de login
Quando entro com credenciais validas
E clico no botao de submit
Entao vejo a tela Home
Quando clico no botao Sign Off
Entao vejo a mensagem de Logout
32 changes: 32 additions & 0 deletions src/test/java/pages/BasePage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import utils.Setup;

import java.time.Duration;

public class BasePage extends Setup {

protected WebElement waitElement(By locator) {
return new WebDriverWait(driver, Duration.ofSeconds(10))
.until(ExpectedConditions.presenceOfElementLocated(locator));
}

protected boolean isVisible(By locator) {
waitElement(locator);
return driver.findElement(locator).isDisplayed();
}

protected void fillInput(By locator, String text) {
isVisible(locator);
driver.findElement(locator).sendKeys(text);
}

protected void click(By locator) {
isVisible(locator);
driver.findElement(locator).click();
}
}
13 changes: 13 additions & 0 deletions src/test/java/pages/HomePage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package pages;

import org.openqa.selenium.By;

public class HomePage extends BasePage {

public final By title = By.id("home-title");
public final By btnSair = By.id("btn-sair");

public void isOnHomePage() {
isVisible(title);
}
}
34 changes: 34 additions & 0 deletions src/test/java/pages/LoginPage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package pages;

import org.openqa.selenium.By;

public class LoginPage extends BasePage {

public final String validUserName = "Gabriel";
public final String validUserPassword = "12345";

public final By etUserName = By.id("username");
public final By etUserPassword = By.id("password");
public final By btnSignIn = By.id("btn-signin");

public final By tvLoginError = By.id("alert-invalid-user");
public final By tvLogoutSuccess = By.id("alert-logout-success");

public void fillUserName() {
fillInput(etUserName, validUserName);
}

public void fillUserPassword() {
fillInput(etUserPassword, validUserPassword);
}

public void clickBtnSignIn() {
click(btnSignIn);
}

public void isOnLoginPage() {
driver.get("http://localhost:8080/login");
isVisible(btnSignIn);
}

}
20 changes: 20 additions & 0 deletions src/test/java/stepDefinition/Hooks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package stepDefinition;

import io.cucumber.java.After;
import io.cucumber.java.Before;
import utils.Setup;

import static utils.Setup.driver;

public class Hooks {

@Before
public void setupDriver() {
Setup.createDriverInstance();
}

@After
public void closeDriver() {
Setup.quitDriver();
}
}
64 changes: 64 additions & 0 deletions src/test/java/stepDefinition/LoginSteps.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package stepDefinition;

import io.cucumber.java.pt.Dado;
import io.cucumber.java.pt.E;
import io.cucumber.java.pt.Entao;
import io.cucumber.java.pt.Quando;
import pages.BasePage;
import pages.HomePage;
import pages.LoginPage;

public class LoginSteps extends BasePage {

LoginPage login = new LoginPage();
HomePage home = new HomePage();

@Dado("que estou na tela de login")
public void queEstouNaTelaDeLogin() {
login.isOnLoginPage();
}

@Quando("entro com credenciais validas")
public void entroComCredenciaisValidas() {
login.fillUserName();
login.fillUserPassword();
}

@E("clico no botao de submit")
public void clicoNoBotaoDeSubmit() {
login.clickBtnSignIn();
}

@Entao("vejo a tela Home")
public void vejoATelaHome() {
home.isOnHomePage();
}

@Quando("entro com username invalido")
public void entroComUsernameInvalido() {
fillInput(login.etUserName, "invalid user");
login.fillUserPassword();
}

@Quando("entro com password invalido")
public void entroComPasswordInvalido() {
login.fillUserName();
fillInput(login.etUserPassword, "invalid password");
}

@Entao("vejo a mensagem de erro")
public void vejoAMensagemDeErro() {
isVisible(login.tvLoginError);
}

@Entao("vejo a mensagem de Logout")
public void vejoAMensagemDeLogout() {
isVisible(login.tvLogoutSuccess);
}

@Quando("clico no botao Sign Off")
public void clicoNoBotaoSignOff() {
isVisible(home.btnSair);
click(home.btnSair);
}
}
24 changes: 24 additions & 0 deletions src/test/java/utils/Setup.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package utils;

import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;


public class Setup {

public static WebDriver driver;

public static WebDriver createDriverInstance() {
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
driver = new ChromeDriver(options);
driver.manage().window().maximize();
return driver;
}

public static void quitDriver() {
driver.quit();
}
}