public void ReturnSnakeCaseForTwoModelStateErrorsWhenSnakeCaseIsSet() { //--Arrange var attribute = new RidgidValidateModelAttribute(); var actionContext = new HttpActionContext(); actionContext.ModelState["Field"] = new ModelState { Errors = { ModelStateCustomErrorMessage.Create(1, "ErrorMessage1"), ModelStateCustomErrorMessage.Create(2, "ErrorMessage2") } }; FormatResponseMessage.SetSnakeCaseSetting(true); //--Act attribute.OnActionExecuting(actionContext); var response = actionContext.Response; //--Assert var contentAsString = ContentAsString(actionContext, response); contentAsString.ShouldBe( "{\"errors\":[{\"error_id\":1,\"debug_error_message\":\"ErrorMessage1\"},{\"error_id\":2,\"debug_error_message\":\"ErrorMessage2\"}]}"); }
public void IsSnakeCaseReturnsTrueWithAppConfigSnakeCaseSettingTrue() { //--Arrange FormatResponseMessage.SetSnakeCaseSetting(true); //--Act/Assert FormatResponseMessage.IsSnakeCase().ShouldBeTrue(); }
internal HttpResponseMessage Execute() { var response = FormatResponseMessage.CreateMessage(null, HttpStatusCode.Created); response.RequestMessage = new HttpRequestMessage(); response.Headers.Location = new Uri("https://link"); return(response); }
public override void Handle(ExceptionHandlerContext context) { var apiController = context.ExceptionContext.ControllerContext.Controller as ApiController; context.Result = FormatResponseMessage.CreateErrorResponse(apiController, 1, "An internal sever error occurred. This is not your fault.", HttpStatusCode.InternalServerError); }
public void GetCasing() { //--Arrange const string camelCaseStr = "HelloMyNameIsBob"; const string expectedSnakeCase = "hello_my_name_is_bob"; //--Act var result = FormatResponseMessage.ConvertCamelCaseIntoSnakeCase(camelCaseStr); //--Assert result.ShouldBe(expectedSnakeCase); }
public void IsSnakeCaseReturnsFalseWithAppConfigSnakeCaseSettingFalse() { //--Arrange var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings["snakecase"].Value = "false"; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings"); //--Act/Assert FormatResponseMessage.IsSnakeCase().ShouldBeFalse(); }
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { var errorMessages = new List <ErrorMessage> { new ErrorMessage { DebugErrorMessage = UNAUTHORIZED_MESSAGE, ErrorId = this.ErrorId } }; actionContext.Response = FormatResponseMessage.CreateMessage(errorMessages, HttpStatusCode.Unauthorized); }
public void ValidateCorrectlyWhenMaxAndMinEqual() { //--Arrange var model = new ModelWithStringLengthMinAndMaxEqualField { MultipleWordedField = "12" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(false); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeTrue(); result.Count.ShouldBe(0); }
public void UseSnakeCaseForFieldNameWhenSet() { //--Arrange var model = new ModelWithRequiredFieldWithoutCustomErrorMessage(); var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(true); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'multiple_worded_field' field is required."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public override void OnActionExecuting(HttpActionContext actionContext) { if (actionContext.ModelState.IsValid) { return; } var errorMessages = (from key in actionContext.ModelState.Keys from error in actionContext.ModelState[key].Errors select ModelStateCustomErrorMessage.Parse(error.ErrorMessage)) .GroupBy(x => new { x.ErrorId, x.DebugErrorMessage }) .Select(x => x.First()) .ToList(); var errorsResponseObject = new ErrorsResponse { Errors = errorMessages }; actionContext.Response = FormatResponseMessage.CreateMessage(errorsResponseObject, HttpStatusCode.BadRequest); }
public void InvalidateCorrectlyWithCustomErrorMessage() { //--Arrange var model = new ModelWithStringLengthFieldWithCustomErrorMessage { Field = "invalid" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(false); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, "CustomMessage")); }
public void ReturnCamelCaseForOneModelStateErrorByDefault() { //--Arrange var attribute = new RidgidValidateModelAttribute(); var actionContext = new HttpActionContext(); actionContext.ModelState["Field"] = new ModelState { Errors = { ModelStateCustomErrorMessage.Create(1, "ErrorMessage") } }; FormatResponseMessage.SetSnakeCaseSetting(false); //--Act attribute.OnActionExecuting(actionContext); var response = actionContext.Response; //--Assert var contentAsString = ContentAsString(actionContext, response); contentAsString.ShouldBe("{\"errors\":[{\"errorId\":1,\"debugErrorMessage\":\"ErrorMessage\"}]}"); }
public void InvalidateCorrectlyWhenMaxAndMinEqualWhenSnakeCase() { //--Arrange var model = new ModelWithStringLengthMinAndMaxEqualField { MultipleWordedField = "1234" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(true); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); result[0].ErrorMessage.ShouldBe(ModelStateCustomErrorMessage.Create(1, "The 'multiple_worded_field' field must be '2' characters long.")); }
// Checks that an actionresult is equal to the expected result, and that the status code and optional location // header are what is expected public static void BetterBe <TModelType>(this IHttpActionResult actionResult, HttpStatusCode expectedStatusCode, TModelType expectedResult, string expectedLocationHeader = null) where TModelType : class { var contentAsString = Content(actionResult, expectedStatusCode, false); TModelType returnedModel; try { returnedModel = JsonConvert.DeserializeObject <TModelType>(contentAsString, FormatResponseMessage.JsonSerializerSetting()); } catch (JsonSerializationException) { throw new JsonSerializationException($"{contentAsString} could not be deserialized into the expected object."); } returnedModel.ShouldNotBeNull(); AssertThatTwoObjectsAreTheSame(returnedModel, expectedResult); CheckLocationHeader(actionResult, expectedLocationHeader); }
public void UseSnakeCaseForFieldNameWhenSet() { //--Arrange var model = new ModelWithStringLengthField { MultipleWordedField = "1" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(true); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'multiple_worded_field' field must be between '2' and '3' characters long."; result[0].ErrorMessage.ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public void InvalidateCorrectlyWithoutCustomErrorMessage() { //--Arrange var model = new ModelWithDateTimeFieldWithoutCustomErrorMessage { CreatedDate = "invalidDate" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(false); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'CreatedDate' must be in ISO-8601 format, (i.e. yyyy-mm-ddThh:mm:ss.ffffff)."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public void InvalidateCorrectlyWithoutCustomErrorMessage() { //--Arrange var model = new ModelWithMinLengthFieldWithoutCustomErrorMessage { MultipleWordedField = "1" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(false); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'MultipleWordedField' field must be less than '2' characters long."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public void ConvertFieldNameToSnakeCaseIfSetInAppConfig() { //--Arrange var model = new ModelWithEmailAddressFieldWithoutCustomErrorMessage() { MultipleWordedField = "invalidemail" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(true); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'multiple_worded_field' field is an invalid email address."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public void SetFieldnameToSnakeCaseWhenSetInAppConfig() { //--Arrange var model = new ModelWithMaxLengthFieldWithoutCustomErrorMessage { MultipleWordedField = "123" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(true); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'multiple_worded_field' field cannot be greater than '2' characters long."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public void InvalidateCorrectlyWithoutCustomErrorMessage() { //--Arrange var model = new ModelWithRegularExpressionFieldWithoutCustomErrorMessage { MultipleWordedField = "invalidregex" }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(false); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); const string defaultErrorMsg = "The 'MultipleWordedField' field must match the regular expression: 'a|b'."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
public void UseSnakeCaseInDefaultErrorMessageWhenSet() { //--Arrange var model = new ModelWithPositiveIntFieldWithoutCustomErrorMessage { CustomId = -1 }; var validationContext = new ValidationContext(model, null, null); var result = new List <ValidationResult>(); FormatResponseMessage.SetSnakeCaseSetting(true); //--Act var valid = Validator.TryValidateObject(model, validationContext, result, true); //--Assert valid.ShouldBeFalse(); result.Count.ShouldBe(1); string defaultErrorMsg = $"The 'custom_id' field must be an integer value between '0' and '{int.MaxValue}'."; result[0].ErrorMessage .ShouldBe(ModelStateCustomErrorMessage.Create(1, defaultErrorMsg)); }
private string CreateErrorMessage(string fieldName) { return(MininumLength == MaximumLength ? $"The '{FormatResponseMessage.GetCasing(fieldName)}' field must be '{MininumLength}' characters long." : $"The '{FormatResponseMessage.GetCasing(fieldName)}' field must be between '{MininumLength}' and '{MaximumLength}' characters long."); }
public IHttpActionResult HttpGenericErrorResponse(int errorId, string debugErrorMessage, HttpStatusCode httpStatusCode) { return(FormatResponseMessage.CreateErrorResponse(this, errorId, debugErrorMessage, httpStatusCode)); }
private static string CreateErrorMessage(string fieldName) { return($"The '{FormatResponseMessage.GetCasing(fieldName)}' field is an invalid email address."); }
private static string CreateErrorMessage(string fieldName) { return($"The '{FormatResponseMessage.GetCasing(fieldName)}' field is required."); }
public void IsSnakeCaseReturnsFalseWithNoAppConfigSnakeCaseSetting() { //--Act/Assert FormatResponseMessage.IsSnakeCase().ShouldBeFalse(); }
private string CreateErrorMessage(string fieldName) { return($"The '{FormatResponseMessage.GetCasing(fieldName)}' must be in ISO-8601 format, (i.e. yyyy-mm-ddThh:mm:ss.ffffff)."); }
private string CreateErrorMessage(string fieldName) { return($"The value of the '{FormatResponseMessage.GetCasing(fieldName)}' field must be between '{Mininum}' and '{Maximum}'."); }
private string CreateErrorMessage(string fieldName) { return($"The '{FormatResponseMessage.GetCasing(fieldName)}' field must be an integer value between '{MIN}' and '{MAX}'."); }
private string CreateErrorMessage(string fieldName) { return $"The '{FormatResponseMessage.GetCasing(fieldName)}' field must be less than '{Length}' characters long."; }