public async Task TestFundingSummaryReportGeneration() { var dateTime = DateTime.UtcNow; var filename = $"10005752/1/ESF Round 2 Funding Summary Report {dateTime:yyyyMMdd-HHmmss}"; var conRefNumber = "ESF-5234"; Mock <IDateTimeProvider> dateTimeProviderMock = new Mock <IDateTimeProvider>(); dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(dateTime); dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(It.IsAny <DateTime>())).Returns(dateTime); var testStream = new MemoryStream(); var esfJobContextMock = new Mock <IEsfJobContext>(); esfJobContextMock.Setup(x => x.UkPrn).Returns(10005752); esfJobContextMock.Setup(x => x.JobId).Returns(1); esfJobContextMock.Setup(x => x.BlobContainerName).Returns(string.Empty); esfJobContextMock.Setup(x => x.CollectionYear).Returns(1819); var excelFileServiceMock = new Mock <IExcelFileService>(); excelFileServiceMock.Setup(x => x.SaveWorkbookAsync(It.IsAny <Workbook>(), $"{filename}.xlsx", esfJobContextMock.Object.BlobContainerName, It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); var supplementaryDataService = new Mock <ISupplementaryDataService>(); supplementaryDataService .Setup(s => s.GetSupplementaryData(It.IsAny <int>(), It.IsAny <IEnumerable <SourceFileModel> >(), It.IsAny <CancellationToken>())) .ReturnsAsync(new Dictionary <string, IEnumerable <SupplementaryDataYearlyModel> > { [conRefNumber] = new List <SupplementaryDataYearlyModel> { new SupplementaryDataYearlyModel { FundingYear = 1819, SupplementaryData = new List <SupplementaryDataModel>() } } }); supplementaryDataService .Setup(s => s.GetImportFiles(It.IsAny <string>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new List <SourceFileModel> { new SourceFileModel { ConRefNumber = conRefNumber, FileName = filename, UKPRN = "10005752", SourceFileId = 1, PreparationDate = DateTime.Now, SuppliedDate = DateTime.Now, JobId = 1 } }); Mock <IReferenceDataService> referenceDataService = new Mock <IReferenceDataService>(); referenceDataService.Setup(m => m.GetLarsVersion(It.IsAny <CancellationToken>())).ReturnsAsync("123456"); referenceDataService.Setup(m => m.GetOrganisationVersion(It.IsAny <CancellationToken>())).ReturnsAsync("234567"); referenceDataService.Setup(m => m.GetPostcodeVersion(It.IsAny <CancellationToken>())).ReturnsAsync("345678"); referenceDataService.Setup(m => m.GetProviderName(It.IsAny <int>(), It.IsAny <CancellationToken>())).Returns("Foo College"); referenceDataService.Setup(m => m.GetDeliverableUnitCosts(It.IsAny <string>(), It.IsAny <IList <string> >())) .Returns(new List <DeliverableUnitCost>()); IList <IRowHelper> rowHelpers = GenerateRowHelpersWithStrategies(referenceDataService.Object); Mock <IVersionInfo> versionInfo = new Mock <IVersionInfo>(); versionInfo.Setup(m => m.ServiceReleaseVersion).Returns("1.2.3.4"); var valueProvider = new ValueProvider(); var excelStyleProvider = new ExcelStyleProvider(); IEnumerable <FM70PeriodisedValuesYearly> periodisedValues = new List <FM70PeriodisedValuesYearly>(); var ilrMock = new Mock <IILRService>(); ilrMock.Setup(m => m.GetYearlyIlrData(10005752, "ILR1819", 1819, It.IsAny <string>(), It.IsAny <CancellationToken>())).ReturnsAsync(periodisedValues); ilrMock.Setup(m => m.GetIlrFileDetails(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(GetTestFileDetail()); var logger = new Mock <ILogger>(); var fundingSummaryReport = new FundingSummaryReport( dateTimeProviderMock.Object, valueProvider, Mock.Of <IFileService>(), excelFileServiceMock.Object, ilrMock.Object, supplementaryDataService.Object, rowHelpers, referenceDataService.Object, excelStyleProvider, versionInfo.Object, logger.Object); SourceFileModel sourceFile = GetEsfSourceFileModel(); await fundingSummaryReport.GenerateReport(esfJobContextMock.Object, sourceFile, null, CancellationToken.None); excelFileServiceMock.VerifyAll(); }
public async Task TestFundingSummaryReportGeneration() { string csv = string.Empty; byte[] xlsx = null; DateTime dateTime = DateTime.UtcNow; string filename = $"10033670_1_Funding Summary Report {dateTime:yyyyMMdd-HHmmss}"; DataStoreConfiguration dataStoreConfiguration = new DataStoreConfiguration() { ILRDataStoreConnectionString = new TestConfigurationHelper().GetSectionValues <DataStoreConfiguration>("DataStoreSection").ILRDataStoreConnectionString, ILRDataStoreValidConnectionString = new TestConfigurationHelper().GetSectionValues <DataStoreConfiguration>("DataStoreSection").ILRDataStoreValidConnectionString }; IIlr1819ValidContext IlrValidContextFactory() { var options = new DbContextOptionsBuilder <ILR1819_DataStoreEntitiesValid>().UseSqlServer(dataStoreConfiguration.ILRDataStoreValidConnectionString).Options; return(new ILR1819_DataStoreEntitiesValid(options)); } IIlr1819RulebaseContext IlrRulebaseContextFactory() { var options = new DbContextOptionsBuilder <ILR1819_DataStoreEntities>().UseSqlServer(dataStoreConfiguration.ILRDataStoreConnectionString).Options; return(new ILR1819_DataStoreEntities(options)); } Mock <ILogger> logger = new Mock <ILogger>(); Mock <IDateTimeProvider> dateTimeProviderMock = new Mock <IDateTimeProvider>(); Mock <IStreamableKeyValuePersistenceService> storage = new Mock <IStreamableKeyValuePersistenceService>(); Mock <IStreamableKeyValuePersistenceService> redis = new Mock <IStreamableKeyValuePersistenceService>(); IIntUtilitiesService intUtilitiesService = new IntUtilitiesService(); IJsonSerializationService jsonSerializationService = new JsonSerializationService(); IXmlSerializationService xmlSerializationService = new XmlSerializationService(); IIlrProviderService ilrProviderService = new IlrProviderService(logger.Object, storage.Object, xmlSerializationService, dateTimeProviderMock.Object, intUtilitiesService, IlrValidContextFactory, IlrRulebaseContextFactory); IOrgProviderService orgProviderService = new OrgProviderService(logger.Object, new OrgConfiguration() { OrgConnectionString = ConfigurationManager.AppSettings["OrgConnectionString"] }); ILarsProviderService larsProviderService = new LarsProviderService(logger.Object, new LarsConfiguration() { LarsConnectionString = ConfigurationManager.AppSettings["LarsConnectionString"] }); IEasProviderService easProviderService = new EasProviderService(logger.Object, new EasConfiguration() { EasConnectionString = new TestConfigurationHelper().GetSectionValues <EasConfiguration>("EasSection").EasConnectionString }); Mock <IPostcodeProviderService> postcodeProverServiceMock = new Mock <IPostcodeProviderService>(); Mock <ILargeEmployerProviderService> largeEmployerProviderService = new Mock <ILargeEmployerProviderService>(); IAllbProviderService allbProviderService = new AllbProviderService(logger.Object, redis.Object, jsonSerializationService, intUtilitiesService, IlrValidContextFactory, IlrRulebaseContextFactory); IFM35ProviderService fm35ProviderService = new FM35ProviderService(logger.Object, redis.Object, jsonSerializationService, intUtilitiesService, IlrValidContextFactory, IlrRulebaseContextFactory); IFM25ProviderService fm25ProviderService = new FM25ProviderService(logger.Object, storage.Object, jsonSerializationService, intUtilitiesService, IlrRulebaseContextFactory); IFM36ProviderService fm36ProviderService = new FM36ProviderService(logger.Object, storage.Object, jsonSerializationService, intUtilitiesService, IlrRulebaseContextFactory); IFM81TrailBlazerProviderService fm81TrailBlazerProviderService = new FM81TrailBlazerProviderService(logger.Object, storage.Object, jsonSerializationService, intUtilitiesService, IlrValidContextFactory, IlrRulebaseContextFactory); Mock <IReportServiceContext> reportServiceContextMock = new Mock <IReportServiceContext>(); reportServiceContextMock.SetupGet(x => x.JobId).Returns(1); reportServiceContextMock.SetupGet(x => x.SubmissionDateTimeUtc).Returns(DateTime.UtcNow); reportServiceContextMock.SetupGet(x => x.Ukprn).Returns(10033670); reportServiceContextMock.SetupGet(x => x.Filename).Returns("ILR-10033670-1819-20180704-120055-03"); reportServiceContextMock.SetupGet(x => x.FundingALBOutputKey).Returns("FundingAlbOutput"); reportServiceContextMock.SetupGet(x => x.FundingFM35OutputKey).Returns("FundingFm35Output"); reportServiceContextMock.SetupGet(x => x.FundingFM25OutputKey).Returns("FundingFm25Output"); reportServiceContextMock.SetupGet(x => x.ValidLearnRefNumbersKey).Returns("ValidLearnRefNumbers"); reportServiceContextMock.SetupGet(x => x.CollectionName).Returns("ILR1819"); reportServiceContextMock.SetupGet(x => x.ReturnPeriod).Returns(12); IValidLearnersService validLearnersService = new ValidLearnersService(logger.Object, redis.Object, jsonSerializationService, dataStoreConfiguration); IStringUtilitiesService stringUtilitiesService = new StringUtilitiesService(); IVersionInfo versionInfo = new VersionInfo { ServiceReleaseVersion = "1.2.3.4.5" }; ITotalBuilder totalBuilder = new TotalBuilder(); IFm25Builder fm25Builder = new Fm25Builder(); IFm35Builder fm35Builder = new Fm35Builder(totalBuilder, new CacheProviderService <LearningDelivery[]>()); IFm36Builder fm36Builder = new Fm36Builder(totalBuilder, new CacheProviderService <ILR.FundingService.FM36.FundingOutput.Model.Output.LearningDelivery[]>()); IFm81Builder fm81Builder = new Fm81Builder(totalBuilder, new CacheProviderService <ILR.FundingService.FM81.FundingOutput.Model.Output.LearningDelivery[]>()); IAllbBuilder allbBuilder = new AllbBuilder(ilrProviderService, validLearnersService, allbProviderService, stringUtilitiesService, logger.Object); IExcelStyleProvider excelStyleProvider = new ExcelStyleProvider(); IEasBuilder easBuilder = new EasBuilder(easProviderService); storage.Setup(x => x.GetAsync("ILR-10033670-1819-20180704-120055-03", It.IsAny <Stream>(), It.IsAny <CancellationToken>())).Callback <string, Stream, CancellationToken>((st, sr, ct) => File.OpenRead("ILR-10033670-1819-20180704-120055-03.xml").CopyTo(sr)).Returns(Task.CompletedTask); storage.Setup(x => x.SaveAsync($"{filename}.csv", It.IsAny <string>(), It.IsAny <CancellationToken>())).Callback <string, string, CancellationToken>((key, value, ct) => csv = value).Returns(Task.CompletedTask); storage.Setup(x => x.SaveAsync($"{filename}.xlsx", It.IsAny <Stream>(), It.IsAny <CancellationToken>())).Callback <string, Stream, CancellationToken>( (key, value, ct) => { value.Seek(0, SeekOrigin.Begin); using (MemoryStream ms = new MemoryStream()) { value.CopyTo(ms); xlsx = ms.ToArray(); } }) .Returns(Task.CompletedTask); storage.Setup(x => x.ContainsAsync(It.IsAny <string>(), It.IsAny <CancellationToken>())).ReturnsAsync(true); redis.Setup(x => x.ContainsAsync(It.IsAny <string>(), It.IsAny <CancellationToken>())).ReturnsAsync(true); redis.Setup(x => x.GetAsync("FundingALBOutputKey", It.IsAny <Stream>(), It.IsAny <CancellationToken>())).Callback <string, Stream, CancellationToken>((st, sr, ct) => File.OpenRead("ALBOutput1000.json").CopyTo(sr)).Returns(Task.CompletedTask); redis.Setup(x => x.GetAsync("ValidLearnRefNumbers", It.IsAny <CancellationToken>())).ReturnsAsync(jsonSerializationService.Serialize( new List <string> { "3Addl103", "4Addl103" })); redis.Setup(x => x.GetAsync("FundingFm35Output", It.IsAny <Stream>(), It.IsAny <CancellationToken>())).Callback <string, Stream, CancellationToken>((st, sr, ct) => File.OpenRead("Fm35.json").CopyTo(sr)).Returns(Task.CompletedTask); redis.Setup(x => x.GetAsync("FundingFm25Output", It.IsAny <CancellationToken>())).ReturnsAsync(File.ReadAllText("Fm25.json")); dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(dateTime); dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(It.IsAny <DateTime>())).Returns(dateTime); largeEmployerProviderService.Setup(x => x.GetVersionAsync(It.IsAny <CancellationToken>())) .ReturnsAsync("NA"); postcodeProverServiceMock.Setup(x => x.GetVersionAsync(It.IsAny <CancellationToken>())).ReturnsAsync("NA"); ITopicAndTaskSectionOptions topicsAndTasks = TestConfigurationHelper.GetTopicsAndTasks(); IValueProvider valueProvider = new ValueProvider(); FundingSummaryReport fundingSummaryReport = new FundingSummaryReport( storage.Object, ilrProviderService, orgProviderService, allbProviderService, fm25ProviderService, fm35ProviderService, fm36ProviderService, fm81TrailBlazerProviderService, validLearnersService, dateTimeProviderMock.Object, valueProvider, larsProviderService, easProviderService, postcodeProverServiceMock.Object, largeEmployerProviderService.Object, allbBuilder, fm25Builder, fm35Builder, fm36Builder, fm81Builder, totalBuilder, versionInfo, excelStyleProvider, topicsAndTasks, easBuilder, logger.Object); await fundingSummaryReport.GenerateReport(reportServiceContextMock.Object, null, false, CancellationToken.None); csv.Should().NotBeNullOrEmpty(); xlsx.Should().NotBeNullOrEmpty(); #if DEBUG File.WriteAllBytes($"{filename}.xlsx", xlsx); #endif //var fundingSummaryHeaderMapper = new FundingSummaryHeaderMapper(); //var fundingSummaryMapper = new FundingSummaryMapper(); //var fundingSummaryFooterMapper = new FundingSummaryFooterMapper(); //TestCsvHelper.CheckCsv( // csv, // new CsvEntry(fundingSummaryHeaderMapper, 1), // new CsvEntry(fundingSummaryMapper, 0, "16-18 Traineeships Budget", 1), // new CsvEntry(fundingSummaryMapper, 3, "16-18 Traineeships"), // new CsvEntry(fundingSummaryMapper, 1, "16-18 Trailblazer Apprenticeships for starts before 1 May 2017", 1), // new CsvEntry(fundingSummaryMapper, 0, "Advanced Loans Bursary Budget", 1), // new CsvEntry(fundingSummaryMapper, 3, "Advanced Loans Bursary"), // new CsvEntry(fundingSummaryMapper, 0, Constants.ALBInfoText), // new CsvEntry(fundingSummaryFooterMapper, 1, blankRowsBefore: 1)); //var fundingSummaryHeaderMapper = new FundingSummaryHeaderMapper(); //var fundingSummaryMapper = new FundingSummaryMapper(); //TestXlsxHelper.CheckXlsxWithTitles( // xlsx, // new XlsxEntry(fundingSummaryHeaderMapper, fundingSummaryHeaderMapper.GetMaxIndex(), true), // new XlsxEntry(fundingSummaryMapper, 0, "16-18 Traineeships Budget", 1), // new XlsxEntry(fundingSummaryMapper, 13, "16-18 Traineeships", 0), // new XlsxEntry(fundingSummaryMapper, 0, "Carry-in Apprenticeships Budget (for starts before 1 May 2017 and non-procured delivery)", 1), // new XlsxEntry(fundingSummaryMapper, 9, "16-18 Apprenticeship Frameworks for starts before 1 May 2017", 1), // new XlsxEntry(fundingSummaryMapper, 9, "16-18 Trailblazer Apprenticeships for starts before 1 May 2017", 1), // new XlsxEntry(fundingSummaryMapper, 18, "16-18 Non-Levy Contracted Apprenticeships - Non-procured delivery", 1), // new XlsxEntry(fundingSummaryMapper, 9, "19-23 Apprenticeship Frameworks for starts before 1 May 2017", 1), // new XlsxEntry(fundingSummaryMapper, 9, "19-23 Trailblazer Apprenticeships for starts before 1 May 2017", 0), // new XlsxEntry(fundingSummaryMapper, 9, "24+ Apprenticeship Frameworks for starts before 1 May 2017", 1)); }
public async Task Generate_FundingSummaryReport_WithCorrectFormat() { var dateTime = DateTime.UtcNow; var filename = $"10005752/1/ESF Round 2 Funding Summary Report {dateTime:yyyyMMdd-HHmmss}"; var conRefNumber = "ESF-5234"; Mock <IDateTimeProvider> dateTimeProviderMock = new Mock <IDateTimeProvider>(); dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(dateTime); dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(It.IsAny <DateTime>())).Returns(dateTime); var esfJobContextMock = new Mock <IEsfJobContext>(); esfJobContextMock.Setup(x => x.UkPrn).Returns(10005752); esfJobContextMock.Setup(x => x.JobId).Returns(1); esfJobContextMock.Setup(x => x.BlobContainerName).Returns(string.Empty); esfJobContextMock.Setup(x => x.CollectionYear).Returns(2018); var testStream = new MemoryStream(); var excelFileServiceMock = new Mock <IExcelFileService>(); excelFileServiceMock.Setup(x => x.SaveWorkbookAsync(It.IsAny <Workbook>(), $"{filename}.xlsx", esfJobContextMock.Object.BlobContainerName, It.IsAny <CancellationToken>())).Returns(Task.CompletedTask); var supplementaryDataService = new Mock <ISupplementaryDataService>(); supplementaryDataService .Setup(s => s.GetSupplementaryData(It.IsAny <int>(), It.IsAny <IEnumerable <SourceFileModel> >(), It.IsAny <CancellationToken>())) .ReturnsAsync(new Dictionary <string, IEnumerable <SupplementaryDataYearlyModel> > { [conRefNumber] = new List <SupplementaryDataYearlyModel> { new SupplementaryDataYearlyModel { FundingYear = 2018, SupplementaryData = new List <SupplementaryDataModel>() { new SupplementaryDataModel() { DeliverableCode = "ST01", ConRefNumber = "ESF-5234", CostType = "TestCost", Value = 29.36M, CalendarYear = 2018, CalendarMonth = 9 } } } } }); supplementaryDataService .Setup(s => s.GetImportFiles(It.IsAny <string>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new List <SourceFileModel> { new SourceFileModel { ConRefNumber = conRefNumber, FileName = filename, UKPRN = "10005752", SourceFileId = 1, PreparationDate = DateTime.Now, SuppliedDate = DateTime.Now, JobId = 1 } }); var deliverableCost = new List <DeliverableUnitCost>() { new DeliverableUnitCost() { ConRefNum = "ESF-5234", UkPrn = 10005752, DeliverableCode = "ST01", UnitCost = 55.56M } }; Mock <IReferenceDataService> referenceDataService = new Mock <IReferenceDataService>(); referenceDataService.Setup(m => m.GetLarsVersion(It.IsAny <CancellationToken>())).ReturnsAsync("Version 3.0.0 : 08 December 2018 08:21:34:970"); referenceDataService.Setup(m => m.GetOrganisationVersion(It.IsAny <CancellationToken>())).ReturnsAsync("Version 1.0.0 : 04 April 2019 09:56:25:653"); referenceDataService.Setup(m => m.GetPostcodeVersion(It.IsAny <CancellationToken>())).ReturnsAsync("Version 2.0.0 : 09 March 2019 08:32:09:230"); referenceDataService.Setup(m => m.GetProviderName(It.IsAny <int>(), It.IsAny <CancellationToken>())).Returns("Test Data College"); referenceDataService.Setup(m => m.GetDeliverableUnitCosts(It.IsAny <string>(), It.IsAny <IList <string> >())) .Returns(deliverableCost); IList <IRowHelper> rowHelpers = GenerateRowHelpersWithStrategies(referenceDataService.Object); Mock <IVersionInfo> versionInfo = new Mock <IVersionInfo>(); versionInfo.Setup(m => m.ServiceReleaseVersion).Returns("1.2.3.4"); var valueProvider = new ValueProvider(); var excelStyleProvider = new ExcelStyleProvider(); FM70PeriodisedValues periodiseData = new FM70PeriodisedValues() { FundingYear = 2018, AimSeqNumber = 1, Period1 = 25.29M, UKPRN = 10005752, ConRefNumber = "ESF-5234", DeliverableCode = "ILR" }; FM70PeriodisedValuesYearly fM70 = new FM70PeriodisedValuesYearly() { FundingYear = 2018, Fm70PeriodisedValues = new List <FM70PeriodisedValues> { periodiseData } }; var periodisedValues = new List <FM70PeriodisedValuesYearly> { fM70 }; var ilrMock = new Mock <IILRService>(); ilrMock.Setup(m => m.GetYearlyIlrData(10005752, "ILR1819", 2018, It.IsAny <string>(), It.IsAny <CancellationToken>())) .ReturnsAsync(periodisedValues); ilrMock.Setup(m => m.GetIlrFileDetails(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(GetTestFileDetail()); var logger = new Mock <ILogger>(); var fundingSummaryReport = new FundingSummaryReport( dateTimeProviderMock.Object, valueProvider, Mock.Of <IFileService>(), excelFileServiceMock.Object, ilrMock.Object, supplementaryDataService.Object, rowHelpers, referenceDataService.Object, excelStyleProvider, versionInfo.Object, logger.Object); SourceFileModel sourceFile = GetEsfSourceFileModel(); await fundingSummaryReport.GenerateReport(esfJobContextMock.Object, sourceFile, null, CancellationToken.None); excelFileServiceMock.VerifyAll(); // uncomment following line to generate the file // File.WriteAllBytes($"{filename}.xlsx", testStream.GetBuffer()); }
public async Task TestFundingSummaryReportGeneration() { var dateTime = DateTime.UtcNow; var filename = $"10005752_1_ESF Funding Summary Report {dateTime:yyyyMMdd-HHmmss}"; byte[] xlsx = null; Mock <IDateTimeProvider> dateTimeProviderMock = new Mock <IDateTimeProvider>(); dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(dateTime); dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(It.IsAny <DateTime>())).Returns(dateTime); Mock <IStreamableKeyValuePersistenceService> storage = new Mock <IStreamableKeyValuePersistenceService>(); storage.Setup(x => x.SaveAsync($"{filename}.xlsx", It.IsAny <Stream>(), It.IsAny <CancellationToken>())).Callback <string, Stream, CancellationToken>( (key, value, ct) => { value.Seek(0, SeekOrigin.Begin); using (MemoryStream ms = new MemoryStream()) { value.CopyTo(ms); xlsx = ms.ToArray(); } }) .Returns(Task.CompletedTask); IList <IRowHelper> rowHelpers = GenerateRowHelpersWithStrategies(); var supplementaryDataService = new Mock <ISupplementaryDataService>(); supplementaryDataService .Setup(s => s.GetSupplementaryData(It.IsAny <IEnumerable <SourceFileModel> >(), It.IsAny <CancellationToken>())) .ReturnsAsync(new Dictionary <int, IEnumerable <SupplementaryDataYearlyModel> >()); supplementaryDataService .Setup(s => s.GetImportFiles(It.IsAny <string>(), It.IsAny <CancellationToken>())) .ReturnsAsync(new List <SourceFileModel>()); Mock <IReferenceDataCache> referenceDataCache = new Mock <IReferenceDataCache>(); referenceDataCache.Setup(m => m.GetLarsVersion(It.IsAny <CancellationToken>())).Returns("123456"); referenceDataCache.Setup(m => m.GetOrganisationVersion(It.IsAny <CancellationToken>())).Returns("234567"); referenceDataCache.Setup(m => m.GetPostcodeVersion(It.IsAny <CancellationToken>())).Returns("345678"); referenceDataCache.Setup(m => m.GetProviderName(It.IsAny <int>(), It.IsAny <CancellationToken>())).Returns("Foo College"); Mock <IVersionInfo> versionInfo = new Mock <IVersionInfo>(); versionInfo.Setup(m => m.ServiceReleaseVersion).Returns("1.2.3.4"); var valueProvider = new ValueProvider(); var excelStyleProvider = new ExcelStyleProvider(); IList <FM70PeriodisedValuesYearlyModel> periodisedValues = new List <FM70PeriodisedValuesYearlyModel>(); var ilrMock = new Mock <IILRService>(); ilrMock.Setup(m => m.GetYearlyIlrData(It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(periodisedValues); ilrMock.Setup(m => m.GetIlrFileDetails(It.IsAny <int>(), It.IsAny <CancellationToken>())) .ReturnsAsync(GetTestFileDetail()); var fundingSummaryReport = new FundingSummaryReport( dateTimeProviderMock.Object, valueProvider, storage.Object, ilrMock.Object, supplementaryDataService.Object, rowHelpers, referenceDataCache.Object, excelStyleProvider, versionInfo.Object); SourceFileModel sourceFile = GetEsfSourceFileModel(); SupplementaryDataWrapper wrapper = new SupplementaryDataWrapper(); wrapper.SupplementaryDataModels = SupplementaryDataModelBuilder.GetModels(); await fundingSummaryReport.GenerateReport(wrapper, sourceFile, null, CancellationToken.None); storage.Verify(s => s.SaveAsync($"{filename}.xlsx", It.IsAny <Stream>(), It.IsAny <CancellationToken>())); Assert.NotEmpty(xlsx); #if DEBUG File.WriteAllBytes($"{filename}.xlsx", xlsx); #endif }