public void CancelingCurrencyChangeIsRespectedOnCommitEdit()
        {
            City first = new City { Name = "1" };
            City second = new City { Name = "2" };
            MockEntityContainer ec = new MockEntityContainer();
            ec.CreateSet<City>(EntitySetOperations.All);

            IPagedEntityList pagedList = new MockPagedEntityList(ec.GetEntitySet<City>(), null);
            PagedEntityCollectionView view = new PagedEntityCollectionView(pagedList, () => { });

            view.Add(first);
            view.Add(second);

            bool canChangeCurrency = true;
            CurrentChangingEventHandler changingHandler = (sender, e) =>
            {
                if (!canChangeCurrency)
                {
                    Assert.IsTrue(e.IsCancelable,
                        "Event should be cancelable when commiting an edit.");
                    e.Cancel = true;
                }
            };
            EventHandler changedHandler = (sender, e) =>
            {
                if (!canChangeCurrency)
                {
                    Assert.Fail("Currency changes should only occur when canChangeCurrency is true.");
                }
            };
            view.CurrentChanging += changingHandler;
            view.CurrentChanged += changedHandler;

            view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

            Assert.IsTrue(view.MoveCurrentTo(second),
                "We should be able to move current to the second item.");

            // Commit an edit but do not allow the currency to change
            canChangeCurrency = false;
            view.EditItem(second);
            second.Name = "0";
            view.CommitEdit();

            Assert.AreEqual(view[1], second,
                "The edited item should not have moved.");

            // Commit an edit and this time allow the currency to change
            canChangeCurrency = true;
            view.EditItem(second);
            second.Name = "00";
            view.CommitEdit();

            Assert.AreEqual(view[0], second,
                "The edited item should have moved to the first position in the view.");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets a <see cref="DomainDataSourceView"/> that uses a mocked <see cref="PagedEntityList"/>
        /// as its source, configured to support the operations specified, and using the specified
        /// <paramref name="refreshCallback"/> as the <see cref="Action"/> to invoke when a
        /// <see cref="DomainDataSourceView.Refresh"/> is triggered.
        /// </summary>
        /// <param name="operationsSupported">The operations to be supported on the mock <see cref="EntitySet"/>.</param>
        /// <param name="refreshCallback">The <see cref="Action"/> to call when a refresh occurs.</param>
        /// <returns>The configured <see cref="DomainDataSourceView"/> that uses mocks.</returns>
        private static DomainDataSourceView GetConfigurableView(EntitySetOperations operationsSupported, Action refreshCallback)
        {
            MockEntityContainer ec = new MockEntityContainer();

            ec.CreateSet <City>(operationsSupported);

            IPagedEntityList          pagedList = new MockPagedEntityList(ec.GetEntitySet <City>(), null);
            PagedEntityCollectionView ecv       = new PagedEntityCollectionView(pagedList, refreshCallback);

            return(new DomainDataSourceView(ecv));
        }
        public void CancelingCurrencyChangeIsRespectedOnCommitEdit()
        {
            City first = new City {
                Name = "1"
            };
            City second = new City {
                Name = "2"
            };
            MockEntityContainer ec = new MockEntityContainer();

            ec.CreateSet <City>(EntitySetOperations.All);

            IPagedEntityList          pagedList = new MockPagedEntityList(ec.GetEntitySet <City>(), null);
            PagedEntityCollectionView view      = new PagedEntityCollectionView(pagedList, () => { });

            view.Add(first);
            view.Add(second);

            bool canChangeCurrency = true;
            CurrentChangingEventHandler changingHandler = (sender, e) =>
            {
                if (!canChangeCurrency)
                {
                    Assert.IsTrue(e.IsCancelable,
                                  "Event should be cancelable when commiting an edit.");
                    e.Cancel = true;
                }
            };
            EventHandler changedHandler = (sender, e) =>
            {
                if (!canChangeCurrency)
                {
                    Assert.Fail("Currency changes should only occur when canChangeCurrency is true.");
                }
            };

            view.CurrentChanging += changingHandler;
            view.CurrentChanged  += changedHandler;

            view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

            Assert.IsTrue(view.MoveCurrentTo(second),
                          "We should be able to move current to the second item.");

            // Commit an edit but do not allow the currency to change
            canChangeCurrency = false;
            view.EditItem(second);
            second.Name = "0";
            view.CommitEdit();

            Assert.AreEqual(view[1], second,
                            "The edited item should not have moved.");

            // Commit an edit and this time allow the currency to change
            canChangeCurrency = true;
            view.EditItem(second);
            second.Name = "00";
            view.CommitEdit();

            Assert.AreEqual(view[0], second,
                            "The edited item should have moved to the first position in the view.");
        }
        /// <summary>
        /// Gets a <see cref="DomainDataSourceView"/> that uses a mocked <see cref="PagedEntityList"/>
        /// as its source, configured to support the operations specified, and using the specified
        /// <paramref name="refreshCallback"/> as the <see cref="Action"/> to invoke when a
        /// <see cref="DomainDataSourceView.Refresh"/> is triggered.
        /// </summary>
        /// <param name="operationsSupported">The operations to be supported on the mock <see cref="EntitySet"/>.</param>
        /// <param name="refreshCallback">The <see cref="Action"/> to call when a refresh occurs.</param>
        /// <returns>The configured <see cref="DomainDataSourceView"/> that uses mocks.</returns>
        private static DomainDataSourceView GetConfigurableView(EntitySetOperations operationsSupported, Action refreshCallback)
        {
            MockEntityContainer ec = new MockEntityContainer();
            ec.CreateSet<City>(operationsSupported);

            IPagedEntityList pagedList = new MockPagedEntityList(ec.GetEntitySet<City>(), null);
            PagedEntityCollectionView ecv = new PagedEntityCollectionView(pagedList, refreshCallback);

            return new DomainDataSourceView(ecv);
        }