public AdicionarMedicoResponse Executar(AdicionarMedicoRequest request)
        {
            var response  = new AdicionarMedicoResponse();
            var validacao = new AdicionarMedicoRequestValidator();

            try
            {
                response = validacao.ValidarCamposAdicionarMedico(request);


                if (response.erros.Count > 0)
                {
                    response.msg.Add("Erro ao adicionar o medico");
                    return(response);
                }

                var medicoAdicionar = _adapter.converterRequestParaMedico(request);
                _repositorioMedicos.Add(medicoAdicionar);
                response.msg.Add("Adicionado com sucesso");
                response.id = medicoAdicionar.id;
                return(response);
            }
            catch (Exception)
            {
                response.msg.Add("Erro ao adicionar o medico");
                return(response);
            }
        }
        public void Medico_AdicionarMedico_QuandoRepositorioExcecao()
        {
            //Entidade_O que vai estar_comportamento esperado

            //Arrange
            //criar as variáveis
            var request  = new AdicionarMedicoRequestBuilder().Build();
            var response = new AdicionarMedicoResponse();

            var medico = new MedicoEntities();

            medico.id = 1;
            response.msg.Add("Erro ao adicionar o medico");


            _adapter.Setup(adapter => adapter.converterRequestParaMedico(request)).Returns(medico);
            _repositorioMedicos.Setup(repositorio => repositorio.Add(medico)).Throws(new Exception());

            //Act
            //Chamar as funções
            var result = _useCase.Executar(request);

            //Assert
            //As regras dos testes
            response.Should().BeEquivalentTo(result);
        }
        public void Medico_AdicionarMedico_QuandoNomeMenorVinte()
        {
            //Arrange
            var request  = new AdicionarMedicoRequestBuilder().withNameLength(10).Build();
            var response = new AdicionarMedicoResponse();

            //var medico = new MedicoEntities();
            //medico.id = 1;

            response.msg.Add("Erro ao adicionar o medico");
            response.erros.Add("Nome deve conter de 3 a 20 caracteres");

            //_repositorioMedicos.Setup(repositorio => repositorio.Add(medico)).Returns(medico.id);
            //_adapter.Setup(adapter => adapter.converterRequestParaMedico(request)).Returns(medico);

            //Act
            var result = _useCase.Executar(request);

            //Assert
            response.Should().BeEquivalentTo(result);
        }
        public AdicionarMedicoResponse ValidarCamposAdicionarMedico(AdicionarMedicoRequest request)
        {
            var           response = new AdicionarMedicoResponse();
            List <string> erros    = new List <string>();


            if (request.nome.Length < 20 && request.nome.Length > 3)
            {
                erros.Add("Nome deve conter de 3 a 20 caracteres");
            }



            Regex expressao = new Regex(@"(\([0-9]{2}\)|)[0-9]{4,5}-[0-9]{4}");

            //Match(request.telefone, expressao);
            //request.telefone.Length <= 10 ||
            if (!expressao.IsMatch(request.telefone.ToString()))
            {
                erros.Add("Telefone numero de digitos incorretos. Ex. 12345-1234 ");
            }

            if (request.crm.Length != 10)
            {
                erros.Add("CRM deve conter 10 digitos.");
            }

            if (request.especialidade.Length > 40 || request.especialidade.Length < 3)
            {
                erros.Add("Especialidade deve conter 3 a 40 digitos.");
            }

            foreach (var item in erros)
            {
                response.erros.Add(item);
            }


            return(response);
        }