public void ShouldSupportMinimalObservableValidation() { var stream = new Subject <IValidationState>(); var arguments = new List <IValidationState>(); var component = new ObservableValidation <TestViewModel, bool>(stream); component.ValidationStatusChange.Subscribe(arguments.Add); stream.OnNext(ValidationState.Valid); Assert.True(component.IsValid); Assert.Empty(component.Text !.ToSingleLine()); Assert.Single(arguments); Assert.True(arguments[0].IsValid); Assert.Empty(arguments[0].Text.ToSingleLine()); const string errorMessage = "Errors exist."; stream.OnNext(new ValidationState(false, errorMessage)); Assert.False(component.IsValid); Assert.Equal(errorMessage, component.Text.ToSingleLine()); Assert.Equal(2, arguments.Count); Assert.False(arguments[1].IsValid); Assert.Equal(errorMessage, arguments[1].Text.ToSingleLine()); }
public void DisposeShouldStopTrackingThePropertyValidationObservable() { var validation = new ObservableValidation <TestViewModel, bool, string>( _validModel, state => state.Name, _validState, validity => validity, "broken"); _validState.OnNext(true); Assert.True(validation.IsValid); _validState.OnNext(false); Assert.False(validation.IsValid); validation.Dispose(); _validState.OnNext(true); _validState.OnNext(false); _validState.OnNext(true); Assert.False(validation.IsValid); }
public void InitialValidStateIsCorrectTest() { _validState.OnNext(true); var validation = new ObservableValidation <TestViewModel, bool>( _validModel, _validState, valid => valid, "broken"); Assert.True(validation.IsValid); }
public void InitialValidStateOfPropertyValidationIsCorrectTest() { _validState.OnNext(true); var propertyValidation = new ObservableValidation <TestViewModel, bool, string>( _validModel, state => state.Name, _validState, valid => valid, "broken"); Assert.True(propertyValidation.IsValid); }
public void ObservableToInvalidTest() { var validation = new ObservableValidation <TestViewModel, bool>( _validModel, _validState, valid => valid, "broken"); _validState.OnNext(false); _validState.OnNext(true); _validState.OnNext(false); Assert.False(validation.IsValid); Assert.Equal("broken", validation.Text?.ToSingleLine()); }
public void ObservableToInvalidOfPropertyValidationTest() { var propertyValidation = new ObservableValidation <TestViewModel, bool, string>( _validModel, state => state.Name, _validState, valid => valid, "broken"); _validState.OnNext(false); _validState.OnNext(true); _validState.OnNext(false); Assert.False(propertyValidation.IsValid); Assert.Equal("broken", propertyValidation.Text?.ToSingleLine()); }
public void ShouldResolveTypedProperties() { var viewModel = new TestViewModel { Name = string.Empty }; IPropertyValidationComponent component = new ObservableValidation <TestViewModel, string, string>( viewModel, model => model.Name, viewModel.WhenAnyValue(x => x.Name), state => !string.IsNullOrWhiteSpace(state), "Name shouldn't be empty."); Assert.True(component.ContainsProperty <TestViewModel, string>(model => model.Name)); Assert.True(component.ContainsProperty <TestViewModel, string>(model => model.Name, true)); Assert.False(component.ContainsProperty <TestViewModel, string>(model => model.Name2)); Assert.False(component.ContainsProperty <TestViewModel, string>(model => model.Name2, true)); Assert.Throws <ArgumentNullException>(() => component.ContainsProperty <TestViewModel, string>(null !)); }