public void When_ValidParameters_Then_ReturnDate()
            {
                var result = ValidatorExtensions.ConstructDate("01", "02", "2021");

                result.Should().NotBeNull();
                result.Should().HaveValue();
                result.Should().HaveDay(1);
                result.Should().HaveMonth(2);
                result.Should().HaveYear(2021);
            }
        public SetSecondaryEpaoEffectiveToDateViewModelValidator()
        {
            RuleFor(vm => vm).Custom((vm, context) =>
            {
                if (vm.Day == null && vm.Month == null && vm.Year == null)
                {
                    context.AddFailure("Date", "Enter an Effective to date");
                }
                else
                {
                    int.TryParse(vm.Day, out var day);
                    int.TryParse(vm.Month, out var month);
                    int.TryParse(vm.Year, out var year);

                    if (day == 0)
                    {
                        context.AddFailure("Day", "Effective to date must include a day");
                    }

                    if (month == 0)
                    {
                        context.AddFailure("Month", "Effective to date must include a month");
                    }

                    if (year == 0)
                    {
                        context.AddFailure("Year", "Effective to date must include a year");
                    }

                    if (day != 0 && month != 0 && year != 0)
                    {
                        var date = ValidatorExtensions.ConstructDate(vm.Day, vm.Month, vm.Year);

                        if (date == null)
                        {
                            context.AddFailure("Date", "Effective to date must be a real date");
                        }
                        else if (date < DateTime.Now.Date)
                        {
                            context.AddFailure("Date", "Effective to date must be in the future");
                        }
                    }
                }
            });
        }
        public RegisterEditOrganisationStandardViewModelValidator(IOrganisationsApiClient apiClient,
                                                                  IRegisterValidator registerValidator)
        {
            _apiClient         = apiClient;
            _registerValidator = registerValidator;
            var errorInEffectiveFrom = false;

            RuleFor(vm => vm).Custom((vm, context) =>
            {
                var validationResultEffectiveFrom = registerValidator.CheckDateIsEmptyOrValid(vm.EffectiveFromDay,
                                                                                              vm.EffectiveFromMonth,
                                                                                              vm.EffectiveFromYear, "EffectiveFromDay",
                                                                                              "EffectiveFromMonth", "EffectiveFromYear", "EffectiveFrom", "Effective From");

                errorInEffectiveFrom = validationResultEffectiveFrom.Errors.Count > 0;

                var validationResultEffectiveTo = registerValidator.CheckDateIsEmptyOrValid(vm.EffectiveToDay,
                                                                                            vm.EffectiveToMonth,
                                                                                            vm.EffectiveToYear, "EffectiveToDay",
                                                                                            "EffectiveToMonth", "EffectiveToYear", "EffectiveTo", "Effective To");

                vm.EffectiveFrom = ValidatorExtensions.ConstructDate(vm.EffectiveFromDay, vm.EffectiveFromMonth, vm.EffectiveFromYear);
                vm.EffectiveTo   = ValidatorExtensions.ConstructDate(vm.EffectiveToDay, vm.EffectiveToMonth, vm.EffectiveToYear);

                CreateFailuresInContext(validationResultEffectiveFrom.Errors, context);
                CreateFailuresInContext(validationResultEffectiveTo.Errors, context);

                var deliveryAreas             = vm.DeliveryAreas ?? new List <int>();
                var validationResultExternals = _apiClient
                                                .ValidateUpdateOrganisationStandard(vm.OrganisationId, vm.OrganisationStandardId, vm.StandardId, vm.EffectiveFrom,
                                                                                    vm.EffectiveTo, vm.ContactId, deliveryAreas, vm.ActionChoice, vm.Status, vm.OrganisationStatus).Result;
                if (validationResultExternals.IsValid)
                {
                    return;
                }
                foreach (var error in validationResultExternals.Errors)
                {
                    if (errorInEffectiveFrom == false || error.Field != "EffectiveFrom")
                    {
                        context.AddFailure(error.Field, error.ErrorMessage);
                    }
                }
            });
        }
            public void When_InvalidParameters_Then_ReturnNull()
            {
                var result = ValidatorExtensions.ConstructDate("31", "02", "2021");

                result.Should().BeNull();
            }