public void ContactUs_FirstNameOnly()
        {
            var contactUsVM = new ContactUsViewModel {
                FirstName = "Test",
                LastName = "",
                EmailAddress = "*****@*****.**",
                Subject = "Subject",
                Body = "Body"
            };

            var contactUsVal = new ContactUsValidator(new EmailValidator());
            var valResult = contactUsVal.Validate(contactUsVM);

            Assert.IsTrue(!valResult.IsValid);
        }
        public HttpResponseMessage Post(ContactUsViewModel viewModel)
        {
            //wrapping in try/catch because the chaining extenssion method throws a validation exception
            try
            {
                //Using the ChainValidate extension allows us chain the execution of multiple validators regardless if they are related or not
                //Don't forget to call this in Try/Catch block and to interrogate the last result!!
                //NOTE: THE CURRENT SETUP DOES NOT ALLOW FOR ACCUMULATION OF ERRORS!! It is, however, easily achievable
                _viewModelValidator.Validate(viewModel)
                    .ChainValidate(_emailValidator, viewModel.EmailAddress)
                    .ChainValidate(_subjectValidator, viewModel.Subject);
            }
            catch (ValidationException ex)
            {
                return this.Request.CreateResponse(HttpStatusCode.BadRequest, ex.Errors.ToValidationFailureList());
            }

            return this.Request.CreateResponse(HttpStatusCode.OK);
        }
        public HttpResponseMessage Post(ContactUsViewModel viewModel)
        {
            var errors = new List<dynamic>();

            if (viewModel.FirstName != null && !viewModel.FirstName.ToLower().Contains("z"))
            {
                errors.Add(new { ErrorMessage = "If First Name is provided it must contain the letter z. (From Embedded)"});
            }

            if (viewModel.EmailAddress != null)
            {
                try
                {
                    MailAddress m = new MailAddress(viewModel.EmailAddress);
                }
                catch (FormatException ex)
                {
                    errors.Add(new { ErrorMessage = "The email format is not valid. (From Embedded)" });
                }
            }
            else
            {
                errors.Add(new { ErrorMessage = "The email cannot be left empty. (From Embedded)" });
            }

            if (viewModel.Subject == null)
            {
                errors.Add(new { ErrorMessage = "Subject cannot be left empty. (From Embedded)" });
            }
            else if (viewModel.Subject == "Ravents")
            {
                errors.Add(new { ErrorMessage = "Please provide a subject different than Ravens. (From Embedded)" });
            }

            if (viewModel.Body == null)
            {
                errors.Add(new { ErrorMessage = "Body cannot be left empty. (From Embedded)" });
            }
            else if (viewModel.Body.Length > 2000 || viewModel.Body.Length < 1)
            {
                errors.Add(new { ErrorMessage = "The length of the body must be between 0 and 2000. (From Embedded)" });
            }

            if (
                (((viewModel.FirstName != null && viewModel.FirstName.Trim().Length > 0) //has first name
                  && (viewModel.LastName == null || viewModel.LastName.Trim().Length == 0))) //but not last name
                ||
                (((viewModel.FirstName == null || viewModel.FirstName.Trim().Length == 0)//doesn't have first name
                  && (viewModel.LastName != null && viewModel.LastName.Trim().Length > 0)))//but has last name
                )
            {
                errors.Add(new { ErrorMessage = "If providing First or Last Name, please provide both. (From Embedded)" });
            }

            if (errors.Count > 0)
            {
               return this.Request.CreateResponse(HttpStatusCode.BadRequest, errors);
            }

            return this.Request.CreateResponse(HttpStatusCode.OK);
        }
 public IHttpActionResult Post(ContactUsViewModel viewModel)
 {
     return new OkResult(this);
 }