domBudg/back/Services.Tests/Reports/ReportOffsetServiceTests.cs

56 lines
2.1 KiB
C#

using Contracts.DTO;
using Contracts.Repositories;
using Contracts.SearchModels;
using Contracts.ViewModels;
using Moq;
using Services.Reports;
using Services.Support.Exceptions;
namespace Services.Tests.Reports;
public class ReportOffsetServiceTests
{
[Fact]
public void GetReportData_WhenSpendingGroupNotFound_ThenThrowsEntityNotFoundException()
{
var spendingGroupRepoMock = new Mock<ISpendingGroupRepo>();
spendingGroupRepoMock.Setup(repo => repo.GetByPlan(It.IsAny<SpendingPlanSearch>())).ReturnsAsync((SpendingGroupDto)null);
var reportOffsetService = new ReportOffsetFromPlanService(spendingGroupRepoMock.Object);
Assert.ThrowsAsync<EntityNotFoundException>(() => reportOffsetService.GetReportData(new()));
}
[Fact]
public void GetReportData_WhenSpendingGroupHasNoChangeRecords_ThenThrowsReportDataNotFoundException()
{
var spendingGroupRepoMock = new Mock<ISpendingGroupRepo>();
spendingGroupRepoMock.Setup(repo => repo.GetByPlan(It.IsAny<SpendingPlanSearch>())).ReturnsAsync(new SpendingGroupDto());
var reportOffsetService = new ReportOffsetFromPlanService(spendingGroupRepoMock.Object);
Assert.ThrowsAsync<ReportDataNotFoundException>(() => reportOffsetService.GetReportData(new()));
}
[Fact]
public async Task GetReportData_WhenSpendingGroupHasChangeRecords_ThenReturnsSpendingGroupViewModel()
{
var spendingGroupRepoMock = new Mock<ISpendingGroupRepo>();
var spendingGroup = new SpendingGroupDto()
{
ChangeRecords =
[
new()
{
Id = Guid.NewGuid(),
ChangedAt = DateTime.Now
}
]
};
spendingGroupRepoMock.Setup(repo => repo.GetByPlan(It.IsAny<SpendingPlanSearch>())).ReturnsAsync(spendingGroup);
var reportOffsetService = new ReportOffsetFromPlanService(spendingGroupRepoMock.Object);
var result = await reportOffsetService.GetReportData(new());
Assert.NotNull(result);
Assert.IsType<SpendingGroupViewModel>(result);
}
}