Bom dia, estou com uma dúvida relacionada a boas práticas com Cucumber, pelo que eu entendi é usual colocar os asserts no @Then, entretanto caso eu precise checar ou validar alguma condição anterior é uma má prática utilizar asserts dentro de outras @** como o **@Given ou @When ?
@leilao
Feature: Editando um leilao
Scenario: O usuario logado pode editar um leilao criado por ele
Given Dado um usuario logado
And dado um leilao criado pelo usuario
When quando acessa a pagina de editar
And preenche o formulario com novos dados validos
Then volta para a pagina de leiloes
And o leilao aparece na tabela com os novos dados
public class LeilaoSteps {
private LoginPage loginPage;
private LeiloesPage leioesPage;
private NovoLeilaoPage novoLeilaoPage;
private Browser browser;
private AlterarLeilaoPage alterarLeilaoPage;
@Given("Dado um usuario logado")
public void dado_um_usuario_logado() {
browser = new Browser();
browser.seed();
loginPage = browser.getLoginPage();
leioesPage = loginPage.realizaLoginComoFulano();
}
@Given("dado um leilao criado pelo usuario")
public void dado_um_leilao_criado_pelo_usuario() {
Assert.assertTrue(this.leioesPage.existe("Tablet Xpto 3", "5.00", "fulano", "02/06/2023"));
}
@When("quando acessa a pagina de editar")
public void quando_acessa_a_pagina_de_leiloes() {
this.alterarLeilaoPage = this.leioesPage.visitaPaginaParaAltearLeilao();
}
@When("preenche o formulario com novos dados validos")
public void preenche_o_formulario_com_novos_dados_validos() {
alterarLeilaoPage.preencheForm("PS5", "4000", "01/12/2023");
}
@Then("volta para a pagina de leiloes")
public void volta_para_a_pagina_de_leiloes() {
Assert.assertTrue(this.leioesPage.estaNaPaginaDeLeiloes());
}
@Then("o leilao aparece na tabela com os novos dados")
public void o_leilao_aparece_na_tabela_com_os_novos_dados() {
Assert.assertFalse(this.leioesPage.existe("Tablet Xpto 3", "5.00", "fulano", "02/06/2023"));
Assert.assertTrue(this.leioesPage.existe("PS5", "4000", "fulano", "01/12/2023"));
browser.clean();
}
}
Nesse contexto, já existe um leilão cadastrado pelo usuário fulano, por isso senti a necessidade de validar antes
@Given("dado um leilao criado pelo usuario")
public void dado_um_leilao_criado_pelo_usuario() {
Assert.assertTrue(this.leioesPage.existe("Tablet Xpto 3", "5.00", "fulano", "02/06/2023"));
}
Assim, posso confirmar que os dados reamente foram atualizados
@Then("o leilao aparece na tabela com os novos dados")
public void o_leilao_aparece_na_tabela_com_os_novos_dados() {
Assert.assertFalse(this.leioesPage.existe("Tablet Xpto 3", "5.00", "fulano", "02/06/2023"));
Assert.assertTrue(this.leioesPage.existe("PS5", "4000", "fulano", "01/12/2023"));
browser.clean();
}