コード例 #1
0
        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"));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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());
        }