public async Task TestFundingReportGeneration()
        {
            var ukprn          = 12345678;
            var jobId          = 100;
            var reportName     = "EAS Funding Report";
            var filename       = $"12345678_100_EAS Funding Report-12345678-20200801-090000.csv";
            var container      = "container";
            var submissionDate = new DateTime(2020, 8, 1, 9, 0, 0);

            var jobContextMock = new Mock <IEasJobContext>();

            jobContextMock.Setup(jc => jc.FileReference).Returns("Filename");
            jobContextMock.Setup(jc => jc.Ukprn).Returns(ukprn);
            jobContextMock.Setup(jc => jc.Container).Returns(container);
            jobContextMock.Setup(jc => jc.JobId).Returns(jobId);
            jobContextMock.Setup(jc => jc.SubmissionDateTimeUtc).Returns(submissionDate);

            var fileNameServiceMock = new Mock <IFileNameService>();
            var csvServiceMock      = new Mock <ICsvFileService>();

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

            var report = new FundingReport(fileNameServiceMock.Object, csvServiceMock.Object);

            var result = await report.GenerateReportAsync(jobContextMock.Object, new EasCsvRecordBuilder().GetValidRecords(), new List <ValidationErrorModel>(), CancellationToken.None);

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

            fileNameServiceMock.VerifyAll();
            csvServiceMock.VerifyAll();
        }
        public async Task TestFundingReportGeneration(string sourceFileName, string collectionName, int expectedZipEntryCount)
        {
            var dateTime = DateTime.UtcNow;
            var filename = $"10005752/1/ESF-2108 ESF (Round 2) Supplementary Data Funding Report {dateTime:yyyyMMdd-HHmmss}";

            var supplementaryDataWrapper = new SupplementaryDataWrapper()
            {
                SupplementaryDataLooseModels = GetSupplementaryDataLooseModels(),
                SupplementaryDataModels      = GetSupplementaryDataModels(),
                ValidErrorModels             = new List <ValidationErrorModel>()
            };

            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 csvServiceMock = new Mock <ICsvFileService>();

            csvServiceMock.Setup(x => x.WriteAsync <FundingReportModel, FundingReportMapper>(It.IsAny <List <FundingReportModel> >(), $"{filename}.csv", It.IsAny <string>(), It.IsAny <CancellationToken>(), null, null))
            .Returns(Task.CompletedTask);

            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>());

            Mock <IVersionInfo> versionInfo = new Mock <IVersionInfo>();

            versionInfo.Setup(m => m.ServiceReleaseVersion).Returns("1.2.3.4");
            var valueProvider = new ValueProvider();

            var fundigReport = new FundingReport(
                dateTimeProviderMock.Object,
                csvServiceMock.Object,
                referenceDataService.Object);

            SourceFileModel sourceFile = GetEsfSourceFileModel();

            sourceFile.FileName = sourceFileName;

            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("TestContainer");
            esfJobContextMock.Setup(x => x.CollectionYear).Returns(1819);
            esfJobContextMock.Setup(x => x.CollectionName).Returns(collectionName);

            await fundigReport.GenerateReport(esfJobContextMock.Object, sourceFile, supplementaryDataWrapper, CancellationToken.None);

            csvServiceMock.VerifyAll();
        }
        public void BuildModels_Counts()
        {
            var wrapper = new SupplementaryDataWrapper();

            wrapper.SupplementaryDataModels = new List <SupplementaryDataModel>
            {
                new SupplementaryDataModel()
                {
                    CalendarMonth              = 7,
                    CalendarYear               = 2019,
                    ConRefNumber               = "ABC123",
                    CostType                   = "CType1",
                    DeliverableCode            = "DCode",
                    LearnAimRef                = "XYZ1234",
                    ProviderSpecifiedReference = "A",
                    Reference                  = "TestReference",
                    SupplementaryDataPanelDate = new DateTime(2019, 7, 1),
                    ULN   = 12345678,
                    Value = 100
                },
                new SupplementaryDataModel()
                {
                    CalendarMonth              = 7,
                    CalendarYear               = 2019,
                    ConRefNumber               = "ABC123",
                    CostType                   = "CType2",
                    DeliverableCode            = "DCode",
                    LearnAimRef                = "XYZ1234",
                    ProviderSpecifiedReference = "A",
                    Reference                  = "TestReference",
                    SupplementaryDataPanelDate = new DateTime(2019, 7, 1),
                    ULN   = 12345678,
                    Value = 100
                }
            };

            wrapper.ValidErrorModels = new List <ValidationErrorModel>
            {
                new ValidationErrorModel()
                {
                    IsWarning                  = true,
                    CalendarMonth              = "7",
                    CalendarYear               = "2019",
                    ConRefNumber               = "ABC123",
                    CostType                   = "CType1",
                    DeliverableCode            = "DCode",
                    LearnAimRef                = "XYZ1234",
                    ProviderSpecifiedReference = "A",
                    Reference                  = "TestReference",
                    SupplementaryDataPanelDate = "01/07/2019",
                    ULN   = "12345678",
                    Value = "100"
                },
                new ValidationErrorModel()
                {
                    IsWarning                  = false,
                    CalendarMonth              = "7",
                    CalendarYear               = "2019",
                    ConRefNumber               = "ABC123",
                    CostType                   = "CType2",
                    DeliverableCode            = "DCode",
                    LearnAimRef                = "XYZ1234",
                    ProviderSpecifiedReference = "A",
                    Reference                  = "TestReference",
                    SupplementaryDataPanelDate = "01/07/2019",
                    ULN   = "12345678",
                    Value = "100"
                }
            };

            var reportModels = new FundingReport(
                Mock.Of <IDateTimeProvider>(),
                Mock.Of <ICsvFileService>(),
                Mock.Of <IReferenceDataService>()).BuildModels(wrapper);

            reportModels.Should().HaveCount(1);
        }