public void Validate_NewStartDate_WhenNewStartDateIsAfterNewEndDate_ThenIsInvalid()
        {
            var command = new CreateChangeOfPartyRequestCommand
            {
                NewStartDate = DateTime.Today.AddYears(1),
                NewEndDate   = DateTime.Today
            };

            AssertValidationResult(r => r.NewStartDate, command, false);
        }
        public void Validate_NewStartDate_WhenNewStartDateIsAfterCurrentAcademicYearPlusOneYear_ThenIsInvalid()
        {
            var command = new CreateChangeOfPartyRequestCommand
            {
                NewStartDate = _currentAcademicYearEndDate.AddYears(1).AddDays(1),
                NewEndDate   = _currentAcademicYearEndDate.AddYears(2)
            };

            AssertValidationResult(r => r.NewStartDate, command, false);
        }
        public void Validate_NewStartDate_WhenNewStartDateIsBeforeNewEndDate_ThenIsValid()
        {
            var command = new CreateChangeOfPartyRequestCommand
            {
                NewStartDate = DateTime.Today,
                NewEndDate   = DateTime.Today.AddYears(1)
            };

            AssertValidationResult(r => r.NewStartDate, command, true);
        }
        public void Validate_NewPrice_WhenNewStartDateOrNewEndDateHasValue(int?newPrice, bool hasNewStartDate, bool hasNewEndDate, bool isValid)
        {
            var command = new CreateChangeOfPartyRequestCommand
            {
                NewStartDate = hasNewStartDate ? new DateTime(2020, 1, 1) : (DateTime?)null,
                NewEndDate   = hasNewEndDate ? new DateTime(2022, 1, 1) : (DateTime?)null,
                NewPrice     = newPrice
            };

            AssertValidationResult(r => r.NewPrice, command, isValid);
        }
        private void AssertValidationResult <T>(Expression <Func <CreateChangeOfPartyRequestCommand, T> > property, CreateChangeOfPartyRequestCommand command, bool isValid)
        {
            var validator = new CreateChangeOfPartyRequestValidator(_mockAcademicYearDateProvider.Object);

            if (isValid)
            {
                validator.ShouldNotHaveValidationErrorFor(property, command);
            }
            else
            {
                validator.ShouldHaveValidationErrorFor(property, command);
            }
        }