Ejemplo n.º 1
0
        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\"}]}");
        }
Ejemplo n.º 2
0
        public override string FormatErrorMessage(string fieldName)
        {
            var errorMessage =
                CustomErrorMessage ?? CreateErrorMessage(fieldName);

            return(ModelStateCustomErrorMessage.Create(ErrorId, errorMessage));
        }
        public void InvalidateCorrectlyWithCustomErrorMessage()
        {
            //--Arrange
            var model             = new ModelWithRequiredFieldWithCustomErrorMessage();
            var validationContext = new ValidationContext(model, null, null);
            var result            = new List <ValidationResult>();

            //--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 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));
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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."));
        }
Ejemplo n.º 7
0
        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"));
        }
Ejemplo n.º 8
0
        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\"}]}");
        }
Ejemplo n.º 9
0
        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));
        }
Ejemplo n.º 10
0
        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));
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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));
        }
Ejemplo n.º 13
0
        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));
        }
Ejemplo n.º 15
0
        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));
        }