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 ReportPeriodServiceTests { [Fact] public void GetReportData_WhenChangeRecordsNotFound_ThenThrowsReportDataNotFoundException() { var changeRecordRepoMock = new Mock(); changeRecordRepoMock.Setup(repo => repo.GetList(It.IsAny())).ReturnsAsync((List)null); var reportPeriodService = new ReportPeriodService(changeRecordRepoMock.Object); Assert.ThrowsAsync(() => reportPeriodService.GetReportData(DateTime.MinValue, DateTime.MaxValue)); } [Fact] public async Task GetReportData_WhenChangeRecordsFound_ThenReturnsChangeRecordViewModels() { var changeRecordRepoMock = new Mock(); var changeRecords = new List() { new() { Id = Guid.NewGuid(), ChangedAt = DateTime.Now }, new() { Id = Guid.NewGuid(), ChangedAt = DateTime.Now } }; changeRecordRepoMock.Setup(repo => repo.GetList(It.IsAny())).ReturnsAsync(changeRecords); var reportPeriodService = new ReportPeriodService(changeRecordRepoMock.Object); var result = await reportPeriodService.GetReportData(DateTime.MinValue, DateTime.MaxValue); changeRecordRepoMock.Verify(repo => repo.GetList(It.IsAny()), Times.Once); Assert.NotNull(result); Assert.IsType>(result.ToList()); } }