Files
vegasco/tests/WebApi.Tests.Unit/Consumptions/UpdateConsumptionRequestValidatorTests.cs

86 lines
2.3 KiB
C#

using FluentAssertions;
using FluentValidation.Results;
using NSubstitute;
using Vegasco.WebApi.Consumptions;
namespace WebApi.Tests.Unit.Consumptions;
public class UpdateConsumptionRequestValidatorTests
{
private readonly UpdateConsumption.Validator _sut;
private readonly TimeProvider _timeProvider = Substitute.For<TimeProvider>();
private readonly DateTimeOffset _utcNow = new DateTimeOffset(2024, 8, 18, 13, 2, 53, TimeSpan.Zero);
private readonly UpdateConsumption.Request _validRequest;
public UpdateConsumptionRequestValidatorTests()
{
_timeProvider.GetUtcNow().Returns(_utcNow);
_sut = new UpdateConsumption.Validator(_timeProvider);
_validRequest = new UpdateConsumption.Request(
_utcNow.AddDays(-1),
1,
1,
false);
}
[Fact]
public async Task ValidateAsync_ShouldBeValid_WhenRequestIsValid()
{
// Arrange
// Act
ValidationResult? result = await _sut.ValidateAsync(_validRequest);
// Assert
result.IsValid.Should().BeTrue();
}
[Fact]
public async Task ValidateAsync_ShouldBeInvalid_WhenDateTimeIsGreaterThanUtcNow()
{
// Arrange
UpdateConsumption.Request request = _validRequest with { DateTime = _utcNow.AddDays(1) };
// Act
ValidationResult? result = await _sut.ValidateAsync(request);
// Assert
result.IsValid.Should().BeFalse();
result.Errors.Should().ContainSingle(x => x.PropertyName == nameof(UpdateConsumption.Request.DateTime));
}
[Theory]
[InlineData(0)]
[InlineData(-1)]
public async Task ValidateAsync_ShouldBeInvalid_WhenDistanceIsLessThanOrEqualToZero(double distance)
{
// Arrange
UpdateConsumption.Request request = _validRequest with { Distance = distance };
// Act
ValidationResult? result = await _sut.ValidateAsync(request);
// Assert
result.IsValid.Should().BeFalse();
result.Errors.Should().ContainSingle(x => x.PropertyName == nameof(UpdateConsumption.Request.Distance));
}
[Theory]
[InlineData(0)]
[InlineData(-1)]
public async Task ValidateAsync_ShouldBeInvalid_WhenAmountIsLessThanOrEqualToZero(double amount)
{
// Arrange
UpdateConsumption.Request request = _validRequest with { Amount = amount };
// Act
ValidationResult? result = await _sut.ValidateAsync(request);
// Assert
result.IsValid.Should().BeFalse();
result.Errors.Should().ContainSingle(x => x.PropertyName == nameof(UpdateConsumption.Request.Amount));
}
}