Esempio n. 1
0
        public async Task CreatesDDLMatchingSpecificationFundingAndReCreatesSchemaObjectsInQaRepository()
        {
            string specificationId         = NewRandomString();
            string fundingStreamId         = NewRandomString();
            string fundingPeriodId         = NewRandomString();
            string templateVersion         = NewRandomString();
            string schemaVersion           = NewRandomString();
            string fundingTemplateContents = NewRandomString();

            Calculation calculationOne   = NewCalculation();
            Calculation calculationTwo   = NewCalculation();
            Calculation calculationThree = NewCalculation();
            Calculation calculationFour  = NewCalculation(_ => _.WithCalculations(calculationOne));
            Calculation calculationFive  = NewCalculation(_ => _.WithCalculations(calculationTwo));

            string fundingLineOneCode = NewRandomString();
            string fundingLineTwoCode = NewRandomString();

            SpecificationSummary specificationSummary = NewSpecificationSummary(_ => _.WithId(specificationId)
                                                                                .WithFundingStreamIds(fundingStreamId)
                                                                                .WithFundingPeriodId(fundingPeriodId)
                                                                                .WithTemplateIds((fundingStreamId, templateVersion)));
            FundingTemplateContents fundingTemplate = NewFundingTemplateContents(_ => _.WithSchemaVersion(schemaVersion)
                                                                                 .WithTemplateFileContents(fundingTemplateContents));
            TemplateMetadataContents templateMetadataContents = NewTemplateMetadataContents(_ => _.WithFundingLines(
                                                                                                NewFundingLine(fl => fl.WithCalculations(calculationFour,
                                                                                                                                         calculationFive)
                                                                                                               .WithFundingLineCode(fundingLineOneCode)
                                                                                                               .WithFundingLines(NewFundingLine(fl1 => fl1.WithCalculations(calculationThree)
                                                                                                                                                .WithFundingLineCode(fundingLineTwoCode)))
                                                                                                               )));

            FundingStreamPeriodProfilePattern profilePatternOne = NewFundingStreamPeriodProfilePattern(_ =>
                                                                                                       _.WithFundingPeriodId(fundingPeriodId)
                                                                                                       .WithFundingStreamId(fundingStreamId)
                                                                                                       .WithFundingLineId(fundingLineOneCode));
            FundingStreamPeriodProfilePattern profilePatternTwo = NewFundingStreamPeriodProfilePattern(_ =>
                                                                                                       _.WithFundingPeriodId(fundingPeriodId)
                                                                                                       .WithFundingStreamId(fundingStreamId)
                                                                                                       .WithFundingLineId(fundingLineTwoCode));

            GivenTheSpecification(specificationId, specificationSummary);
            AndTheFundingTemplate(fundingStreamId, fundingPeriodId, templateVersion, fundingTemplate);
            AndTheTemplateMetadataContents(schemaVersion, fundingTemplateContents, templateMetadataContents);
            AndTheProfiling(fundingStreamId, fundingPeriodId, profilePatternOne, profilePatternTwo);

            await WhenTheSchemaIsRecreated(specificationId, fundingStreamId);

            ThenTheTotalNumberOfDDLScriptsExecutedWas(32);
        }
Esempio n. 2
0
        private async Task <TemplateMetadataContents> GetTemplateMetadataContents(string specificationId,
                                                                                  string fundingStreamId)
        {
            ApiResponse <SpecificationSummary> specificationResponse = await _specificationResilience.ExecuteAsync(()
                                                                                                                   => _specifications.GetSpecificationSummaryById(specificationId));

            SpecificationSummary specification = specificationResponse.Content;

            string templateVersion = specification.TemplateIds[fundingStreamId];

            ApiResponse <FundingTemplateContents> templateContentsRequest = await _policiesResilience.ExecuteAsync(()
                                                                                                                   => _policies.GetFundingTemplate(fundingStreamId, specification.FundingPeriod.Id, templateVersion));

            FundingTemplateContents fundingTemplateContents = templateContentsRequest.Content;

            string schemaVersion = fundingTemplateContents.SchemaVersion ?? fundingTemplateContents.Metadata?.SchemaVersion;

            ITemplateMetadataGenerator templateContents = _templateMetadataResolver.GetService(schemaVersion);

            return(templateContents.GetMetadata(fundingTemplateContents.TemplateFileContents));
        }
 protected void AndTheFundingTemplate(string fundingStreamId,
                                      string fundingPeriodId,
                                      string templateVersion,
                                      FundingTemplateContents fundingTemplate)
 => Policies.Setup(_ => _.GetFundingTemplate(fundingStreamId, fundingPeriodId, templateVersion))
 .ReturnsAsync(new ApiResponse <FundingTemplateContents>(HttpStatusCode.OK, fundingTemplate));
Esempio n. 4
0
        public async Task CreatesContextWithDocumentFeedForFundingStreamAndPeriodAndInitialisedDataTableBuilders()
        {
            string specificationId         = NewRandomString();
            string fundingStreamId         = NewRandomString();
            string fundingPeriodId         = NewRandomString();
            string templateVersion         = NewRandomString();
            string schemaVersion           = NewRandomString();
            string fundingTemplateContents = NewRandomString();

            Calculation calculationOne   = NewCalculation();
            Calculation calculationTwo   = NewCalculation();
            Calculation calculationThree = NewCalculation();
            Calculation calculationFour  = NewCalculation(_ => _.WithCalculations(calculationOne));
            Calculation calculationFive  = NewCalculation(_ => _.WithCalculations(calculationTwo));

            SchemaContext schemaContext = new SchemaContext();

            SpecificationSummary specificationSummary = NewSpecificationSummary(_ => _.WithId(specificationId)
                                                                                .WithFundingStreamIds(fundingStreamId)
                                                                                .WithFundingPeriodId(fundingPeriodId)
                                                                                .WithTemplateIds((fundingStreamId, templateVersion)));
            FundingTemplateContents fundingTemplate = NewFundingTemplateContents(_ => _.WithSchemaVersion(schemaVersion)
                                                                                 .WithTemplateFileContents(fundingTemplateContents));
            TemplateMetadataContents templateMetadataContents = NewTemplateMetadataContents(_ => _.WithFundingLines(
                                                                                                NewFundingLine(fl => fl.WithCalculations(calculationFour,
                                                                                                                                         calculationFive)
                                                                                                               .WithFundingLines(NewFundingLine(fl1 => fl1.WithCalculations(calculationThree)))
                                                                                                               )));

            GivenTheSpecification(specificationId, specificationSummary);
            AndTheFundingTemplate(fundingStreamId, fundingPeriodId, templateVersion, fundingTemplate);
            AndTheTemplateMetadataContents(schemaVersion, fundingTemplateContents, templateMetadataContents);
            AndTheCosmosDocumentFeed(specificationId, fundingStreamId);

            ISqlImportContext importContext = await WhenTheImportContextIsBuilt(specificationId, fundingStreamId, schemaContext);

            importContext
            .Should()
            .BeOfType <SqlImportContext>();

            importContext
            .SchemaContext
            .Should()
            .BeSameAs(schemaContext);

            importContext
            .Calculations
            .Should()
            .BeOfType <CalculationDataTableBuilder>();

            importContext
            .PaymentFundingLines
            .Should()
            .BeOfType <PaymentFundingLineDataTableBuilder>();

            importContext
            .InformationFundingLines
            .Should()
            .BeOfType <InformationFundingLineDataTableBuilder>();

            //profiling is lazily initialised from the first dto profile periods
            importContext
            .Profiling
            .Should()
            .BeNull();

            importContext
            .Calculations
            .Should()
            .BeOfType <CalculationDataTableBuilder>();

            importContext
            .Providers
            .Should()
            .BeOfType <ProviderDataTableBuilder>();

            importContext
            .Funding
            .Should()
            .BeOfType <PublishedProviderVersionDataTableBuilder>();

            AndTheImportContextHasADataTableBuilderForTheCalculation(importContext, calculationOne);
            AndTheImportContextHasADataTableBuilderForTheCalculation(importContext, calculationTwo);
            AndTheImportContextHasADataTableBuilderForTheCalculation(importContext, calculationThree);
            AndTheImportContextHasADataTableBuilderForTheCalculation(importContext, calculationFour);
            AndTheImportContextHasADataTableBuilderForTheCalculation(importContext, calculationFive);
        }