public IHttpActionResult PostCandidato(CandidatoModels model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            try
            {
                if (string.IsNullOrEmpty(model.Nome))
                {
                    throw new Exception("Nome não pode ser nulo.");
                }
                if (string.IsNullOrEmpty(model.Email) || !Regex.IsMatch(model.Email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase))
                {
                    throw new Exception("E-mail não pode ser nulo ou inválido.");
                }

                Mail mail = new Mail {
                    Destinatario = model.Email, Assunto = "Obrigado por se candidatar!"
                };

                const int media = 7;
                if (model.Html >= media || model.Css >= media ||
                    model.Javascript >= media)
                {
                    mail.Body = string.Format("Olá {0}. <br><br>Obrigado por se candidatar, assim que tivermos uma vaga disponível" +
                                              " para {1} entraremos em contato.", model.Nome, "programador Front - End");
                    mail.Enviar();
                    model.FrontEnd = true;
                }
                if (model.Python >= media || model.Django >= media)
                {
                    mail.Body = string.Format("Olá {0}. <br><br>Obrigado por se candidatar, assim que tivermos uma vaga disponível" +
                                              " para {1} entraremos em contato.", model.Nome, "programador Back - End");
                    mail.Enviar();
                    model.BackEnd = true;
                }
                if (model.Android >= media || model.Ios >= media)
                {
                    mail.Body = string.Format("Olá {0}. <br><br>Obrigado por se candidatar, assim que tivermos uma vaga disponível" +
                                              " para {1} entraremos em contato.", model.Nome, "programador Mobile");
                    mail.Enviar();
                    model.Mobile = true;
                }
                if (model.Html < media && model.Css < media && model.Javascript < media &&
                    model.Android < media && model.Ios < media && model.Python < media &&
                    model.Django < media)
                {
                    mail.Body = string.Format("Olá {0}. <br><br>Obrigado por se candidatar, assim que tivermos uma vaga disponível" +
                                              " para {1} entraremos em contato.", model.Nome, "programador");
                    mail.Enviar();
                    model.Programador = true;
                }
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
            return(Ok(model));
        }
        public void EnviarCandidato()
        {
            CandidatoModels candidato = new CandidatoModels
            {
                Nome       = "Rafael Xavier",
                Email      = "*****@*****.**",
                Css        = 5,
                Html       = 5,
                Javascript = 8
            };
            CandidatoController controller = new CandidatoController();

            controller.ModelState.Clear();
            IHttpActionResult result = controller.PostCandidato(candidato);
            OkNegotiatedContentResult <CandidatoModels> okNegotiatedContentResult = result as OkNegotiatedContentResult <CandidatoModels>;

            Assert.IsNotNull(okNegotiatedContentResult);
            Assert.AreEqual(candidato.Nome, okNegotiatedContentResult.Content.Nome);
            Assert.AreEqual(candidato.Android, okNegotiatedContentResult.Content.Android);
            Assert.AreEqual(candidato.Css, okNegotiatedContentResult.Content.Css);
            Assert.AreEqual(candidato.Django, okNegotiatedContentResult.Content.Django);
            Assert.AreEqual(candidato.Email, okNegotiatedContentResult.Content.Email);
            Assert.AreEqual(candidato.Html, okNegotiatedContentResult.Content.Html);
            Assert.AreEqual(candidato.Ios, okNegotiatedContentResult.Content.Ios);
            Assert.AreEqual(candidato.Javascript, okNegotiatedContentResult.Content.Javascript);
            Assert.AreEqual(candidato.Python, okNegotiatedContentResult.Content.Python);
        }
        public void EnviarCandidatoHardcore()
        {
            CandidatoModels candidato = new CandidatoModels
            {
                Nome       = "Rafael Xavier",
                Email      = "*****@*****.**",
                Css        = 10,
                Android    = 10,
                Django     = 10,
                Html       = 10,
                Ios        = 10,
                Python     = 10,
                Javascript = 10
            };
            CandidatoController controller = new CandidatoController();

            controller.ModelState.Clear();
            IHttpActionResult result = controller.PostCandidato(candidato);
            OkNegotiatedContentResult <CandidatoModels> okNegotiatedContentResult = result as OkNegotiatedContentResult <CandidatoModels>;

            Assert.IsNotNull(okNegotiatedContentResult);
            Assert.IsTrue(candidato.FrontEnd);
            Assert.IsTrue(candidato.BackEnd);
            Assert.IsTrue(candidato.Mobile);
            Assert.IsFalse(candidato.Programador);
        }
        public void EnviarCandidatoSemEmail()
        {
            CandidatoModels candidato = new CandidatoModels
            {
                Nome       = "Rafael Xavier",
                Css        = 5,
                Html       = 5,
                Javascript = 8
            };
            CandidatoController controller = new CandidatoController();

            controller.ModelState.Clear();
            IHttpActionResult            result = controller.PostCandidato(candidato);
            BadRequestErrorMessageResult badRequestErrorMessageResult = result as BadRequestErrorMessageResult;

            Assert.IsNotNull(badRequestErrorMessageResult);
            Assert.AreEqual("E-mail não pode ser nulo ou inválido.", badRequestErrorMessageResult.Message);
        }
        public void EnviarCandidatoSemNome()
        {
            CandidatoModels candidato = new CandidatoModels
            {
                Email      = "*****@*****.**",
                Css        = 5,
                Html       = 5,
                Javascript = 8
            };
            CandidatoController controller = new CandidatoController();

            controller.ModelState.Clear();
            IHttpActionResult            result = controller.PostCandidato(candidato);
            BadRequestErrorMessageResult badRequestErrorMessageResult = result as BadRequestErrorMessageResult;

            Assert.IsNotNull(badRequestErrorMessageResult);
            Assert.AreEqual("Nome não pode ser nulo.", badRequestErrorMessageResult.Message);
        }