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