public void UiDateTimeNotInPastValidationTestPasses()
        {
            var model = new ValidationTestUiDateTimeRangeModel
            {
                BasicDateRange = new UiDateTimeRangeModel(_timeZoneName)
                {
                    StartDateTime = new UiDateTimeModel(_timeZoneName)
                    {
                        LocalDate = "1/14/2100"
                    }
                }
            };
            var testContext = new ValidationContext(model, null, null)
            {
                DisplayName = "BasicDateRange"
            };
            var attribute = new UiDateTimeNotInPastValidation("StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);
            }
            catch (Exception ex)
            {
                Assert.Fail("Unexpected Exception thrown: " + ex.Message);
            }
        }
        public void UiDateTimeNotInFutureValidationTestFails()
        {
            var model = new ValidationTestUiDateTimeRangeModel
            {
                BasicDateRange = new UiDateTimeRangeModel(_timeZoneName)
                {
                    StartDateTime = new UiDateTimeModel(_timeZoneName)
                    {
                        LocalDate = "1/14/2100"
                    }
                }
            };
            var testContext = new ValidationContext(model, null, null)
            {
                DisplayName = "BasicDateRange"
            };
            var attribute = new UiDateTimeNotInFutureValidation("StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);
                Assert.Fail("Exception not thrown");
            }
            catch (ValidationException ex)
            {
                Assert.AreEqual("'Date' must be in the past.", ex.Message);
            }
            catch (Exception)
            {
                Assert.Fail("Unexpected Exception thrown");
            }
        }
        public void UiDateTimeGreaterThanDateAttributeOrNullValidationTestFails()
        {
            _timeZoneName = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").StandardName;
            var model = new ValidationTestUiDateTimeRangeModel
            {
                BasicDateRange = new UiDateTimeRangeModel(_timeZoneName)
                {
                    StartDateTime = new UiDateTimeModel(_timeZoneName)
                    {
                        LocalDate = "1/14/2012"
                    },
                    EndDateTime = new UiDateTimeModel(_timeZoneName)
                    {
                        LocalDate = "5/22/2000"
                    }
                }
            };
            var testContext = new ValidationContext(model, null, null)
            {
                DisplayName = "BasicDateRange"
            };
            var attribute = new UiDateTimeGreaterThanDateAttributeOrNullValidation("EndDateTime.LocalDate", "StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);
                Assert.Fail("Exception not thrown");
            }
            catch (ValidationException ex)
            {
                Assert.AreEqual("'Date' must be greater than 'Date'", ex.Message);
            }
            catch (Exception)
            {
                Assert.Fail("Unexpected Exception thrown");
            }
        }
        public void UiDateTimeGreaterThanDateAttributeOrNullValidationEqualDatesTestPasses()
        {
            var model = new ValidationTestUiDateTimeRangeModel
                                                {
                                                    BasicDateRange = new UiDateTimeRangeModel(_timeZoneName)
                                                                                {
                                                                                    StartDateTime = new UiDateTimeModel(_timeZoneName) { LocalDate = "1/14/2012" },
                                                                                    EndDateTime = new UiDateTimeModel(_timeZoneName) { LocalDate = "1/14/2012" }
                                                                                }
                                                };
            var testContext = new ValidationContext(model, null, null) { DisplayName = "BasicDateRange" };
            var attribute = new UiDateTimeGreaterThanDateAttributeOrNullValidation("EndDateTime.LocalDate", "StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);
            }
            catch (Exception ex)
            {
                Assert.Fail("Unexpected Exception thrown: " + ex.Message);
            }
        }
        public void UiDateTimeNotInPastValidationTestFails()
        {
            var model = new ValidationTestUiDateTimeRangeModel
                                {
                                    BasicDateRange = new UiDateTimeRangeModel(_timeZoneName) { StartDateTime = new UiDateTimeModel(_timeZoneName) { LocalDate = "12/14/2009" } }
                                };
            var testContext = new ValidationContext(model, null, null) {DisplayName = "BasicDateRange"};
            var attribute = new UiDateTimeNotInPastValidation("StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);

                Assert.Fail("Exception not thrown");
            }
            catch (ValidationException ex)
            {
                Assert.AreEqual("'Date' must be in the future.", ex.Message);
            }
            catch(Exception)
            {
                Assert.Fail("Unexpected Exception thrown");
            }
        }
        public void UiDateTimeNotInFutureValidationTestPasses()
        {
            var model = new ValidationTestUiDateTimeRangeModel
                                                {
                                                    BasicDateRange = new UiDateTimeRangeModel(_timeZoneName) { StartDateTime = new UiDateTimeModel(_timeZoneName) { LocalDate = "1/14/1900" } }
                                                };
            var testContext = new ValidationContext(model, null, null) {DisplayName = "BasicDateRange"};
            var attribute = new UiDateTimeNotInFutureValidation("StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);
            }
            catch (Exception ex)
            {
                Assert.Fail("Unexpected Exception thrown: " + ex.Message);
            }
        }
        public void UiDateTimeGreaterThanDateAttributeOrNullValidationTestFails()
        {
            _timeZoneName = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").StandardName;
            var model = new ValidationTestUiDateTimeRangeModel
                                                {
                                                    BasicDateRange = new UiDateTimeRangeModel(_timeZoneName)
                                                                                    {
                                                                                        StartDateTime = new UiDateTimeModel(_timeZoneName) { LocalDate = "1/14/2012" },
                                                                                        EndDateTime = new UiDateTimeModel(_timeZoneName) { LocalDate = "5/22/2000" }
                                                                                    }
                                                };
            var testContext = new ValidationContext(model, null, null) { DisplayName = "BasicDateRange" };
            var attribute = new UiDateTimeGreaterThanDateAttributeOrNullValidation("EndDateTime.LocalDate", "StartDateTime.LocalDate");

            try
            {
                attribute.Validate(model.BasicDateRange.StartDateTime.LocalDate, testContext);
                Assert.Fail("Exception not thrown");
            }
            catch (ValidationException ex)
            {
                Assert.AreEqual("'Date' must be greater than 'Date'", ex.Message);
            }
            catch (Exception)
            {
                Assert.Fail("Unexpected Exception thrown");
            }
        }