Files
vegasco/tests/WebApi.Tests.Unit/Cars/CreateCarRequestValidatorTests.cs
2024-08-03 20:44:32 +02:00

72 lines
1.6 KiB
C#

using FluentAssertions;
using Vegasco.WebApi.Cars;
namespace WebApi.Tests.Unit.Cars;
public sealed class CreateCarRequestValidatorTests
{
private readonly CreateCar.Validator _sut = new();
private readonly CreateCar.Request _validRequest = new("Ford Focus");
[Fact]
public async Task ValidateAsync_ShouldBeValid_WhenRequestIsValid()
{
// Arrange
// Act
var result = await _sut.ValidateAsync(_validRequest);
// Assert
result.IsValid.Should().BeTrue();
}
[Theory]
[InlineData(1)]
[InlineData(50)]
public async Task ValidateAsync_ShouldBeValid_WhenNameIsJustWithinTheLimits(int nameLength)
{
// Arrange
var request = _validRequest with { Name = new string('s', nameLength) };
// Act
var result = await _sut.ValidateAsync(request);
// Assert
result.IsValid.Should().BeTrue();
}
[Fact]
public async Task ValidateAsync_ShouldNotBeValid_WhenNameIsEmpty()
{
// Arrange
var request = _validRequest with { Name = "" };
// Act
var result = await _sut.ValidateAsync(request);
// Assert
result.IsValid.Should().BeFalse();
result.Errors.Should().ContainSingle()
.Which
.PropertyName.Should().Be(nameof(CreateCar.Request.Name));
}
[Fact]
public async Task ValidateAsync_ShouldNotBeValid_WhenNameIsTooLong()
{
// Arrange
const int nameMaxLength = 50;
var request = _validRequest with { Name = new string('s', nameMaxLength + 1) };
// Act
var result = await _sut.ValidateAsync(request);
// Assert
result.IsValid.Should().BeFalse();
result.Errors.Should().ContainSingle()
.Which
.PropertyName.Should().Be(nameof(CreateCar.Request.Name));
}
}