public void ItemsAdded_SetsChangeTypeAndNewItemsAndChangedPathToCollection() { var collection = VMCollectionStub.Build(); var newItems = new[] { ViewModelStub.Build() }; var args = ChangeArgs.ItemsAdded(collection, newItems); Assert.AreEqual(ChangeType.AddedToCollection, args.ChangeType); CollectionAssert.AreEqual(newItems, args.NewItems.ToArray()); Assert.IsFalse(args.OldItems.Any()); DomainAssert.AreEqual(Path.Empty.Append(collection), args.ChangedPath); }
public void ItemInserted_CallsNotifyChange() { var insertedItem = CreateItem("Inserted item"); Collection = CreateCollection(insertedItem); HandleItemInserted(insertedItem); AssertChangeArgs( ChangeArgs.ItemsAdded(Collection, newItems: new[] { insertedItem }) ); }
public void ItemSet_CallsNotifyChangeForOldAndNewItem() { var oldItem = CreateItem("Old item"); var newItem = CreateItem("New item"); Collection = CreateCollection(newItem); HandleItemSet(previousItem: oldItem, item: newItem); AssertChangeArgs( ChangeArgs.ItemsRemoved(Collection, oldItems: new[] { oldItem }), ChangeArgs.ItemsAdded(Collection, newItems: new[] { newItem }) ); }
public void HandleChange_WithItemsAddedOrRemovedFromOwnCollection_UpdatesCachedResults() { var owner = new TestVM(); owner.MakePropertiesAndViewModelInvalid(); var expected = owner.GetCurrentlySetupResults(); // F I R S T A D D var firstNewItem = new ViewModelStub { ValidationResult = CreateValidationResult("First new item error") }; var collectionChangeArgs = ChangeArgs .ItemsAdded(VMCollectionStub.Build(), new[] { firstNewItem }) .PrependViewModel(owner); owner.CallHandleChangeWith(collectionChangeArgs); expected.Descenants = firstNewItem.ValidationResult; AssertBehaviorResults(owner, expected); // S E C O N D A D D var secondNewItem = new ViewModelStub { ValidationResult = CreateValidationResult("Second new Item error") }; collectionChangeArgs = ChangeArgs .ItemsAdded(VMCollectionStub.Build(), new[] { secondNewItem }) .PrependViewModel(owner); owner.CallHandleChangeWith(collectionChangeArgs); expected.Descenants = ValidationResult.Join( firstNewItem.ValidationResult, secondNewItem.ValidationResult ); AssertBehaviorResults(owner, expected); // R E M O V AL collectionChangeArgs = ChangeArgs .ItemsRemoved(VMCollectionStub.Build(), new[] { firstNewItem }) .PrependViewModel(owner); owner.CallHandleChangeWith(collectionChangeArgs); expected.Descenants = secondNewItem.ValidationResult; AssertBehaviorResults(owner, expected); }
public void HandleChange_WithItemsAddedOrRemovedFromDescendantCollection_DoesNotUpdateCachedResults() { var owner = new TestVM(); var newItem = new ViewModelStub { ValidationResult = CreateValidationResult("Irrelevant item error") }; var collectionChangeArgs = ChangeArgs .ItemsAdded(VMCollectionStub.Build(), new[] { newItem }) .PrependViewModel(ViewModelStub.Build()) .PrependViewModel(owner); owner.CallHandleChangeWith(collectionChangeArgs); AssertBehaviorResults(owner, ExpectedResults.AllValid); }
public void HandleChange_WithItemsAddedToOwnCollection_UpdatesBehaviorOfParentViewModel() { var parent = new TestVM(); var owner = new TestVM(); parent.MakePropertiesAndViewModelInvalid(); owner.Kernel.Parents.Add(parent); var newItem = new ViewModelStub { ValidationResult = CreateValidationResult("New item error") }; var collectionChangeArgs = ChangeArgs .ItemsAdded(VMCollectionStub.Build(), new[] { newItem }) .PrependViewModel(owner); owner.CallHandleChangeWith(collectionChangeArgs); var expectedParentResult = parent.GetCurrentlySetupResults(); expectedParentResult.Descenants = newItem.ValidationResult; AssertBehaviorResults(parent, expectedParentResult); }
public void NotifyChange_CallsHandlePropertyChangedBehaviorOnlyIfOwnPropertyHasChanged() { var mock = new PropertyChangedMock(); var property = PropertyStub .WithBehaviors(mock) .Build(); var vm = ViewModelStub .WithProperties(property) .Build(); var context = vm.GetContext(); var args = ChangeArgs.PropertyChanged(property, ValueStage.ValidatedValue); context.NotifyChange(args); Assert.IsTrue(mock.PropertyChangedWasCalled); mock.PropertyChangedWasCalled = false; args = ChangeArgs .PropertyChanged(property, ValueStage.ValidatedValue) .PrependViewModel(ViewModelStub.Build()); context.NotifyChange(args); Assert.IsFalse(mock.PropertyChangedWasCalled); mock.PropertyChangedWasCalled = false; args = ChangeArgs.ValidationResultChanged(property, ValueStage.Value); context.NotifyChange(args); Assert.IsFalse(mock.PropertyChangedWasCalled); mock.PropertyChangedWasCalled = false; args = ChangeArgs.ItemsAdded(VMCollectionStub.Build(), new[] { ViewModelStub.Build() }); context.NotifyChange(args); Assert.IsFalse(mock.PropertyChangedWasCalled); }