using FluentAssertions; using SeaHaven.Services.DTOs; using SeaHaven.Services.Validation; using Xunit; namespace SeaHaven.Services.Tests; public class CreateAssetValidationTests { private readonly CreateAssetValidation _validator = new(); [Fact] public void Validate_WhenNameEmpty_Fails() { var result = _validator.Validate(new CreateAssetDTO { Name = "" }); result.IsValid.Should().BeFalse(); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateAssetDTO.Name)); } [Fact] public void Validate_WhenNameTooLong_Fails() { var result = _validator.Validate(new CreateAssetDTO { Name = new string('a', 201) }); result.IsValid.Should().BeFalse(); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateAssetDTO.Name)); } [Fact] public void Validate_WhenLocationIdZero_Fails() { var result = _validator.Validate(new CreateAssetDTO { Name = "Pump", LocationId = 0 }); result.IsValid.Should().BeFalse(); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateAssetDTO.LocationId)); } [Fact] public void Validate_WhenValid_Passes() { var result = _validator.Validate(new CreateAssetDTO { Name = "Pump", LocationId = 5 }); result.IsValid.Should().BeTrue(); } } public class CreateContactValidationTests { private readonly CreateContactValidation _validator = new(); private static CreateContactDTO Valid() => new() { FirstName = "Ada", LastName = "Lovelace", Email = "ada@example.com" }; [Fact] public void Validate_WhenNamesMissing_Fails() { var dto = Valid(); dto.FirstName = ""; dto.LastName = ""; var result = _validator.Validate(dto); result.IsValid.Should().BeFalse(); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateContactDTO.FirstName)); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateContactDTO.LastName)); } [Fact] public void Validate_WhenEmailMalformed_Fails() { var dto = Valid(); dto.Email = "not-an-email"; var result = _validator.Validate(dto); result.IsValid.Should().BeFalse(); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateContactDTO.Email)); } [Fact] public void Validate_WhenPhoneTooLong_Fails() { var dto = Valid(); dto.Phone = new string('1', 21); var result = _validator.Validate(dto); result.IsValid.Should().BeFalse(); result.Errors.Should().Contain(e => e.PropertyName == nameof(CreateContactDTO.Phone)); } [Fact] public void Validate_WhenValid_Passes() { var result = _validator.Validate(Valid()); result.IsValid.Should().BeTrue(); } }