private void RenderColumnHeaders(Worksheet worksheet, int row, FundingSummaryColumnHeaders fundingSummaryColumnHeaders)
 {
     worksheet.Cells.ImportObjectArray(
         new object[]
     {
         fundingSummaryColumnHeaders.April,
         null,
         fundingSummaryColumnHeaders.May,
         null,
         fundingSummaryColumnHeaders.June,
         null,
         fundingSummaryColumnHeaders.July,
         null,
         fundingSummaryColumnHeaders.August,
         null,
         fundingSummaryColumnHeaders.September,
         null,
         fundingSummaryColumnHeaders.October,
         null,
         fundingSummaryColumnHeaders.November,
         null,
         fundingSummaryColumnHeaders.December,
         null,
         fundingSummaryColumnHeaders.January,
         null,
         fundingSummaryColumnHeaders.February,
         null,
         fundingSummaryColumnHeaders.March
     },
         row,
         1,
         false);
 }
        public async Task GenerateReport_Success()
        {
            var reportData         = new List <ReportDataModel>();
            var columnHeaders      = new FundingSummaryColumnHeaders();
            var headerData         = new Dictionary <string, string>();
            var fundingSummaryData = new List <FundingSummaryReportModel>();
            var footerData         = new Dictionary <string, string>();
            var reportName         = "NCS Funding Summary Report";
            var ukprn     = 12345678;
            var jobId     = 100;
            var filename  = $"12345678/100/NCS Funding Summary Report-{new DateTime():yyyyMMdd-HHmmss}.xlsx";
            var container = "container";

            var loggerMock = new Mock <ILogger>();

            var ncsMessageMock = new Mock <INcsJobContextMessage>();

            ncsMessageMock.Setup(nmm => nmm.DssTimeStamp).Returns(new DateTime(2020, 03, 31));
            ncsMessageMock.Setup(nmm => nmm.ReportEndDate).Returns(new DateTime(2020, 03, 31));
            ncsMessageMock.Setup(nmm => nmm.Ukprn).Returns(ukprn);
            ncsMessageMock.Setup(nmm => nmm.JobId).Returns(jobId);
            ncsMessageMock.Setup(nmm => nmm.DctContainer).Returns(container);

            var    streamProviderMock = new Mock <IStreamProviderService>();
            var    assembly           = Assembly.GetExecutingAssembly();
            string resourceName       = assembly.GetManifestResourceNames().Single(str => str.EndsWith(ReportTemplateConstants.FundingSummaryReport));
            var    stream             = assembly.GetManifestResourceStream(resourceName);

            streamProviderMock.Setup(spm => spm.GetStreamFromTemplate(ReportTemplateConstants.FundingSummaryReport)).Returns(stream);

            var builderMock = new Mock <IFundingSummaryReportBuilder>();

            builderMock.Setup(bm => bm.BuildHeaderData(It.IsAny <INcsJobContextMessage>(), CancellationToken.None)).Returns(headerData);
            builderMock.Setup(bm => bm.BuildColumnHeaders(It.IsAny <INcsJobContextMessage>(), CancellationToken.None)).Returns(columnHeaders);
            builderMock.Setup(bm => bm.BuildPriorityGroupRows(It.IsAny <IEnumerable <ReportDataModel> >())).Returns(fundingSummaryData);
            builderMock.Setup(bm => bm.BuildNonPriorityGroupRows(It.IsAny <IEnumerable <ReportDataModel> >())).Returns(fundingSummaryData);
            builderMock.Setup(bm => bm.BuildFooterData(CancellationToken.None)).Returns(footerData);

            var fileNameServiceMock = new Mock <IFilenameService>();

            fileNameServiceMock.Setup(fns => fns.GetFilename(ukprn, jobId, reportName, It.IsAny <DateTime>(), OutputTypes.Excel)).Returns(filename);

            var excelServiceMock = new Mock <IExcelService>();

            var report = NewService(builderMock.Object, streamProviderMock.Object, loggerMock.Object, excelServiceMock.Object, fileNameServiceMock.Object);

            var result = await report.GenerateReport(reportData, ncsMessageMock.Object, CancellationToken.None);

            result.First().Should().Be(filename);
            result.Should().HaveCount(1);
        }