test(udt-001): backend unit and integration tests (30 tests)

This commit is contained in:
2026-04-13 21:36:09 -03:00
parent 9891f96618
commit b657dc0d2a
12 changed files with 851 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
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);
}
}