Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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
        }