public void ValidationRollupException_Constructor_Adds_Error()
        {
            var expected = new ValidationResult <TestErrorCodes>(TestErrorCodes.TestCode);
            var ex       = new ValidationRollupException(expected);

            Assert.AreEqual(expected, ex.ValidationResults.First());
        }
        /// <summary>
        /// Used with WebApi Responses
        /// </summary>
        /// <param name="exception">The exception.</param>
        /// <param name="request">The request.</param>
        /// <returns>HttpResponseMessage.</returns>

        public static HttpResponseMessage CreateValidationErrorResponse(this ValidationRollupException exception,
                                                                        HttpRequestMessage request)
        {
            var response = request.CreateResponse(HttpStatusCode.BadRequest, exception.ValidationResults);

            return(response);
        }
        public void ValidationRollupException_Constructor_Adds_Error_from_Primitive_Arguments()
        {
            var expectedMember = "member";
            var expectedCode   = TestErrorCodes.TestCode;
            var ex             = new ValidationRollupException <TestErrorCodes, TestEntity>(expectedMember, expectedCode);

            Assert.AreEqual(expectedMember, ex.ValidationResults.First().MemberNames.First());
            Assert.AreEqual("Test Code Message-needed for unit tests.", ex.ValidationResults.First().Message);
        }
        public void ValidationRollupException_Constructor_Adds_Message_with_Errors()
        {
            var expectedMessage = "member";
            var expectedResult  = new ValidationResult <TestErrorCodes>(TestErrorCodes.TestCode);

            var ex = new ValidationRollupException(expectedMessage, new ValidationResult[] { expectedResult });

            Assert.AreEqual(expectedMessage, ex.Message);
            Assert.AreEqual(expectedResult, ex.ValidationResults.First());
        }
        public void ValidationRollupException_Serializes()
        {
            var ex = new ValidationRollupException(string.Empty);

            MemoryStream    memoryStream    = new MemoryStream();
            BinaryFormatter binaryFormatter = new BinaryFormatter();

            binaryFormatter.Serialize(memoryStream, ex);
            memoryStream.Flush();
            memoryStream.Position = 0;
            var result = binaryFormatter.Deserialize(memoryStream);
        }
        public void ValidationRollupException_Constructor_Sets_Internals_Correctly()
        {
            var expectedMessage       = "the message";
            var expectedMember        = "member";
            var expectedResultMessage = "Test Code Message-needed for unit tests.";
            var expectedCode          = TestErrorCodes.TestCode;
            var ex     = new ValidationRollupException <TestErrorCodes, TestEntity>(expectedMessage, expectedMember, expectedCode);
            var actual = ex.ValidationResults.First();

            Assert.AreEqual(expectedMessage, ex.Message);
            Assert.AreEqual(expectedMember, actual.MemberNames.First());
            Assert.AreEqual(expectedResultMessage, actual.Message);
            Assert.AreEqual(expectedCode, actual.ErrorCode);
        }
        /// <summary>
        /// Used for MVC Model State errors
        /// </summary>
        /// <param name="exception">The exception.</param>
        /// <param name="request">The request.</param>
        /// <param name="modelState">State of the model.</param>
        /// <returns>HttpResponseMessage.</returns>
        public static HttpResponseMessage CreateModelStateValidationErrorResponse <TErrorCodes, TEntity>(
            this ValidationRollupException <TErrorCodes, TEntity> exception,
            HttpRequestMessage request, ModelStateDictionary modelState)
            where TErrorCodes : struct
            where TEntity : Entity

        {
            exception.ValidationResults.ToList().ForEach(x =>
            {
                foreach (var member in x.MemberNames)
                {
                    modelState.AddModelError(member, x.Message);
                }
            });

            var response = request.CreateResponse(HttpStatusCode.BadRequest, modelState);

            return(response);
        }
        public void ValidationRollupException_Constructor_Sets_Default_Message_When_Argument_Is_Empty_String()
        {
            var ex = new ValidationRollupException(string.Empty);

            Assert.AreEqual(ValidationRollupException.DefaultErrorMessage, ex.Message);
        }