Files
monorepo/LCU.API.Internal.LoanRate/LCU.API.Internal.LoanRateTests/ServiceTests/RateSheetServiceTest.cs
T
2026-04-07 14:21:04 -05:00

190 lines
7.2 KiB
C#

using LCU.Library.Internal.Exceptions;
using LCU.Library.Internal.LoanRateModels.Entities;
using LCU.API.Internal.LoanRateLib.Repositories;
using LCU.API.Internal.LoanRate.Services;
using LCU.Library.Internal.LcuClassPatterns.CrudTests.Tests;
using LCU.Library.Internal.LcuClassPatterns.CrudTests.Utilities;
using LCU.Library.Internal.LoanRateModels.Enums;
namespace LCU.API.Internal.LoanRateTests.ServiceTests;
public class RateSheetServiceTest : CrudServiceTest<RateSheet>
{
private readonly IRateSheetService _service;
private readonly Mock<IRateSheetRepository> _mockRateSheetRepository;
public RateSheetServiceTest()
{
_mockRateSheetRepository = new Mock<IRateSheetRepository>();
_service = new RateSheetService(_mockRateSheetRepository.Object);
}
[Fact]
public async void RateSheet_GetIncludeAllAsync_Success()
{
var rateSheets = new List<RateSheet>
{
new ()
{
RateSheetId = (int)typeof(int).GetRandomValue(),
RateType = (RateTypes)typeof(RateTypes).GetRandomValue(),
Rates = new List<Rate>
{
new() { RateId = (int)typeof(int).GetRandomValue() },
new() { RateId = (int)typeof(int).GetRandomValue() },
new() { RateId = (int)typeof(int).GetRandomValue() }
}
}
};
_mockRateSheetRepository.Setup(x => x.FindIncludeAllAsync())
.ReturnsAsync(rateSheets).Verifiable();
var result = (await _service.GetIncludeAllAsync())?.ToList();
Assert.NotNull(result);
Assert.Equal(rateSheets.First().RateSheetId, result.First().RateSheetId);
Assert.Equal(rateSheets.Count, result.Count);
_mockRateSheetRepository.Verify();
}
[Fact]
public async void RateSheet_GetIncludeAllAsync_Success_NotFound()
{
List<RateSheet>? rateSheets = null;
_mockRateSheetRepository.Setup(x => x.FindIncludeAllAsync())
.ReturnsAsync(rateSheets).Verifiable();
var result = await _service.GetIncludeAllAsync();
Assert.NotNull(result);
Assert.Empty(result);
_mockRateSheetRepository.Verify();
}
[Fact]
public void Rate_GetAsync_Failure_Exception()
{
_mockRateSheetRepository.Setup(x => x.FindAsync())
.Throws(new Exception("Test")).Verifiable();
Assert.ThrowsAsync<ServiceException>(async () => await _service.GetAsync());
_mockRateSheetRepository.Verify(x => x.FindAsync(), Times.Once);
}
[Fact]
public async void RateSheet_GetRatesByRateTypeAsync_Success()
{
var rateType = (RateTypes)typeof(RateTypes).GetRandomValue();
var rateSheet = new RateSheet
{
RateSheetId = (int)typeof(int).GetRandomValue(),
RateType = (RateTypes)typeof(RateTypes).GetRandomValue(),
Rates = new List<Rate>
{
new() { RateId = (int)typeof(int).GetRandomValue() },
new() { RateId = (int)typeof(int).GetRandomValue() },
new() { RateId = (int)typeof(int).GetRandomValue() }
}
};
_mockRateSheetRepository.Setup(x => x.FindRatesByRateType(rateType))
.ReturnsAsync(rateSheet.Rates).Verifiable();
var result = (await _service.GetRatesByRateTypeAsync(rateType))?.ToList();
Assert.NotNull(result);
Assert.Equal(rateSheet.Rates.First().RateId, result.First().RateId);
Assert.Equal(rateSheet.Rates.Count, result.Count);
_mockRateSheetRepository.Verify();
}
[Fact]
public async void RateSheet_GetRatesByRateTypeAsync_Success_NotFound()
{
List<Rate>? rates = null;
_mockRateSheetRepository.Setup(x => x.FindRatesByRateType(It.IsAny<RateTypes>()))
.ReturnsAsync(rates).Verifiable();
var result = await _service.GetRatesByRateTypeAsync(It.IsAny<RateTypes>());
Assert.NotNull(result);
Assert.Empty(result);
_mockRateSheetRepository.Verify();
}
[Fact]
public void RateSheet_GetRatesByRateTypeAsync_Failure_Exception()
{
_mockRateSheetRepository.Setup(x => x.FindRatesByRateType(It.IsAny<RateTypes>()))
.Throws(new Exception("Test")).Verifiable();
Assert.ThrowsAsync<ServiceException>(async () => await _service.GetRatesByRateTypeAsync(It.IsAny<RateTypes>()));
_mockRateSheetRepository.Verify(x => x.FindRatesByRateType(It.IsAny<RateTypes>()), Times.Once);
}
[Fact]
public async void RateSheet_GetRatesByDateAndRateTypeAsync_Success()
{
var effectiveDate = (DateTime)typeof(DateTime).GetRandomValue();
var rateType = (RateTypes)typeof(RateTypes).GetRandomValue();
var rateSheet = new RateSheet
{
RateSheetId = (int)typeof(int).GetRandomValue(),
RateType = (RateTypes)typeof(RateTypes).GetRandomValue(),
Rates = new List<Rate>
{
new()
{
RateId = (int)typeof(int).GetRandomValue(),
RateStartDate = effectiveDate.AddDays(-2),
RateEndDate = effectiveDate.AddDays(2)
},
new()
{
RateId = (int)typeof(int).GetRandomValue(),
RateStartDate = effectiveDate.AddDays(-1),
RateEndDate = effectiveDate.AddDays(3)
},
new()
{
RateId = (int)typeof(int).GetRandomValue(),
RateStartDate = effectiveDate.AddDays(-5),
RateEndDate = effectiveDate.AddDays(2)
}
}
};
_mockRateSheetRepository.Setup(x => x.FindRatesByDateAndRateType(effectiveDate, rateType))
.ReturnsAsync(rateSheet.Rates).Verifiable();
var result = (await _service.GetRatesByDateAndRateTypeAsync(effectiveDate, rateType))?.ToList();
Assert.NotNull(result);
Assert.Equal(rateSheet.Rates.First().RateId, result.First().RateId);
Assert.Equal(rateSheet.Rates.Count, result.Count);
_mockRateSheetRepository.Verify();
}
[Fact]
public async void RateSheet_GetRatesByDateAndRateTypeAsync_Success_NotFound()
{
List<Rate>? rates = null;
_mockRateSheetRepository.Setup(x => x.FindRatesByDateAndRateType(It.IsAny<DateTime>(), It.IsAny<RateTypes>()))
.ReturnsAsync(rates).Verifiable();
var result = await _service.GetRatesByDateAndRateTypeAsync(It.IsAny<DateTime>(), It.IsAny<RateTypes>());
Assert.NotNull(result);
Assert.Empty(result);
_mockRateSheetRepository.Verify();
}
[Fact]
public void RateSheet_GetRatesByDateAndRateTypeAsync_Failure_Exception()
{
_mockRateSheetRepository.Setup(x => x.FindRatesByDateAndRateType(It.IsAny<DateTime>(), It.IsAny<RateTypes>()))
.Throws(new Exception("Test")).Verifiable();
Assert.ThrowsAsync<ServiceException>(async () => await _service.GetRatesByDateAndRateTypeAsync(It.IsAny<DateTime>(), It.IsAny<RateTypes>()));
_mockRateSheetRepository.Verify(x => x.FindRatesByDateAndRateType(It.IsAny<DateTime>(), It.IsAny<RateTypes>()), Times.Once);
}
}