public void FilteringByNameReturnsSubsetOfResults()
        {
            List<Customer> customers = TestHelpers.GetSampleCustomersList();
            MainViewModel viewModel = new MainViewModel();

            // CustomersBuckup is private field to keep data unchanged
            // and should not be exposed.
            // Use reflection for the purpose of the test.
            System.Reflection.FieldInfo fieldInfo = typeof(MainViewModel).GetField("customersBuckup",
                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

            Assert.IsNotNull(fieldInfo);

            fieldInfo.SetValue(viewModel, customers);

            viewModel.Customers = customers;
            viewModel.Filter = "a";

            List<Customer> customersWithAInName = customers.Where(c => c.Name.Contains("a")).ToList();
            CollectionAssert.AreEquivalent(customersWithAInName, viewModel.Customers.ToList());
            CollectionAssert.IsSubsetOf(viewModel.Customers.ToList(), customers);

            // sanity check if the result is not always true
            CollectionAssert.IsNotSubsetOf(customers, viewModel.Customers.ToList());

            // empty fielter should bring back all the customers
            viewModel.Filter = string.Empty;
            CollectionAssert.AreEquivalent(viewModel.Customers.ToList(), customers);
        }
 public void IfUserListEmptyShowStatsCommandDoesNotExecute()
 {
     Customer customer = new Customer();
     MainViewModel viewModel = new MainViewModel();
     Assert.IsFalse(viewModel.ShowStatsCommand.CanExecute(null));
     viewModel.Customers = new List<Customer> { customer };
     Assert.IsTrue(viewModel.ShowStatsCommand.CanExecute(null));
 }
 public void IfNoUserIsSelectedUpdateCommandDoesNotExecute()
 {
     Customer customer = new Customer();
     MainViewModel viewModel = new MainViewModel();
     Assert.IsFalse(viewModel.UpdateCustomerCommand.CanExecute(null));
     viewModel.SelectedCustomer = customer;
     Assert.IsTrue(viewModel.UpdateCustomerCommand.CanExecute(null));
 }
 /// <summary>
 /// Creates an instance of the DisplayModificationHistoryCommand.
 /// </summary>
 /// <param name="mainViewModel">A view model on which command's method will be invoked.</param>
 public DisplayModificationHistoryCommand(MainViewModel mainViewModel)
 {
     this.mainViewModel = mainViewModel;
 }
 /// <summary>
 /// Creates an instance of the UpdateCustomerCommand.
 /// </summary>
 /// <param name="mainViewModel">A view model on which command's method will be invoked.</param>
 public UpdateCustomerCommand(MainViewModel mainViewModel)
 {
     this.mainViewModel = mainViewModel;
 }
 public void SettingCustomerToMainViewModelTriggersPropertyChanged()
 {
     Customer customer = new Customer();
     MainViewModel viewModel = new MainViewModel();
     viewModel.PropertyChanged += (s, e) =>
     {
         Assert.AreEqual("SelectedCustomer", e.PropertyName);
         Assert.AreEqual(customer, viewModel.SelectedCustomer);
     };
     viewModel.SelectedCustomer = customer;
 }
 public void SettingCustomersToMainViewModelTriggersPropertyChanged()
 {
     List<Customer> customers = new List<Customer>()
     {
         new Customer() {Name="A"},
         new Customer() {Name="B"},
         new Customer() {Name="C"}
     };
     MainViewModel viewModel = new MainViewModel();
     viewModel.PropertyChanged += (s, e) =>
     {
         Assert.AreEqual("Customers", e.PropertyName);
         Assert.AreEqual(customers, viewModel.Customers);
     };
     viewModel.Customers = customers;
 }
 /// <summary>
 /// Creates an instance of the ShowStatsCommand.
 /// </summary>
 /// <param name="mainViewModel">A view model on which command's method will be invoked.</param>
 public ShowStatsCommand(MainViewModel mainViewModel)
 {
     this.mainViewModel = mainViewModel;
 }
 /// <summary>
 /// Creates an instance of the GetDataCommand.
 /// </summary>
 /// <param name="viewModel">A view model on which command's method will be invoked.</param>
 internal GetDataCommand(MainViewModel viewModel)
 {
     this.customerViewModel = viewModel;
 }
 /// <summary>
 /// Creates an instance of the AddCustomerCommand.
 /// </summary>
 /// <param name="mainViewModel">A view model on which command's method will be invoked.</param>
 public AddCustomerCommand(MainViewModel mainViewModel)
 {
     this.mainViewModel = mainViewModel;
 }