public async Task POST_ReviewPageAnswers_When_Invalid_does_not_submit_ModeratorPageReviewOutcome()
        {
            int    sequenceNumber = 4;
            int    sectionNumber  = 2;
            string pageId         = "4200";

            var viewModel = new ModeratorReviewAnswersViewModel
            {
                ApplicationId  = _applicationId,
                SequenceNumber = sequenceNumber,
                SectionNumber  = sectionNumber,
                PageId         = pageId,
                Status         = ModeratorPageReviewStatus.Pass,
                OptionPassText = "test"
            };

            var command = new SubmitModeratorPageAnswerCommand(viewModel);

            _sectionReviewOrchestrator.Setup(x => x.GetReviewAnswersViewModel(It.IsAny <GetReviewAnswersRequest>())).ReturnsAsync(viewModel);

            var error = new ValidationErrorDetail {
                Field = "Status", ErrorMessage = "Error"
            };
            var validationResponse = new ValidationResponse {
                Errors = new List <ValidationErrorDetail> {
                    error
                }
            };

            _moderatorPageValidator.Setup(x => x.Validate(command)).ReturnsAsync(validationResponse);

            // act
            var result = await _controller.ReviewPageAnswers(_applicationId, sequenceNumber, sectionNumber, pageId, command) as ViewResult;

            var actualViewModel = result?.Model as ReviewAnswersViewModel;

            // assert
            Assert.That(result, Is.Not.Null);
            Assert.That(actualViewModel, Is.Not.Null);
            Assert.That(actualViewModel, Is.SameAs(viewModel));

            _moderationApiClient.Verify(x => x.SubmitModeratorPageReviewOutcome(command.ApplicationId,
                                                                                command.SequenceNumber,
                                                                                command.SectionNumber,
                                                                                command.PageId,
                                                                                _controller.User.UserId(),
                                                                                _controller.User.UserDisplayName(),
                                                                                command.Status,
                                                                                command.ReviewComment), Times.Never);
        }
        public static List <ValidationErrorDetail> ValidateDateOfBirth(string month, string year, string fieldPrefix)
        {
            var dobMonth = new Answer {
                Value = month
            };
            var dobYear = new Answer {
                Value = year
            };

            var errorMessages = new List <ValidationErrorDetail>();

            if (dobMonth == null && dobYear == null)
            {
                var errorMessage = new ValidationErrorDetail
                {
                    Field        = fieldPrefix + "Month",
                    ErrorMessage = MissingDateOfBirthErrorMessage
                };
                errorMessages.Add(errorMessage);
            }
            else
            {
                if (dobMonth == null)
                {
                    var errorMessage = new ValidationErrorDetail
                    {
                        Field        = fieldPrefix + "Month",
                        ErrorMessage = InvalidIncompleteDateOfBirthErrorMessage
                    };
                    errorMessages.Add(errorMessage);
                }

                if (dobYear == null)
                {
                    var errorMessage = new ValidationErrorDetail
                    {
                        Field        = fieldPrefix + "Year",
                        ErrorMessage = InvalidIncompleteDateOfBirthErrorMessage
                    };
                    errorMessages.Add(errorMessage);
                }

                if (dobMonth != null)
                {
                    int monthValue = 0;
                    int.TryParse(dobMonth.Value, out monthValue);
                    if (monthValue < 1 || monthValue > 12)
                    {
                        var errorMessage = new ValidationErrorDetail
                        {
                            Field        = fieldPrefix + "Month",
                            ErrorMessage = InvalidIncompleteDateOfBirthErrorMessage
                        };
                        errorMessages.Add(errorMessage);
                        return(errorMessages);
                    }
                }
                if (dobYear != null)
                {
                    int yearValue = 0;
                    int.TryParse(dobYear.Value, out yearValue);
                    if (yearValue <= 0)
                    {
                        var errorMessage = new ValidationErrorDetail
                        {
                            Field        = fieldPrefix + "Year",
                            ErrorMessage = InvalidIncompleteDateOfBirthErrorMessage
                        };
                        errorMessages.Add(errorMessage);
                        return(errorMessages);
                    }
                    if (yearValue > 0 && yearValue < 1000)
                    {
                        var errorMessage = new ValidationErrorDetail
                        {
                            Field        = fieldPrefix + "Year",
                            ErrorMessage = DateOfBirthYearLengthErrorMessage
                        };
                        errorMessages.Add(errorMessage);
                        return(errorMessages);
                    }
                    if (yearValue > DateTime.Now.Year)
                    {
                        var errorMessage = new ValidationErrorDetail
                        {
                            Field        = fieldPrefix + "Year",
                            ErrorMessage = DateOfBirthInFutureErrorMessage
                        };
                        errorMessages.Add(errorMessage);
                        return(errorMessages);
                    }
                }
                if (dobMonth != null && dobYear != null)
                {
                    int monthValue = 0;
                    int.TryParse(dobMonth.Value, out monthValue);
                    int yearValue = 0;
                    int.TryParse(dobYear.Value, out yearValue);
                    if (monthValue == DateTime.Now.Month && yearValue == DateTime.Now.Year)
                    {
                        var errorMessage = new ValidationErrorDetail
                        {
                            Field        = fieldPrefix + "Month",
                            ErrorMessage = DateOfBirthInFutureErrorMessage
                        };
                        errorMessages.Add(errorMessage);
                    }
                    else if (monthValue > DateTime.Now.Month && yearValue == DateTime.Now.Year || monthValue == 1 && yearValue == (DateTime.Now.Year + 1))
                    {
                        var errorMessage = new ValidationErrorDetail
                        {
                            Field        = fieldPrefix + "Month",
                            ErrorMessage = DateOfBirthInFutureErrorMessage
                        };
                        errorMessages.Add(errorMessage);
                    }
                }
            }

            return(errorMessages);
        }