public async Task GetFundingTemplate_GivenTemplateIsInCache_ReturnsOkObjectResultFromCache() { //Arrange const string fundingStreamId = "PES"; const string templateVersion = "1.2"; const string fundingPeriodId = "AY-2020"; string cacheKey = $"{CacheKeys.FundingTemplatePrefix}{fundingStreamId}-{fundingPeriodId}-{templateVersion}"; string template = "a template"; ICacheProvider cacheProvider = CreateCacheProvider(); cacheProvider .GetAsync <string>(Arg.Is(cacheKey)) .Returns(template); FundingTemplateService fundingTemplateService = CreateFundingTemplateService(cacheProvider: cacheProvider); //Act ActionResult <string> result = await fundingTemplateService.GetFundingTemplateSourceFile(fundingStreamId, fundingPeriodId, templateVersion); //Assert result .Value .Should() .Be(template); }
public async Task GetFundingTemplate_GivenFetechingBlobFails_ReturnsInternalServerError() { //Arrange const string fundingStreamId = "PES"; const string templateVersion = "1.2"; const string fundingPeriodId = "AY-2020"; string cacheKey = $"{CacheKeys.FundingTemplatePrefix}{fundingStreamId}-{fundingPeriodId}-{templateVersion}"; string blobName = $"{fundingStreamId}/{fundingPeriodId}/{templateVersion}.json"; string template = string.Empty; ICacheProvider cacheProvider = CreateCacheProvider(); cacheProvider .GetAsync <string>(Arg.Is(cacheKey)) .Returns((string)null); IFundingTemplateRepository fundingTemplateRepository = CreateFundingTemplateRepository(); fundingTemplateRepository .TemplateVersionExists(Arg.Is(blobName)) .Returns(true); fundingTemplateRepository .When(x => x.GetFundingTemplateVersion(Arg.Is(blobName))) .Do(x => { throw new Exception(); }); ILogger logger = CreateLogger(); FundingTemplateService fundingTemplateService = CreateFundingTemplateService( logger, cacheProvider: cacheProvider, fundingTemplateRepository: fundingTemplateRepository); //Act ActionResult <string> result = await fundingTemplateService.GetFundingTemplateSourceFile(fundingStreamId, fundingPeriodId, templateVersion); //Assert result .Result .Should() .BeAssignableTo <InternalServerErrorResult>() .Which .Value .Should() .Be($"Error occurred fetching funding template for funding stream id '{fundingStreamId}', funding period id '{fundingPeriodId}' and version '{templateVersion}'"); logger .Received(1) .Error(Arg.Any <Exception>(), $"Failed to fetch funding template '{blobName}' from blob storage"); }
public async Task GetFundingTemplate_GivenTemplateDoesExistInBlobStorageButIsEmpty_ReturnsInternalServerError() { //Arrange const string fundingStreamId = "PES"; const string templateVersion = "1.2"; const string fundingPeriodId = "AY-2020"; string cacheKey = $"{CacheKeys.FundingTemplatePrefix}{fundingStreamId}-{fundingPeriodId}-{templateVersion}"; string blobName = $"{fundingStreamId}/{fundingPeriodId}/{templateVersion}.json"; string template = string.Empty; ICacheProvider cacheProvider = CreateCacheProvider(); cacheProvider .GetAsync <string>(Arg.Is(cacheKey)) .Returns((string)null); IFundingTemplateRepository fundingTemplateRepository = CreateFundingTemplateRepository(); fundingTemplateRepository .TemplateVersionExists(Arg.Is(blobName)) .Returns(true); fundingTemplateRepository .GetFundingTemplateVersion(Arg.Is(blobName)) .Returns(template); ILogger logger = CreateLogger(); FundingTemplateService fundingTemplateService = CreateFundingTemplateService( logger, cacheProvider: cacheProvider, fundingTemplateRepository: fundingTemplateRepository); //Act ActionResult <string> result = await fundingTemplateService.GetFundingTemplateSourceFile(fundingStreamId, fundingPeriodId, templateVersion); //Assert result .Result .Should() .BeAssignableTo <InternalServerErrorResult>() .Which .Value .Should() .Be($"Failed to retreive blob contents for funding stream id '{fundingStreamId}', funding period id '{fundingPeriodId}' and funding template version '{templateVersion}'"); logger .Received(1) .Error($"Empty template returned from blob storage for blob name '{blobName}'"); }
public async Task GetFundingTemplate_GivenFetechingBlobSucceeds_SetsCacheAndReturnsOKObjectResult() { //Arrange const string fundingStreamId = "PES"; const string templateVersion = "1.2"; const string fundingPeriodId = "AY-2020"; string cacheKey = $"{CacheKeys.FundingTemplatePrefix}{fundingStreamId}-{fundingPeriodId}-{templateVersion}"; string blobName = $"{fundingStreamId}/{fundingPeriodId}/{templateVersion}.json"; string template = "a template"; ICacheProvider cacheProvider = CreateCacheProvider(); cacheProvider .GetAsync <string>(Arg.Is(cacheKey)) .Returns((string)null); IFundingTemplateRepository fundingTemplateRepository = CreateFundingTemplateRepository(); fundingTemplateRepository .TemplateVersionExists(Arg.Is(blobName)) .Returns(true); fundingTemplateRepository .GetFundingTemplateVersion(Arg.Is(blobName)) .Returns(template); ILogger logger = CreateLogger(); FundingTemplateService fundingTemplateService = CreateFundingTemplateService( logger, cacheProvider: cacheProvider, fundingTemplateRepository: fundingTemplateRepository); //Act ActionResult <string> result = await fundingTemplateService.GetFundingTemplateSourceFile(fundingStreamId, fundingPeriodId, templateVersion); //Assert result .Value .Should() .Be(template); await cacheProvider .Received(1) .SetAsync(Arg.Is(cacheKey), Arg.Is(template)); }
public async Task GetFundingTemplate_GivenTemplateDoesNotExistInBlobStorage_ReturnsNotFoundResult() { //Arrange const string fundingStreamId = "PES"; const string templateVersion = "1.2"; const string fundingPeriodId = "AY-2020"; string cacheKey = $"{CacheKeys.FundingTemplatePrefix}{fundingStreamId}-{fundingPeriodId}-{templateVersion}"; string blobName = $"{fundingStreamId}/{fundingPeriodId}/{templateVersion}.json"; ICacheProvider cacheProvider = CreateCacheProvider(); cacheProvider .GetAsync <string>(Arg.Is(cacheKey)) .Returns((string)null); IFundingTemplateRepository fundingTemplateRepository = CreateFundingTemplateRepository(); fundingTemplateRepository .TemplateVersionExists(Arg.Is(blobName)) .Returns(false); FundingTemplateService fundingTemplateService = CreateFundingTemplateService( cacheProvider: cacheProvider, fundingTemplateRepository: fundingTemplateRepository); //Act ActionResult <string> result = await fundingTemplateService.GetFundingTemplateSourceFile(fundingStreamId, fundingPeriodId, templateVersion); //Assert result .Result .Should() .BeAssignableTo <NotFoundResult>(); }