コード例 #1
0
        public IActionResult Post([FromBody] ValidateSchemaModel model)
        {
            var isValid = _jsonValidator.ValidateJson(model.Schema);

            if (!isValid)
            {
                var errorMessage = $"The given schema {model.Schema} is not a valid Json";
                _logger.Error(errorMessage);
                return(BadRequest(new[] { errorMessage }));
            }

            _logger.Information($"Calling Url: {model.Site} to get JSon data");
            var restApiResponse        = _restApiClient.GetDataFromUrl(model.Site);
            var schemaValidationResult = _jsonValidator.ValidateJsonAgainstSchema(model.Schema, restApiResponse.Data);

            var responseContent = JsonConvert.SerializeObject(schemaValidationResult);

            if (schemaValidationResult.SchemaValidationErrors.Any())
            {
                return(new ContentResult()
                {
                    StatusCode = 409,
                    Content = responseContent
                });
            }

            _logger.Information($"Validation Result: \n {responseContent}");
            return(Ok(schemaValidationResult));
        }
コード例 #2
0
        public void Return_Conflict_When_Schema_Validation_Fails()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.ValidJson)).Returns(true);
            _jsonValidatorMock.Setup(x => x.ValidateJsonAgainstSchema(Constants.ValidJson, _restApiResponse.Data))
            .Returns(
                new SchemaValidationResult()
            {
                ParsedObjectsCount     = 0,
                SchemaValidationErrors = new List <SchemaValidationError>()
                {
                    new SchemaValidationError()
                    {
                        ErrorType = ErrorType.Type,
                        Message   = "Test Error",
                        Path      = null
                    }
                }
            }
                );

            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.ValidJson,
                Site   = _apiEndpoint
            };

            var result = _controller.Post(validateSchemaModel);

            Assert.IsAssignableFrom <ContentResult>(result);
            var contentResult = (ContentResult)result;

            Assert.Equal((int)HttpStatusCode.Conflict, contentResult.StatusCode.Value);
        }
コード例 #3
0
        public void Log_Error_When_Schema_Validation_Fails()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.InvalidJson)).Returns(false);

            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.InvalidJson,
                Site   = _apiEndpoint
            };

            _controller.Post(validateSchemaModel);

            _loggerMock.Verify(x => x.Error($"The given schema {Constants.InvalidJson} is not a valid Json"));
        }
コード例 #4
0
        public void Return_BadRequest_When_Schema_Json_Is_Invalid()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.InvalidJson)).Returns(false);

            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.ValidJson,
                Site   = _apiEndpoint
            };

            var result = _controller.Post(validateSchemaModel);

            Assert.IsAssignableFrom <BadRequestObjectResult>(result);
        }
コード例 #5
0
        public void Call_Json_Validator_To_Validate_Schema_Json()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.ValidJson)).Returns(false);

            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.ValidJson,
                Site   = _apiEndpoint
            };

            _controller.Post(validateSchemaModel);

            _jsonValidatorMock.Verify(x => x.ValidateJson(Constants.ValidJson), Times.Once);
        }
コード例 #6
0
        public void Return_OK_When_Schema_Json_Is_Valid()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.ValidJson)).Returns(true);
            _jsonValidatorMock.Setup(x => x.ValidateJsonAgainstSchema(Constants.ValidJson, _restApiResponse.Data))
            .Returns(
                new SchemaValidationResult()
            {
                ParsedObjectsCount     = 1,
                SchemaValidationErrors = new List <SchemaValidationError>()
            }
                );

            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.ValidJson,
                Site   = _apiEndpoint
            };

            var result = _controller.Post(validateSchemaModel);

            Assert.IsAssignableFrom <OkObjectResult>(result);
        }
コード例 #7
0
        public void Validate_Response_Returned_By_A_Rest_Api_Against_A_Given_Json_Schema()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.ValidJson)).Returns(true);
            _jsonValidatorMock.Setup(x => x.ValidateJsonAgainstSchema(Constants.ValidJson, _restApiResponse.Data))
            .Returns(
                new SchemaValidationResult()
            {
                ParsedObjectsCount     = 1,
                SchemaValidationErrors = new List <SchemaValidationError>()
            }
                );

            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.ValidJson,
                Site   = _apiEndpoint
            };

            _controller.Post(validateSchemaModel);

            _jsonValidatorMock.Verify(x => x.ValidateJsonAgainstSchema(validateSchemaModel.Schema, _restApiResponse.Data), Times.Once);
        }
コード例 #8
0
        public void Call_Rest_Api_Client_To_Get_Data_From_A_Given_Api_Endpoint()
        {
            _jsonValidatorMock.Setup(x => x.ValidateJson(Constants.ValidJson)).Returns(true);
            _jsonValidatorMock.Setup(x => x.ValidateJsonAgainstSchema(Constants.ValidJson, _restApiResponse.Data))
            .Returns(
                new SchemaValidationResult()
            {
                ParsedObjectsCount     = 1,
                SchemaValidationErrors = new List <SchemaValidationError>()
            }
                );


            var validateSchemaModel = new ValidateSchemaModel()
            {
                Schema = Constants.ValidJson,
                Site   = _apiEndpoint
            };

            _controller.Post(validateSchemaModel);

            _restApiClientMock.Verify(x => x.GetDataFromUrl(validateSchemaModel.Site), Times.Once);
        }