public void Calculate_With_PlainText_Response_Passing_An_Valid_Date()
        {
            var ageCalculatedRequestDTO = new AgeCalculateRequestDTO
            {
                BirthDate = DateTime.Now.AddYears(-1).ToShortDateString()
            };

            var objectResult     = (ObjectResult)_ageController.CalculateWithPlainTextResponse(ageCalculatedRequestDTO);
            var envelopeResponse = (Envelope <string>)objectResult.Value;

            Assert.Null(envelopeResponse.ErrorMessage);
        }
        public void Calculate_With_PlainText_Response_Passing_An_Invalid_Date()
        {
            var ageCalculatedRequestDTO = new AgeCalculateRequestDTO
            {
                BirthDate = "30*/12*/1992"
            };

            var objectResult     = (ObjectResult)_ageController.CalculateWithPlainTextResponse(ageCalculatedRequestDTO);
            var envelopeResponse = (Envelope <string>)objectResult.Value;

            Assert.NotNull(envelopeResponse.ErrorMessage);
            Assert.Equal(AgeValidationErrorMessagesConsts.INVALID_DATE, envelopeResponse.ErrorMessage);
        }
        public IActionResult CalculateWithPlainTextResponse(AgeCalculateRequestDTO ageCalculateRequestDTO)
        {
            var validationResult = _commonValidationAgeCalculateRequestDTO.Validate(ageCalculateRequestDTO);

            if (validationResult.IsValid == false)
            {
                return(Error(validationResult.Message));
            }

            DateTime.TryParse(ageCalculateRequestDTO.BirthDate, out var convertedBirthDate);

            var plainTextResponse = $"Uma pessoa que nasceu em '{convertedBirthDate.ToShortDateString()}' hoje tem {DateTimeUtils.GetTotalCompletedYearsSinceBirthdate(convertedBirthDate)} anos, {DateTimeUtils.GetTotalCompletedMonthsSinceLastBirthday(convertedBirthDate)} meses e {DateTimeUtils.GetTotalCompletedDaysSinceLastBirthday(convertedBirthDate)} dias.";

            return(Ok(plainTextResponse));
        }
        public void Calculate_With_Numeric_Response_Passing_An_Valid_Date()
        {
            var ageCalculatedRequestDTO = new AgeCalculateRequestDTO
            {
                BirthDate = DateTime.Now.AddYears(-1).ToShortDateString()
            };

            var objectResult =
                (ObjectResult)_ageController.CalculateWithNumericResponse(ageCalculatedRequestDTO);
            var envelopeResponse = (Envelope <AgeCalculateResponseDTO>)objectResult.Value;

            Assert.Null(envelopeResponse.ErrorMessage);
            Assert.Equal(366, envelopeResponse.Result.AgeInDays);
            Assert.Equal(12, envelopeResponse.Result.AgeInMonths);
            Assert.Equal(1, envelopeResponse.Result.AgeInYears);
        }
        public (bool IsValid, string Message) Validate(AgeCalculateRequestDTO ageCalculateRequestDTO)
        {
            if (ageCalculateRequestDTO is null)
            {
                return(false, AgeValidationErrorMessagesConsts.NULL_REFERENCE);
            }

            var isAnValidDateTime = DateTime.TryParse(ageCalculateRequestDTO.BirthDate, out var convertedBirthDate);

            if (isAnValidDateTime == false)
            {
                return(false, AgeValidationErrorMessagesConsts.INVALID_DATE);
            }

            return(true, string.Empty);
        }
        public IActionResult CalculateWithNumericResponse(AgeCalculateRequestDTO ageCalculateRequestDTO)
        {
            var validationResult = _commonValidationAgeCalculateRequestDTO.Validate(ageCalculateRequestDTO);

            if (validationResult.IsValid == false)
            {
                return(Error(validationResult.Message));
            }

            DateTime.TryParse(ageCalculateRequestDTO.BirthDate, out var convertedBirthDate);

            var ageCalculateResponseDTO = new AgeCalculateResponseDTO
            {
                AgeInDays   = DateTimeUtils.GetTotalCompletedDaysSinceBirthdate(convertedBirthDate),
                AgeInMonths = DateTimeUtils.GetTotalCompletedMonthsSinceBirthdate(convertedBirthDate),
                AgeInYears  = DateTimeUtils.GetTotalCompletedYearsSinceBirthdate(convertedBirthDate)
            };

            return(Ok(ageCalculateResponseDTO));
        }