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)); }
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); }
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")); }
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); }
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); }
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); }
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); }
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); }