Add consumption logic and endpoints
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user