56 lines
1.9 KiB
C#
56 lines
1.9 KiB
C#
using FluentValidation.TestHelper;
|
|
using SIGCM2.Application.Auth.Login;
|
|
|
|
namespace SIGCM2.Application.Tests.Auth.Login;
|
|
|
|
public class LoginCommandValidatorTests
|
|
{
|
|
private readonly LoginCommandValidator _validator = new();
|
|
|
|
// Happy path: valid command passes validation
|
|
[Fact]
|
|
public void Validate_ValidCommand_ShouldHaveNoErrors()
|
|
{
|
|
var command = new LoginCommand("admin", "@Diego550@");
|
|
var result = _validator.TestValidate(command);
|
|
result.ShouldNotHaveAnyValidationErrors();
|
|
}
|
|
|
|
// Scenario: empty username → validation error referencing Username
|
|
[Fact]
|
|
public void Validate_EmptyUsername_ShouldHaveErrorForUsername()
|
|
{
|
|
var command = new LoginCommand("", "@Diego550@");
|
|
var result = _validator.TestValidate(command);
|
|
result.ShouldHaveValidationErrorFor(c => c.Username);
|
|
}
|
|
|
|
// Triangulation: whitespace-only username
|
|
[Fact]
|
|
public void Validate_WhitespaceUsername_ShouldHaveErrorForUsername()
|
|
{
|
|
var command = new LoginCommand(" ", "@Diego550@");
|
|
var result = _validator.TestValidate(command);
|
|
result.ShouldHaveValidationErrorFor(c => c.Username);
|
|
}
|
|
|
|
// Scenario: missing password → validation error referencing Password
|
|
[Fact]
|
|
public void Validate_EmptyPassword_ShouldHaveErrorForPassword()
|
|
{
|
|
var command = new LoginCommand("admin", "");
|
|
var result = _validator.TestValidate(command);
|
|
result.ShouldHaveValidationErrorFor(c => c.Password);
|
|
}
|
|
|
|
// Triangulation: null-equivalent (empty string is how records serialize missing fields)
|
|
[Fact]
|
|
public void Validate_BothEmpty_ShouldHaveErrorsForBothFields()
|
|
{
|
|
var command = new LoginCommand("", "");
|
|
var result = _validator.TestValidate(command);
|
|
result.ShouldHaveValidationErrorFor(c => c.Username);
|
|
result.ShouldHaveValidationErrorFor(c => c.Password);
|
|
}
|
|
}
|