У меня действительно интересное поведение. У меня есть два теста ниже:
[Fact]
public void Ctor_WhenNeverIsTrueAndAfterOcurrenceIsNotNull_HasError()
{
// arrange
var reccurenceEnd = new RecurrenceEnd()
{
IsNever = true,
AfterOccurence = 1
};
// act
var validator = GetValidator();
// assert
validator.ShouldHaveValidationErrorFor(p => p.AfterOccurence, reccurenceEnd);
}
[Fact]
public void Ctor_WhenNeverIsFalseAndAfterOccurenceIsNullAndByDateIsNull_HasError()
{
// arrange
var reccurenceEnd = new RecurrenceEnd()
{
IsNever = false,
AfterOccurence = null,
ByDate = null
};
// act
var validator = GetValidator();
// assert
validator.ShouldHaveValidationErrorFor(p => p.AfterOccurence, reccurenceEnd);
}
На моем валидаторе, если у меня есть следующее, первый тест не пройден, а второй проходит. Если я изменю порядок правил, первый тест пройден, а второй не пройден.
RuleFor(dto => dto.AfterOccurence)
.Cascade(CascadeMode.StopOnFirstFailure)
.Null()
.When(p => p.IsNever == true)
.NotEmpty()
.When(p => p.IsNever == false && p.ByDate == null);
Если я изменю свой валидатор на следующий, оба теста пройдут.
RuleFor(dto => dto.AfterOccurence)
.Null()
.When(p => p.IsNever);
RuleFor(dto => dto.AfterOccurence)
.NotEmpty()
.When(p => p.IsNever == false && p.ByDate == null);
Я неправильно настраиваюсь?