public async Task SaveFundingPeriod_GivenValidJsonButFailedToSaveToDatabase_ReturnsStatusCode()
        {
            //Arrange
            ILogger logger = CreateLogger();

            IPolicyRepository policyRepository = CreatePolicyRepository();

            policyRepository
            .When(x => x.SaveFundingPeriods(Arg.Any <FundingPeriod[]>()))
            .Do(x => { throw new Exception(); });

            FundingPeriodService fundingPeriodService = CreateFundingPeriodService(logger: logger, policyRepository: policyRepository);

            string errorMessage = $"Exception occurred writing json file to cosmos db";

            //Act
            IActionResult result = await fundingPeriodService.SaveFundingPeriods(CreateFundingPeriodsJsonModel());

            //Assert
            result
            .Should()
            .BeOfType <InternalServerErrorResult>()
            .Which
            .Value
            .Should()
            .Be(errorMessage);

            logger
            .Received(1)
            .Error(Arg.Any <Exception>(), Arg.Is(errorMessage));
        }
        public async Task SaveFundingStream_GivenValidYamlAndSaveWasSuccesful_ReturnsOK()
        {
            //Arrange
            ILogger logger = CreateLogger();

            IPolicyRepository policyRepository = CreatePolicyRepository();

            ICacheProvider cacheProvider = CreateCacheProvider();

            FundingPeriodService fundingPeriodService = CreateFundingPeriodService(logger: logger, policyRepository: policyRepository, cacheProvider: cacheProvider);

            //Act
            IActionResult result = await fundingPeriodService.SaveFundingPeriods(CreateFundingPeriodsJsonModel());

            //Assert
            result
            .Should()
            .BeOfType <OkResult>();

            logger
            .Received(1)
            .Information(Arg.Is($"Successfully saved file to cosmos db"));

            await
            policyRepository
            .Received(1)
            .SaveFundingPeriods(Arg.Is <FundingPeriod[]>(m => m.Count() == 4));

            await cacheProvider
            .Received(1)
            .RemoveAsync <FundingPeriod[]>(CacheKeys.FundingPeriods);
        }
        public async Task SaveFundingPeriod_GivenNoJsonWasProvided_ReturnsBadRequest()
        {
            //Arrange
            ILogger logger = CreateLogger();

            FundingPeriodService fundingPeriodService = CreateFundingPeriodService(logger: logger);

            //Act
            IActionResult result = await fundingPeriodService.SaveFundingPeriods(null);

            //Assert
            result
            .Should()
            .BeOfType <BadRequestObjectResult>();

            logger
            .Received(1)
            .Error(Arg.Is($"Null or empty json provided for file"));
        }