using System.Text; using ApplicationLayer.Services.AuthServices.Common; using ApplicationLayer.Services.AuthServices.Requests.Validation; using Domains; using FluentAssertions; using FluentValidation; using VisaApi.Fakers.Auth; using Xunit; namespace VisaApi.Tests.Application.Validation.Auth { public class AuthDataValidatorTests { private readonly static IValidator validator = new AuthDataValidator(); private readonly static AuthDataFaker faker = new(); /// /// Test for validator that should return validation error for invalid email /// [Fact] private async Task ValidateForInvalidEmailShouldReturnError() { var authData = faker.Generate(); authData.Email = "alsdas'dsa"; var result = await validator.ValidateAsync(authData); result.Errors.Should() .HaveCount(1) .And.Contain(error => error.PropertyName == nameof(authData.Email)); } /// /// Test for validator that should return validation error for too long email /// [Fact] private async Task ValidateForLongEmailShouldReturnError() { var authData = faker.Generate(); var stringBuilder = new StringBuilder(); stringBuilder.Append('d', ConfigurationConstraints.EmailLength); stringBuilder.Append("@mail.ru"); authData.Email = stringBuilder.ToString(); var result = await validator.ValidateAsync(authData); result.Errors.Should() .HaveCount(1) .And.Contain(error => error.PropertyName == nameof(authData.Email)); } /// /// Test for validator that should return no errors for valid email /// [Fact] private async Task ValidateForValidEmailShouldReturnNoError() { var authData = faker.Generate(); var result = await validator.ValidateAsync(authData); result.Errors.Where(error => error.PropertyName == nameof(authData.Email)) .Should().BeEmpty(); } /// /// Test for validator that should return validation error for empty password /// [Fact] private async Task ValidateForEmptyPasswordShouldReturnError() { var authData = faker.Generate(); authData.Password = string.Empty; var result = await validator.ValidateAsync(authData); result.Errors.Should() .HaveCount(1) .And.Contain(error => error.PropertyName == nameof(authData.Password)); } /// /// Test for validator that should return validation error for too long password /// [Fact] private async Task ValidateForLongPasswordShouldReturnError() { var authData = faker.Generate(); var stringBuilder = new StringBuilder(); stringBuilder.Append('d', ConfigurationConstraints.PasswordLength + 1); authData.Password = stringBuilder.ToString(); var result = await validator.ValidateAsync(authData); result.Errors.Should() .HaveCount(1) .And.Contain(error => error.PropertyName == nameof(authData.Password)); } /// /// Test for validator that should return no errors for valid password /// [Fact] private async Task ValidateForValidPasswordShouldReturnNoError() { var authData = faker.Generate(); var result = await validator.ValidateAsync(authData); result.Errors.Where(error => error.PropertyName == nameof(authData.Password)) .Should().BeEmpty(); } } }