Add consumption logic and endpoints
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
using FluentAssertions;
|
||||
using FluentValidation.Results;
|
||||
using NSubstitute;
|
||||
using Vegasco.WebApi.Consumptions;
|
||||
|
||||
namespace WebApi.Tests.Unit.Consumptions;
|
||||
public class CreateConsumptionRequestValidatorTests
|
||||
{
|
||||
private readonly CreateConsumption.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 CreateConsumption.Request _validRequest;
|
||||
|
||||
public CreateConsumptionRequestValidatorTests()
|
||||
{
|
||||
_timeProvider.GetUtcNow().Returns(_utcNow);
|
||||
_sut = new CreateConsumption.Validator(_timeProvider);
|
||||
|
||||
_validRequest = new CreateConsumption.Request(
|
||||
_utcNow.AddDays(-1),
|
||||
1,
|
||||
1,
|
||||
false,
|
||||
Guid.NewGuid());
|
||||
}
|
||||
|
||||
[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
|
||||
CreateConsumption.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(CreateConsumption.Request.DateTime));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(0)]
|
||||
[InlineData(-1)]
|
||||
public async Task ValidateAsync_ShouldBeInvalid_WhenDistanceIsLessThanOrEqualToZero(double distance)
|
||||
{
|
||||
// Arrange
|
||||
CreateConsumption.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(CreateConsumption.Request.Distance));
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(0)]
|
||||
[InlineData(-1)]
|
||||
public async Task ValidateAsync_ShouldBeInvalid_WhenAmountIsLessThanOrEqualToZero(double amount)
|
||||
{
|
||||
// Arrange
|
||||
CreateConsumption.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(CreateConsumption.Request.Amount));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task ValidateAsync_ShouldBeInvalid_WhenCarIdIsEmpty()
|
||||
{
|
||||
// Arrange
|
||||
CreateConsumption.Request request = _validRequest with { CarId = Guid.Empty };
|
||||
|
||||
// Act
|
||||
ValidationResult? result = await _sut.ValidateAsync(request);
|
||||
|
||||
// Assert
|
||||
result.IsValid.Should().BeFalse();
|
||||
result.Errors.Should().ContainSingle(x => x.PropertyName == nameof(CreateConsumption.Request.CarId));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user