Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,13 +214,6 @@ jobs:
cat src/BankMore.Web/blazor.log
exit 1

- name: Instalar Chrome para Selenium
run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt-get update
sudo apt-get install -y google-chrome-stable

- name: Executar testes E2E
env:
WEB_BASE_URL: http://localhost:5000
Expand Down
16 changes: 0 additions & 16 deletions BankMore/BankMore.sln
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankMore.Tarifas", "src\Ban
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankMore.Web", "src\BankMore.Web\BankMore.Web.csproj", "{506CA0C9-AAA5-4852-B43C-87B52FF7C87C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NewFolder1", "NewFolder1", "{2719E7F0-5FF6-4A0E-ABFF-C55C317C840D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BankMore.Web.E2ETests", "tests\BankMore.Web.E2ETests\BankMore.Web.E2ETests.csproj", "{D82733F6-5541-4733-97E7-162B246233DC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -181,18 +177,6 @@ Global
{506CA0C9-AAA5-4852-B43C-87B52FF7C87C}.Release|x64.Build.0 = Release|Any CPU
{506CA0C9-AAA5-4852-B43C-87B52FF7C87C}.Release|x86.ActiveCfg = Release|Any CPU
{506CA0C9-AAA5-4852-B43C-87B52FF7C87C}.Release|x86.Build.0 = Release|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Debug|x64.ActiveCfg = Debug|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Debug|x64.Build.0 = Debug|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Debug|x86.ActiveCfg = Debug|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Debug|x86.Build.0 = Debug|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Release|Any CPU.Build.0 = Release|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Release|x64.ActiveCfg = Release|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Release|x64.Build.0 = Release|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Release|x86.ActiveCfg = Release|Any CPU
{D82733F6-5541-4733-97E7-162B246233DC}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
7 changes: 0 additions & 7 deletions BankMore/global.json

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ protected SeleniumTestBase()
Wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));

// URL base da aplicação (deve estar rodando no Docker)
BaseUrl = Environment.GetEnvironmentVariable("WEB_BASE_URL") ?? "http://localhost:5000";
BaseUrl = Environment.GetEnvironmentVariable("WEB_BASE_URL") ?? "http://localhost:8080";

Driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
Driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30);
Expand Down
73 changes: 71 additions & 2 deletions BankMore/tests/BankMore.Web.E2ETests/Tests/CadastroE2ETests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using BankMore.Web.E2ETests.Infrastructure;
using BankMore.Web.E2ETests.PageObjects;

Expand Down Expand Up @@ -27,9 +27,51 @@ public void DeveCarregarPaginaCadastro()
Driver.Title.Should().Contain("Cadastro");
}

[Fact(DisplayName = "Deve criar conta com dados válidos")]
public void DeveCriarContaComDadosValidos()
{
// Arrange
var cpf = GerarCpfAleatorio();
var nome = "João Silva Teste E2E";
var senha = "senha123";

// Act
_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();

// Assert
_cadastroPage.ExibeMensagemSucesso().Should().BeTrue();
var mensagem = _cadastroPage.ObterMensagemSucesso();
mensagem.Should().Contain("Conta criada com sucesso!");
mensagem.Should().Contain("Número da conta:");

var numeroConta = _cadastroPage.ObterNumeroConta();
numeroConta.Should().NotBeNullOrEmpty();
numeroConta.Should().MatchRegex(@"^\d+$"); // Apenas números
}

[Fact(DisplayName = "Deve redirecionar para login após cadastro bem-sucedido")]
public void DeveRedirecionarParaLoginAposCadastro()
{
// Arrange
var cpf = GerarCpfAleatorio();
var nome = "Maria Teste Redirect";
var senha = "senha456";

// Act
_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();

// Aguarda redirecionamento (2 segundos)
Thread.Sleep(2500);

// Assert
Driver.Url.Should().Contain("/login");
}

[Fact(DisplayName = "Deve exibir erro ao tentar criar conta com CPF inválido")]
public void DeveExibirErroComCpfInvalido()
Expand All @@ -50,7 +92,34 @@ public void DeveExibirErroComCpfInvalido()
_cadastroPage.ObterMensagemErro().Should().NotBeNullOrEmpty();
}

[Fact(DisplayName = "Deve exibir erro ao tentar criar conta com CPF duplicado")]
public void DeveExibirErroComCpfDuplicado()
{
// Arrange
var cpf = GerarCpfAleatorio();
var nome1 = "Primeiro Cadastro";
var nome2 = "Segundo Cadastro";
var senha = "senha123";

// Primeiro cadastro (sucesso)
_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome1, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();
_cadastroPage.ExibeMensagemSucesso().Should().BeTrue();

// Aguarda navegação
Thread.Sleep(2500);

// Segundo cadastro com mesmo CPF (deve falhar)
_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome2, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();

// Assert
_cadastroPage.ExibeMensagemErro().Should().BeTrue();
}

[Fact(DisplayName = "Deve desabilitar botão durante o loading")]
public void DeveDesabilitarBotaoDuranteLoading()
Expand Down Expand Up @@ -115,7 +184,7 @@ public void DeveAceitarCpfFormatado()
// O importante é que não dê erro de javascript ou trave
bool sucesso = _cadastroPage.ExibeMensagemSucesso();
bool erro = _cadastroPage.ExibeMensagemErro();

(sucesso || erro).Should().BeTrue("deve exibir alguma mensagem de feedback");
}

Expand Down
184 changes: 179 additions & 5 deletions BankMore/tests/BankMore.Web.E2ETests/Tests/LoginE2ETests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using BankMore.Web.E2ETests.Infrastructure;
using BankMore.Web.E2ETests.PageObjects;

Expand Down Expand Up @@ -29,9 +29,63 @@ public void DeveCarregarPaginaLogin()
Driver.Title.Should().Contain("Login");
}


[Fact(DisplayName = "Deve fazer login com credenciais válidas usando número da conta")]
public void DeveFazerLoginComNumeroContaValido()
{
// Arrange - Primeiro cria uma conta
var cpf = GerarCpfAleatorio();
var nome = "Teste Login Conta";
var senha = "senha123";

_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();

var numeroConta = _cadastroPage.ObterNumeroConta();
Thread.Sleep(2500); // Aguarda redirecionamento

// Act - Faz login com o número da conta
_loginPage.NavigateToLogin();
_loginPage.PreencherCredenciais(numeroConta, senha);
_loginPage.ClicarEntrar();
_loginPage.AguardarLoadingDesaparecer();

// Assert
_loginPage.ExibeMensagemSucesso().Should().BeTrue();
_loginPage.ObterMensagemSucesso().Should().Contain("Login realizado com sucesso!");

// Aguarda redirecionamento
Thread.Sleep(1000);
var url = Driver.Url;
(url.Contains("/conta") || url.Contains("/")).Should().BeTrue();
}

[Fact(DisplayName = "Deve fazer login com credenciais válidas usando CPF")]
public void DeveFazerLoginComCpfValido()
{
// Arrange - Primeiro cria uma conta
var cpf = GerarCpfAleatorio();
var nome = "Teste Login CPF";
var senha = "senha456";

_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();
Thread.Sleep(2500);

// Act - Faz login com CPF
_loginPage.NavigateToLogin();
_loginPage.PreencherCredenciais(cpf, senha);
_loginPage.ClicarEntrar();
_loginPage.AguardarLoadingDesaparecer();


// Assert
_loginPage.ExibeMensagemSucesso().Should().BeTrue();
Thread.Sleep(1000);
Driver.Url.Should().NotContain("/login");
}

[Fact(DisplayName = "Deve exibir erro com credenciais inválidas")]
public void DeveExibirErroComCredenciaisInvalidas()
Expand All @@ -52,7 +106,32 @@ public void DeveExibirErroComCredenciaisInvalidas()
Driver.Url.Should().Contain("/login"); // Não deve redirecionar
}


[Fact(DisplayName = "Deve exibir erro com senha incorreta")]
public void DeveExibirErroComSenhaIncorreta()
{
// Arrange - Cria uma conta
var cpf = GerarCpfAleatorio();
var nome = "Teste Senha Errada";
var senhaCorreta = "senha123";
var senhaErrada = "senhaerrada";

_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senhaCorreta);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();
var numeroConta = _cadastroPage.ObterNumeroConta();
Thread.Sleep(2500);

// Act - Tenta login com senha errada
_loginPage.NavigateToLogin();
_loginPage.PreencherCredenciais(numeroConta, senhaErrada);
_loginPage.ClicarEntrar();
_loginPage.AguardarLoadingDesaparecer();

// Assert
_loginPage.ExibeMensagemErro().Should().BeTrue();
Driver.Url.Should().Contain("/login");
}

[Fact(DisplayName = "Deve desabilitar botão durante o loading")]
public void DeveDesabilitarBotaoDuranteLoading()
Expand Down Expand Up @@ -96,5 +175,100 @@ public void DeveValidarCamposObrigatorios()
// Assert - formulário não deve submeter (validação HTML5)
Driver.Url.Should().Contain("/login");
}


[Fact(DisplayName = "Deve redirecionar usuário autenticado para home")]
public void DeveRedirecionarUsuarioAutenticadoParaHome()
{
// Arrange - Cria conta e faz login
var cpf = GerarCpfAleatorio();
var nome = "Teste Redirect Auth";
var senha = "senha123";

_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();
var numeroConta = _cadastroPage.ObterNumeroConta();
Thread.Sleep(2500);

_loginPage.NavigateToLogin();
_loginPage.PreencherCredenciais(numeroConta, senha);
_loginPage.ClicarEntrar();
_loginPage.AguardarLoadingDesaparecer();
Thread.Sleep(1000);

// Act - Tenta acessar /login novamente
_loginPage.NavigateToLogin();
Thread.Sleep(1000);

// Assert - Deve ter sido redirecionado (se a lógica estiver implementada)
// Nota: Depende da implementação do OnInitialized no Login.razor
var url = _loginPage.ObterUrlAtual();
(url.Contains("/conta") || url.Contains("/login")).Should().BeTrue();
}

[Fact(DisplayName = "Deve aceitar CPF ou número de conta no mesmo campo")]
public void DeveAceitarCpfOuNumeroContaNoMesmoCampo()
{
// Arrange
var cpf = GerarCpfAleatorio();
var nome = "Teste Campo Único";
var senha = "senha123";

_cadastroPage.NavigateToCadastro();
_cadastroPage.PreencherFormulario(cpf, nome, senha);
_cadastroPage.ClicarCriarConta();
_cadastroPage.AguardarLoadingDesaparecer();
var numeroConta = _cadastroPage.ObterNumeroConta();
Thread.Sleep(2500);

// Act & Assert - Login com CPF
_loginPage.NavigateToLogin();
_loginPage.PreencherCredenciais(cpf, senha);
_loginPage.ClicarEntrar();
_loginPage.AguardarLoadingDesaparecer();
_loginPage.ExibeMensagemSucesso().Should().BeTrue();

ClearBrowserData();
Thread.Sleep(1000);

// Act & Assert - Login com número da conta
_loginPage.NavigateToLogin();
_loginPage.PreencherCredenciais(numeroConta, senha);
_loginPage.ClicarEntrar();
_loginPage.AguardarLoadingDesaparecer();
_loginPage.ExibeMensagemSucesso().Should().BeTrue();
}

/// <summary>
/// Gera um CPF válido aleatório para testes
/// </summary>
private string GerarCpfAleatorio()
{
var random = new Random();
var cpf = new int[11];

for (int i = 0; i < 9; i++)
{
cpf[i] = random.Next(0, 10);
}

int soma = 0;
for (int i = 0; i < 9; i++)
{
soma += cpf[i] * (10 - i);
}
int resto = soma % 11;
cpf[9] = resto < 2 ? 0 : 11 - resto;

soma = 0;
for (int i = 0; i < 10; i++)
{
soma += cpf[i] * (11 - i);
}
resto = soma % 11;
cpf[10] = resto < 2 ? 0 : 11 - resto;

return string.Join("", cpf);
}
}
Loading
Loading