public async Task SaveDefinition_GivenValidJsonButSavingReturns400_ReturnsStatusCodeResult400() { //Arrange string yaml = JsonConvert.SerializeObject(new JobDefinition()); byte[] byteArray = Encoding.UTF8.GetBytes(yaml); MemoryStream stream = new MemoryStream(byteArray); IHeaderDictionary headerDictionary = new HeaderDictionary(); headerDictionary .Add("json-file", new StringValues(jsonFile)); HttpRequest request = Substitute.For <HttpRequest>(); request .Headers .Returns(headerDictionary); request .Body .Returns(stream); ILogger logger = CreateLogger(); IJobDefinitionsRepository jobDefinitionsRepository = CreateJobDefinitionsRepository(); jobDefinitionsRepository .SaveJobDefinition(Arg.Any <JobDefinition>()) .Returns(HttpStatusCode.BadRequest); JobDefinitionsService jobDefinitionsService = CreateJobDefinitionService(logger: logger, jobDefinitionsRepository: jobDefinitionsRepository); //Act IActionResult result = await jobDefinitionsService.SaveDefinition(request); //Assert result .Should() .BeOfType <StatusCodeResult>() .Which .StatusCode .Should() .Be(400); logger .Received(1) .Error(Arg.Is($"Failed to save json file: {jsonFile} to cosmos db with status 400")); }
public async Task SaveDefinition_GivenJsonSavesOK_ReturnsNoContentResult() { //Arrange string yaml = JsonConvert.SerializeObject(new JobDefinition()); byte[] byteArray = Encoding.UTF8.GetBytes(yaml); MemoryStream stream = new MemoryStream(byteArray); IHeaderDictionary headerDictionary = new HeaderDictionary(); headerDictionary .Add("json-file", new StringValues(jsonFile)); HttpRequest request = Substitute.For <HttpRequest>(); request .Headers .Returns(headerDictionary); request .Body .Returns(stream); ILogger logger = CreateLogger(); IJobDefinitionsRepository jobDefinitionsRepository = CreateJobDefinitionsRepository(); jobDefinitionsRepository .SaveJobDefinition(Arg.Any <JobDefinition>()) .Returns(HttpStatusCode.OK); ICacheProvider cacheProvider = CreateCacheProvider(); JobDefinitionsService jobDefinitionsService = CreateJobDefinitionService(logger: logger, jobDefinitionsRepository: jobDefinitionsRepository, cacheProvider: cacheProvider); //Act IActionResult result = await jobDefinitionsService.SaveDefinition(request); //Assert result .Should() .BeOfType <NoContentResult>(); await cacheProvider .Received(1) .RemoveAsync <List <JobDefinition> >(Arg.Is(CacheKeys.JobDefinitions)); }
public async Task <IActionResult> SaveDefinition(JobDefinition definition) { try { Guard.ArgumentNotNull(definition, nameof(definition)); ValidationResult validationResult = await _validator.ValidateAsync(definition); if (!validationResult.IsValid) { return(validationResult.AsBadRequest()); } HttpStatusCode result = await _jobDefinitionsRepositoryPolicy.ExecuteAsync(() => _jobDefinitionsRepository.SaveJobDefinition(definition)); if (!result.IsSuccess()) { int statusCode = (int)result; _logger.Error($"Failed to save json file: {definition.Id} to cosmos db with status {statusCode}"); return(new StatusCodeResult(statusCode)); } } catch (Exception exception) { _logger.Error(exception, $"Exception occurred writing job definition {definition?.Id} to cosmos db"); throw; } await _cachePolicy.ExecuteAsync(() => _cacheProvider.RemoveAsync <List <JobDefinition> >(CacheKeys.JobDefinitions)); return(new NoContentResult()); }
public async Task <IActionResult> SaveDefinition(HttpRequest request) { string json = await request.GetRawBodyStringAsync(); string jsonFilename = request.GetJsonFileNameFromRequest(); if (string.IsNullOrEmpty(json)) { _logger.Error($"Null or empty json provided for file: {jsonFilename}"); return(new BadRequestObjectResult($"Invalid json was provided for file: {jsonFilename}")); } JobDefinition definition = null; try { definition = JsonConvert.DeserializeObject <JobDefinition>(json); } catch (Exception exception) { _logger.Error(exception, $"Invalid json was provided for file: {jsonFilename}"); return(new BadRequestObjectResult($"Invalid json was provided for file: {jsonFilename}")); } try { HttpStatusCode result = await _jobDefinitionsRepositoryPolicy.ExecuteAsync(() => _jobDefinitionsRepository.SaveJobDefinition(definition)); if (!result.IsSuccess()) { int statusCode = (int)result; _logger.Error($"Failed to save json file: {jsonFilename} to cosmos db with status {statusCode}"); return(new StatusCodeResult(statusCode)); } } catch (Exception exception) { _logger.Error(exception, $"Exception occurred writing json file: {jsonFilename} to cosmos db"); return(new InternalServerErrorResult($"Exception occurred writing json file: {jsonFilename} to cosmos db")); } await _cachePolicy.ExecuteAsync(() => _cacheProvider.RemoveAsync <List <JobDefinition> >(CacheKeys.JobDefinitions)); return(new NoContentResult()); }