private static CustomerVMDescriptor CreateDescriptor( RefreshControllerBehaviorMock refreshControllerBehavior, bool useMockBehaviors ) { return(VMDescriptorBuilder .OfType <CustomerVMDescriptor>() .For <CustomerVM>() .WithProperties((d, c) => { var b = c.GetPropertyBuilder(); d.Name = b.Property.Of <string>(); d.Address = b.Property.Of <string>(); d.Rating = b.Property.Of <int>(); }) .WithValidators(b => { b.Check(x => x.Name) .Custom(args => args.Owner.Results.PerformValidation(args)); b.Check(x => x.Rating) .Custom(args => args.Owner.Results.PerformValidation(args)); }) .WithBehaviors(b => { if (useMockBehaviors) { if (refreshControllerBehavior != null) { b.AddBehavior(refreshControllerBehavior); } } }) .Build()); }
public void DependencyOnTargetPropertiesOfDescendantCollection_RefreshesAllPropertiesOfAllViewModelsInCollection() { var refreshMock = new RefreshControllerBehaviorMock(); var projectVMDescriptor = ProjectVM.CreateDescriptor(refreshMock, true); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Properties(x => x.Name) .Refresh .Descendant(x => x.Projects) .Properties(x => x.Title, x => x.Customer), projectVMDescriptor ); var projectVM1 = CreateProjectVM(); var projectVM2 = CreateProjectVM(); employeeVM.Projects.Add(projectVM1); employeeVM.Projects.Add(projectVM2); employeeVM.Name = "TriggerChange"; var expectedRefreshedProperties = new IVMPropertyDescriptor[] { projectVM1.Descriptor.Title, projectVM1.Descriptor.Customer, projectVM1.Descriptor.Title, projectVM1.Descriptor.Customer, }; var refreshedProperties = refreshMock.RefreshedProperties; CollectionAssert.AreEquivalent(expectedRefreshedProperties, refreshedProperties); }
internal static ProjectVMDescriptor CreateDescriptor( RefreshControllerBehaviorMock refreshControllerBehavior, bool useMockBehaviors ) { return(VMDescriptorBuilder .OfType <ProjectVMDescriptor>() .For <ProjectVM>() .WithProperties((d, c) => { var b = c.GetPropertyBuilder(); d.Title = b.Property.Of <string>(); d.Customer = b.VM.Of <CustomerVM>(); }) .WithValidators(b => { b.EnableParentValidation(x => x.Title); b.Check(x => x.Title) .Custom(args => args.Owner.Results.PerformValidation(args)); b.Check(x => x.Customer) .Custom(args => args.Owner.Results.PerformValidation(args)); }) .WithBehaviors(b => { if (useMockBehaviors) { if (refreshControllerBehavior != null) { b.AddBehavior(refreshControllerBehavior); } } }) .Build()); }
public void DependencyOnTargetPropertiesOfDescendantOfDescendantCollection_RefreshesSpecifiedPropertiesDescendantsInCollection() { var refreshMock = new RefreshControllerBehaviorMock(); var projectVMDescriptor = ProjectVM.CreateDescriptor(refreshMock, true); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Properties(x => x.Name) .Refresh .Descendant(x => x.Projects) .Descendant(x => x.Customer) .Properties(x => x.Name, x => x.Rating), projectVMDescriptor ); var projectVM1 = CreateProjectVM(); var projectVM2 = CreateProjectVM(); employeeVM.Projects.Add(projectVM1); employeeVM.Projects.Add(projectVM2); var customerVM1 = CreateCustomerVM(); customerVM1.Name = "aValidName"; var customerVM2 = CreateCustomerVM(); customerVM2.Name = "aValidName"; projectVM1.Customer = customerVM1; projectVM2.Customer = customerVM2; employeeVM.Name = "TriggerChange"; var expectedRefreshedPropertiesOnCustomer1 = new IVMPropertyDescriptor[] { customerVM1.Descriptor.Name, customerVM1.Descriptor.Rating }; var expectedRefreshedPropertiesOnCustomer2 = new IVMPropertyDescriptor[] { customerVM2.Descriptor.Name, customerVM2.Descriptor.Rating }; var refreshedPropertiesOnCustomer1 = customerVM1.RefreshControllerBehaviorMock.RefreshedProperties; var refreshedPropertiesOnCustomer2 = customerVM2.RefreshControllerBehaviorMock.RefreshedProperties; CollectionAssert.AreEquivalent( expectedRefreshedPropertiesOnCustomer1, refreshedPropertiesOnCustomer1 ); CollectionAssert.AreEquivalent( expectedRefreshedPropertiesOnCustomer2, refreshedPropertiesOnCustomer2 ); }
private EmployeeVM CreateEmployeeVM( Action <IVMDependencyBuilder <EmployeeVM, EmployeeVMDescriptor> > dependencyConfigurationAction, ProjectVMDescriptor projectVMDescriptor = null, RefreshControllerBehaviorMock refreshControllerMock = null ) { refreshControllerMock = refreshControllerMock ?? new RefreshControllerBehaviorMock(); projectVMDescriptor = projectVMDescriptor ?? ProjectVM.CreateDescriptor(null, false); return(new EmployeeVM(dependencyConfigurationAction, projectVMDescriptor, true, Results, refreshControllerMock)); }
private CustomerVM( RefreshControllerBehaviorMock refreshControllerBehavior, bool useMockBehaviors) : base( CreateDescriptor( refreshControllerBehavior, useMockBehaviors ) ) { RefreshControllerBehaviorMock = refreshControllerBehavior; }
[Ignore] // TODO: This currently doesn't work, because the property that has changed is never refreshed. public void DependencyTargetingSelf_RefreshesSelf() { var refreshMock = new RefreshControllerBehaviorMock(); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Self .OrAnyDescendant .Refresh .Self(), refreshControllerMock: refreshMock ); employeeVM.Name = "TriggerChange"; CollectionAssert.AreEquivalent(new[] { employeeVM }, refreshMock.RefreshedViewModels); }
public EmployeeVM( Action <IVMDependencyBuilder <EmployeeVM, EmployeeVMDescriptor> > dependencyConfigurationAction, ProjectVMDescriptor projectVMDescriptor, bool useMockBehaviors, ValidatorMockConfigurationFluent results, RefreshControllerBehaviorMock refreshControllerBehavior ) : base( CreateDescriptor( dependencyConfigurationAction, projectVMDescriptor, refreshControllerBehavior, useMockBehaviors ) ) { RefreshControllerBehaviorMock = refreshControllerBehavior; Results = results; }
private static EmployeeVMDescriptor CreateDescriptor( Action <IVMDependencyBuilder <EmployeeVM, EmployeeVMDescriptor> > dependencyConfigurationAction, ProjectVMDescriptor projectVMDescriptor, RefreshControllerBehaviorMock refreshControllerBehavior, bool useMockBehaviors ) { return(VMDescriptorBuilder .OfType <EmployeeVMDescriptor>() .For <EmployeeVM>() .WithProperties((d, c) => { var b = c.GetPropertyBuilder(); d.Name = b.Property.Of <string>(); d.Projects = b.Collection.Of <ProjectVM>(projectVMDescriptor); d.SelectedProject = b.VM.Of <ProjectVM>(); }) .WithValidators(b => { b.Check(x => x.Name) .Custom((args) => { if (args.Owner.InvalidateNameProperty) { args.AddError("Test triggered failure"); } }); b.Check(x => x.SelectedProject) .Custom(args => args.Owner.Results.PerformValidation(args)); }) .WithDependencies( dependencyConfigurationAction ) .WithBehaviors(b => { if (useMockBehaviors) { if (refreshControllerBehavior != null) { b.AddBehavior(refreshControllerBehavior); } } }) .Build()); }
public void DependencyOnTargetDescendantOfDescendantCollection_RefreshesAllViewModelsInCollection() { var refreshMock = new RefreshControllerBehaviorMock(); var projectVMDescriptor = ProjectVM.CreateDescriptor(refreshMock, true); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Properties(x => x.Name) .Refresh .Descendant(x => x.Projects) .Descendant(x => x.Customer), projectVMDescriptor ); var projectVM1 = CreateProjectVM(); var projectVM2 = CreateProjectVM(); employeeVM.Projects.Add(projectVM1); employeeVM.Projects.Add(projectVM2); var customerVM1 = CreateCustomerVM(); customerVM1.Name = "aValidName"; var customerVM2 = CreateCustomerVM(); customerVM2.Name = "aValidName"; projectVM1.Customer = customerVM1; projectVM2.Customer = customerVM2; employeeVM.Name = "TriggerChange"; var expectedRefreshedCustomers = employeeVM.Projects.Select(x => x.Customer).ToArray(); var refreshedViewModelsOnCustomer1 = customerVM1.RefreshControllerBehaviorMock.RefreshedViewModels; var refreshedViewModelsOnCustomer2 = customerVM2.RefreshControllerBehaviorMock.RefreshedViewModels; Assert.IsTrue(refreshedViewModelsOnCustomer1.Contains(customerVM1)); Assert.IsTrue(refreshedViewModelsOnCustomer2.Contains(customerVM2)); }
public void DependencyOnPropertyTarget_RefreshesProperty() { var refreshControllerBehaviorMock = new RefreshControllerBehaviorMock(); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Properties(x => x.SelectedProject) .Refresh .Properties(x => x.Name) ); var changeTrigger = CreateProjectVM(); employeeVM.SelectedProject = changeTrigger; var refreshedProperties = employeeVM.RefreshControllerBehaviorMock.RefreshedProperties; var expectedRefreshedProperty = employeeVM.Descriptor.Name; Assert.IsTrue(refreshedProperties.Contains(expectedRefreshedProperty)); }
public void DependencyOnViewModelTarget_RefreshesViewModel() { var refreshControllerBehaviorMock = new RefreshControllerBehaviorMock(); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Properties(x => x.Name) .Refresh .Properties(x => x.SelectedProject) ); var projectVM = CreateProjectVM(); employeeVM.SelectedProject = projectVM; employeeVM.Name = "TriggerChange"; var refreshedViewModels = projectVM.RefreshControllerBehaviorMock.RefreshedViewModels; Assert.IsTrue(refreshedViewModels.Contains(projectVM)); }
public void DependencyOnCollectionTarget_RefreshesAllViewModelsInCollection() { var refreshMock = new RefreshControllerBehaviorMock(); var projectVMDescriptor = ProjectVM.CreateDescriptor(refreshMock, true); var employeeVM = CreateEmployeeVM( b => b .OnChangeOf .Properties(x => x.Name) .Refresh .Descendant(x => x.Projects), projectVMDescriptor ); var projectVM1 = CreateProjectVM(); var projectVM2 = CreateProjectVM(); employeeVM.Projects.Add(projectVM1); employeeVM.Projects.Add(projectVM2); employeeVM.Name = "TriggerChange"; CollectionAssert.AreEquivalent(employeeVM.Projects, refreshMock.RefreshedViewModels); }