Пример #1
0
        public void VerifyDataMatchModelBuilder(
            int ilrukPrn,
            int dasUkPrn,
            string learnRefNumber,
            long ilrUln,
            long dasUln,
            int ilrStdCode,
            int dasStdCode,
            int ilrFworkCode,
            int dasFworkCode,
            int ilrProgType,
            int dasProgType,
            int ilrPwayCode,
            int dasPwayCode,
            int ruleId,
            string expectedIlrValue            = "",
            string expectedApprenticeshipValue = "")
        {
            var dataMatchModelBuilder       = new ExternalDataMatchMonthEndModelBuilder(Mock.Of <IDataLockValidationMessageService>(), Mock.Of <ILogger>());
            var dataMatchILRInfo            = BuildILRModelForDataMatchReportBuilderTests(ilrukPrn, learnRefNumber, ilrUln, "50117889", 1, ilrFworkCode, ilrProgType, ilrPwayCode, ilrStdCode, "ACT", "1", new DateTime(2019, 10, 10));
            var dataMatchRulebaseInfo       = BuildILRRulebaseModelForDataMatchReportBuilderTests(ilrukPrn, learnRefNumber, 1);
            var dataLockValidationErrorInfo =
                BuildDataLockValidationErrorInfoForDataMatchReportBuildTests(dasUkPrn, learnRefNumber, 1, dasUln, ruleId, 12345);
            var dataMatchDasApprenticeshiPriceInfo =
                BuildDasApprenticeshipInfoForDataMatchReportBuilderTests(ilrukPrn, 9900000111, null, null, dasFworkCode, dasProgType, dasPwayCode, dasStdCode, 100, "TestLegalEntityName");

            var result = dataMatchModelBuilder.BuildExternalModels(dataMatchILRInfo, dataMatchRulebaseInfo, dataLockValidationErrorInfo, dataMatchDasApprenticeshiPriceInfo, -1);

            result.Should().NotBeNullOrEmpty();
            result.Count().Should().Be(1);
            result.First().RuleName.Should().Be("DLOCK_" + ruleId.ToString("00"));
            result.First().ILRValue.Should().Be(expectedIlrValue);
            result.First().ApprenticeshipServiceValue.Should().Be(expectedApprenticeshipValue);
        }
        public async Task TestDataMatchReportGeneration()
        {
            string   csv      = string.Empty;
            DateTime dateTime = DateTime.UtcNow;
            string   filename = $"10033670_1_Apprenticeship Data Match Report {dateTime:yyyyMMdd-HHmmss}.csv";
            int      ukPrn    = 10033670;

            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.IsIlrSubmission).Returns(true);

            Mock <ILogger>           logger = new Mock <ILogger>();
            Mock <IDateTimeProvider> dateTimeProviderMock        = new Mock <IDateTimeProvider>();
            Mock <IStreamableKeyValuePersistenceService> storage = new Mock <IStreamableKeyValuePersistenceService>();
            Mock <IDASPaymentsProviderService>           dasPaymentProviderMock = new Mock <IDASPaymentsProviderService>();
            Mock <IILRProviderService>     iIlrProviderService   = new Mock <IILRProviderService>();
            IExternalDataMatchModelBuilder dataMatchModelBuilder = new ExternalDataMatchMonthEndModelBuilder(new DataLockValidationMessageService(), logger.Object);

            storage.Setup(x => x.SaveAsync(filename, It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Callback <string, string, CancellationToken>((key, value, ct) => csv = value)
            .Returns(Task.CompletedTask);

            var ilrModelForDataMatchReport = BuildILRModelForDataMatchReport(ukPrn);
            var dataMatchRulebaseInfo      = BuildFm36Model(ukPrn);

            var dasApprenticeshipInfoForDataMatchReport       = GetDasApprenticeshipInfoForDataMatchReport(ukPrn);
            var dataLockValidationErrorInfoForDataMatchReport = GetDataLockValidationErrorInfoForDataMatchReport(ukPrn);

            storage.Setup(x => x.ContainsAsync(It.IsAny <string>(), It.IsAny <CancellationToken>())).ReturnsAsync(true);
            storage.Setup(x => x.SaveAsync(filename, It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .Callback <string, string, CancellationToken>((key, value, ct) => csv = value)
            .Returns(Task.CompletedTask);

            iIlrProviderService
            .Setup(x => x.GetFM36DataForDataMatchReportAsync(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(dataMatchRulebaseInfo);
            iIlrProviderService
            .Setup(x => x.GetILRInfoForDataMatchReportAsync(It.IsAny <int>(), It.IsAny <List <long> >(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(ilrModelForDataMatchReport);
            dasPaymentProviderMock.Setup(x =>
                                         x.GetDasApprenticeshipInfoForDataMatchReport(It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(dasApprenticeshipInfoForDataMatchReport);

            dasPaymentProviderMock.Setup(x => x.GetDataLockValidationErrorInfoForUkprnAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(dataLockValidationErrorInfoForDataMatchReport);

            dateTimeProviderMock.Setup(x => x.GetNowUtc()).Returns(dateTime);
            dateTimeProviderMock.Setup(x => x.ConvertUtcToUk(It.IsAny <DateTime>())).Returns(dateTime);

            var report = new ExternalDataMatchReport(
                dasPaymentProviderMock.Object,
                iIlrProviderService.Object,
                storage.Object,
                dataMatchModelBuilder,
                dateTimeProviderMock.Object,
                new ExternalDataMatchModelComparer(),
                logger.Object);

            await report.GenerateReport(reportServiceContextMock.Object, null, CancellationToken.None);

            csv.Should().NotBeNullOrEmpty();
            File.WriteAllText(filename, csv);
            IEnumerable <DataMatchModel> result;

            TestCsvHelper.CheckCsv(csv, new CsvEntry(new ExternalDataMatchMapper(), 1));
            using (var reader = new StreamReader(filename))
            {
                using (var csvReader = new CsvReader(reader))
                {
                    csvReader.Configuration.RegisterClassMap <ExternalDataMatchMapper>();
                    result = csvReader.GetRecords <DataMatchModel>().ToList();
                }
            }

            result.Should().NotBeNullOrEmpty();
            result.Count().Should().Be(1);
        }