public void ProcessPersona_ValidInputMasculinePersona_Returns0Values()
        {
            //Arrange
            var personaValidator  = Substitute.For <IValidator>();
            var personaFormatter  = Substitute.For <IPersonaFormatter>();
            var personasProcessor = new PersonasProcessor(personaValidator, personaFormatter);
            var persona           = new Persona
            {
                Nombre   = "Rosa",
                Apellido = "Benitez",
                Sexo     = Sexo.M,
                Edad     = 20
            };

            var personaRequest = new PersonaRequest
            {
                Personas = new List <Persona>
                {
                    persona
                }
            };
            var validationResult = new PersonasResult();

            personaValidator.ValidateInputList(personaRequest).Returns(validationResult);

            //Act
            ProcessResult result = personasProcessor.Process(personaRequest);

            //Assert
            Assert.IsTrue(result.Success);
            Assert.AreEqual(0, result.PersonasMujeresMayoresDe18.Count());
        }
        public void ProcessPersona_NotValidInput_ReturnsErrorStatus()
        {
            //Arrange
            var personaValidator = Substitute.For <IValidator>();
            var personaFormatter = Substitute.For <IPersonaFormatter>();
            var personaProcessor = new PersonasProcessor(personaValidator, personaFormatter);
            var personaRequest   = new PersonaRequest
            {
                Personas = null
            };
            var personasResult = new PersonasResult
            {
                ErrorMessages = new List <string>
                {
                    "Ingresar al menos 1 persona."
                }
            };

            personaValidator.ValidateInputList(personaRequest).Returns(personasResult);

            //Act
            ProcessResult result = personaProcessor.Process(personaRequest);

            //Assert
            Assert.IsFalse(result.Success);
            Assert.AreEqual("El proceso no puede ser completado. Error: Ingresar al menos 1 persona.",
                            result.ErrorMessage);
        }
        public HttpResponseMessage Put([FromBody] IEnumerable <Persona> personas)
        {
            var validationProcess = new Validator();
            var personaFormatter  = new PersonaFormatter();
            var personaProcessor  = new PersonasProcessor(validationProcess, personaFormatter);

            var request = new PersonaRequest
            {
                Personas = (List <Persona>)personas
            };

            var result = personaProcessor.Process(request);

            if (result.Success)
            {
                return(Request.CreateResponse(HttpStatusCode.OK, result.PersonasMujeresMayoresDe18));
            }
            else
            {
                var error = new HttpError(result.ErrorMessage);
                return(Request.CreateResponse(HttpStatusCode.BadRequest, error));
            }
        }
        public void ProcessPersona_NullNameNullApellido_ReturnsErrors()
        {
            //Arrange
            var personaValidator = Substitute.For <IValidator>();
            var personaFormatter = Substitute.For <IPersonaFormatter>();
            var personaProcessor = new PersonasProcessor(personaValidator, personaFormatter);
            var personaRequest   = new PersonaRequest
            {
                Personas = new List <Persona>
                {
                    new Persona
                    {
                        Edad = 19,
                        Sexo = Sexo.F
                    }
                }
            };
            var personasResult = new PersonasResult
            {
                ErrorMessages = new List <string>
                {
                    "El nombre es requerido.",
                    "El apellido es requerido."
                }
            };

            personaValidator.ValidateInputList(personaRequest).Returns(personasResult);

            //Act
            ProcessResult result = personaProcessor.Process(personaRequest);

            //Assert
            Assert.IsFalse(result.Success);
            Assert.AreEqual("El proceso no puede ser completado. " +
                            "Error: El nombre es requerido.\nEl apellido es requerido.",
                            result.ErrorMessage);
        }