public async Task GetFundingSchemaByVersion_WhenCheckingAlreadyExistsThrowsException_ReturnsInternalServerError() { //arrange const string version = "0.6"; string blobName = $"{fundingSchemaFolder}/{version}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .When(x => x.SchemaVersionExists(Arg.Any <string>())) .Do(x => { throw new Exception(); }); ILogger logger = CreateLogger(); FundingSchemaService fundingSchemaService = CreateFundingSchemaService(logger, fundingSchemaRepository: fundingSchemaRepository); //Act IActionResult result = await fundingSchemaService.GetFundingSchemaByVersion(version); //Assert result .Should() .BeAssignableTo <InternalServerErrorResult>() .Which .Value .Should() .Be($"Error occurred fetching funding schema verion '{version}'"); logger .Received(1) .Error(Arg.Is($"Failed to check if funding schema version: '{blobName}' exists")); }
public async Task ValidateFundingTemplate_GivenTemplateWIthValidSchemaVersionButTemplateDoesNotValidateAgainstTheSchema_ReturnsValidationResultWithErrors1() { //Arrange const string schemaVersion = "1.0"; string fundingTemplate = CreateJsonFile("CalculateFunding.Services.Policy.Resources.LogicalModelTemplate.json"); string fundingSchema = CreateJsonFile("CalculateFunding.Services.Policy.Resources.LogicalModel.json"); string blobName = $"{fundingSchemaFolder}/{schemaVersion}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(true); fundingSchemaRepository .GetFundingSchemaVersion(Arg.Is(blobName)) .Returns(fundingSchema); FundingTemplateValidationService fundingTemplateValidationService = CreateFundingTemplateValidationService(fundingSchemaRepository: fundingSchemaRepository); //Act FundingTemplateValidationResult result = await fundingTemplateValidationService.ValidateFundingTemplate(fundingTemplate, "fsid", "fpid", "1.0"); //Assert result .Errors .Should() .HaveCount(8); result .IsValid .Should() .BeFalse(); }
public async Task GetFundingSchemaByVersion_WhenSchemaRetrivedFromBlobStorgae_ReturnsOkResult() { //arrange const string schema = "schema"; const string version = "0.6"; string blobName = $"{fundingSchemaFolder}/{version}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(true); fundingSchemaRepository .GetFundingSchemaVersion(Arg.Is(blobName)) .Returns(schema); ILogger logger = CreateLogger(); FundingSchemaService fundingSchemaService = CreateFundingSchemaService(logger, fundingSchemaRepository: fundingSchemaRepository); //Act IActionResult result = await fundingSchemaService.GetFundingSchemaByVersion(version); //Assert result .Should() .BeAssignableTo <OkObjectResult>() .Which .Value .Should() .Be(schema); }
private static FundingSchemaService CreateFundingSchemaService( ILogger logger = null, IFundingSchemaRepository fundingSchemaRepository = null) { return(new FundingSchemaService( logger ?? CreateLogger(), fundingSchemaRepository ?? CreateFundingSchemaRepository(), PolicyResiliencePoliciesTestHelper.GenerateTestPolicies())); }
private static FundingTemplateValidationService CreateFundingTemplateValidationService( IFundingSchemaRepository fundingSchemaRepository = null, IPolicyRepository policyRepository = null) { return(new FundingTemplateValidationService( fundingSchemaRepository ?? CreateFundingSchemaRepository(), PolicyResiliencePoliciesTestHelper.GenerateTestPolicies(), policyRepository ?? CreatePolicyRepository() )); }
public async Task ValidateFundingTemplate_GivenTemplateWithValidFundingPeriodIdButNoFundingPeriodExists_ReturnsValidationResultWithErrors() { //Arrange const string schemaVersion = "1.0"; FundingStream fundingStream = new FundingStream(); JsonSchema schema = JsonSchema.FromType <TestTemplate_schema_1_0>(); TestTemplate_schema_1_0 testClassWithFunding = new TestTemplate_schema_1_0 { SchemaVersion = schemaVersion, Funding = new { templateVersion = "2.1", fundingStream = new { code = "PES" }, fundingPeriod = new { id = "AY-2020" } } }; string fundingTemplate = JsonConvert.SerializeObject(testClassWithFunding); string fundingSchema = schema.AsJson(); string blobName = $"{fundingSchemaFolder}/{schemaVersion}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(true); fundingSchemaRepository .GetFundingSchemaVersion(Arg.Is(blobName)) .Returns(fundingSchema); IPolicyRepository policyRepository = CreatePolicyRepository(); policyRepository .GetFundingStreamById(Arg.Is("PES")) .Returns(fundingStream); FundingTemplateValidationService fundingTemplateValidationService = CreateFundingTemplateValidationService( fundingSchemaRepository: fundingSchemaRepository, policyRepository: policyRepository); //Act FundingTemplateValidationResult result = await fundingTemplateValidationService.ValidateFundingTemplate(fundingTemplate, "PES", "AY-2020", "2.1"); //Assert result .IsValid .Should() .BeFalse(); result .Errors[0] .ErrorMessage .Should() .Be("A funding period could not be found for funding period id 'AY-2020'"); }
public FundingSchemaService( ILogger logger, IFundingSchemaRepository fundingSchemaRepository, IPolicyResiliencePolicies policyResiliencePolicies) { Guard.ArgumentNotNull(logger, nameof(logger)); Guard.ArgumentNotNull(fundingSchemaRepository, nameof(fundingSchemaRepository)); Guard.ArgumentNotNull(policyResiliencePolicies?.FundingSchemaRepository, nameof(policyResiliencePolicies.FundingSchemaRepository)); _logger = logger; _fundingSchemaRepository = fundingSchemaRepository; _fundingSchemaRepositoryPolicy = policyResiliencePolicies.FundingSchemaRepository; }
public FundingTemplateValidationService( IFundingSchemaRepository fundingSchemaRepository, IPolicyResiliencePolicies policyResiliencePolicies, IPolicyRepository policyRepository) { Guard.ArgumentNotNull(fundingSchemaRepository, nameof(fundingSchemaRepository)); Guard.ArgumentNotNull(policyResiliencePolicies?.FundingSchemaRepository, nameof(policyResiliencePolicies.FundingSchemaRepository)); Guard.ArgumentNotNull(policyResiliencePolicies?.PolicyRepository, nameof(policyResiliencePolicies.PolicyRepository)); Guard.ArgumentNotNull(policyRepository, nameof(policyRepository)); _fundingSchemaRepository = fundingSchemaRepository; _fundingSchemaRepositoryPolicy = policyResiliencePolicies.FundingSchemaRepository; _policyRepository = policyRepository; _policyRepositoryPolicy = policyResiliencePolicies.PolicyRepository; }
public async Task GetFundingSchemaByVersion_GivenASchemaVersionThatDoesNotRxistInBlobStorage_ReturnsNotFound() { //Arrange const string version = "0.6"; string blobName = $"{fundingSchemaFolder}/{version}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(false); FundingSchemaService fundingSchemaService = CreateFundingSchemaService(fundingSchemaRepository: fundingSchemaRepository); //Act IActionResult result = await fundingSchemaService.GetFundingSchemaByVersion(version); //Assert result .Should() .BeAssignableTo <NotFoundResult>(); }
public async Task GetFundingSchemaByVersion_WhenEmptyStringRetrivedFromBlobStorgae_ReturnsInternalServerError() { //arrange const string version = "0.6"; string blobName = $"{fundingSchemaFolder}/{version}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(true); fundingSchemaRepository .GetFundingSchemaVersion(Arg.Is(blobName)) .Returns(string.Empty); ILogger logger = CreateLogger(); FundingSchemaService fundingSchemaService = CreateFundingSchemaService(logger, fundingSchemaRepository: fundingSchemaRepository); //Act IActionResult result = await fundingSchemaService.GetFundingSchemaByVersion(version); //Assert result .Should() .BeAssignableTo <InternalServerErrorResult>() .Which .Value .Should() .Be($"Failed to retrive blob contents for funding schema version '{version}'"); logger .Received(1) .Error(Arg.Is($"Empty schema returned from blob storage for blob name '{blobName}'")); }
public async Task SaveFundingSchema_WhenSavingIsSuccessful_ReturnsCreatedAtResult() { //arrange string json = CreateSchemaFile("CalculateFunding.Services.Policy.Resources.LogicalModel.json"); IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); ILogger logger = CreateLogger(); FundingSchemaService fundingSchemaService = CreateFundingSchemaService(logger, fundingSchemaRepository: fundingSchemaRepository); //Act IActionResult result = await fundingSchemaService.SaveFundingSchema( createdAtActionName, createdAtControllerName, json); //Assert result .Should() .BeAssignableTo <CreatedAtActionResult>(); CreatedAtActionResult actionResult = result as CreatedAtActionResult; actionResult .ActionName .Should() .Be("GetFundingSchemaByVersion"); actionResult .ControllerName .Should() .Be("SchemaController"); actionResult .RouteValues["schemaVersion"].ToString() .Should() .Be("1.0"); }
public async Task ValidateFundingTemplate_GivenTemplateWIthValidSchemaVersionButSchemaDoesNotExist_ReturnsValidationResultWithErrors() { //Arrange const string schemaVersion = "1.0"; string fundingTemplate = $"{{ \"schemaVersion\" : \"{schemaVersion}\"}}"; string blobName = $"{fundingSchemaFolder}/{schemaVersion}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(false); FundingTemplateValidationService fundingTemplateValidationService = CreateFundingTemplateValidationService(fundingSchemaRepository: fundingSchemaRepository); //Act FundingTemplateValidationResult result = await fundingTemplateValidationService.ValidateFundingTemplate(fundingTemplate, "fsid", "fpid", "1.0"); //Assert result .Errors .Should() .HaveCount(1); result .Errors[0] .ErrorMessage .Should() .Be($"A valid schema could not be found for schema version '{schemaVersion}'."); result .IsValid .Should() .BeFalse(); }
public async Task SaveFundingSchema_WhenVersionDoesNotExistButSavingToBlobStorageCausesAnError_ReturnsNoContentResult() { //arrange const string version = "1.0"; string blobName = $"{fundingSchemaFolder}/{version}.json"; string json = CreateSchemaFile("CalculateFunding.Services.Policy.Resources.LogicalModel.json"); IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .When(x => x.SaveFundingSchemaVersion(Arg.Any <string>(), Arg.Any <byte[]>())) .Do(x => { throw new Exception(); }); ILogger logger = CreateLogger(); FundingSchemaService fundingSchemaService = CreateFundingSchemaService(logger, fundingSchemaRepository: fundingSchemaRepository); //Act IActionResult result = await fundingSchemaService.SaveFundingSchema( createdAtActionName, createdAtControllerName, json); //Assert result .Should() .BeAssignableTo <InternalServerErrorResult>() .Which .Value .Should() .Be("Error occurred uploading funding schema"); logger .Received(1) .Error(Arg.Any <Exception>(), Arg.Is($"Failed to save funding schema '{blobName}' to blob storage")); }
public async Task ValidateFundingTemplate_Schema_1_1_GivenTemplateIsValidAndValuesExtracted_ReturnsValidationResultWithNoErrors() { //Arrange const string schemaVersion = "1.1"; FundingStream fundingStream = new FundingStream(); JsonSchema schema = JsonSchema.FromType <TestTemplate_schema_1_1>(); var template = new TestTemplate_schema_1_1 { SchemaVersion = schemaVersion, FundingStreamTemplate = new { templateVersion = "56.4", fundingStream = new { code = "XXX" }, fundingPeriod = new { id = "AY-2020" } } }; string fundingTemplate = JsonConvert.SerializeObject(template); string fundingSchema = schema.AsJson(); string blobName = $"{fundingSchemaFolder}/{schemaVersion}.json"; IFundingSchemaRepository fundingSchemaRepository = CreateFundingSchemaRepository(); fundingSchemaRepository .SchemaVersionExists(Arg.Is(blobName)) .Returns(true); fundingSchemaRepository .GetFundingSchemaVersion(Arg.Is(blobName)) .Returns(fundingSchema); IPolicyRepository policyRepository = CreatePolicyRepository(); policyRepository .GetFundingStreamById(Arg.Is("XXX")) .Returns(fundingStream); policyRepository .GetFundingPeriodById(Arg.Is("AY-2020")) .Returns(new FundingPeriod()); FundingTemplateValidationService fundingTemplateValidationService = CreateFundingTemplateValidationService( fundingSchemaRepository: fundingSchemaRepository, policyRepository: policyRepository); //Act FundingTemplateValidationResult result = await fundingTemplateValidationService.ValidateFundingTemplate(fundingTemplate, "XXX", "AY-2020", "56.4"); //Assert result .Errors .Should() .BeEmpty(); result .TemplateVersion .Should() .Be("56.4"); result .SchemaVersion .Should() .Be("1.1"); result .FundingStreamId .Should() .Be("XXX"); result .FundingPeriodId .Should() .Be("AY-2020"); result .IsValid .Should() .BeTrue(); }