public void ResultsProperty_WhenProviderHasCompletedRefreshing_HasCorrectGroupsAndItemsData()
        {
            List <Order> orders = new List <Order>();

            orders.Add(new Order()
            {
                Product = "Mouse pad", Quantity = 10, Net = 40
            });
            orders.Add(new Order()
            {
                Product = "Mouse pad", Quantity = 5, Net = 20
            });
            orders.Add(new Order()
            {
                Product = "Copy holder", Quantity = 10, Net = 50
            });
            orders.Add(new Order()
            {
                Product = "Copy holder", Quantity = 5, Net = 25
            });
            orders.Add(new Order()
            {
                Product = "Copy holder", Quantity = 2, Net = 10
            });

            using (this.provider.DeferRefresh())
            {
                this.provider.ItemsSource = orders;
                this.provider.GroupDescriptions.Add(new PropertyGroupDescription()
                {
                    PropertyName = "Product"
                });
            }

            this.provider.BlockUntilRefreshCompletes();
            var results = ((IDataProvider)this.provider).Results;

            var group1 = new Group("Copy holder");

            group1.SetItems(orders.OfType <object>().Skip(2).ToList());

            var group2 = new Group("Mouse pad");

            group2.SetItems(orders.OfType <object>().Take(2).ToList());

            List <Group> items = new List <Group>()
            {
                group1, group2
            };
            Group expectedRowGroup = new Group("Grand Total");

            expectedRowGroup.SetGroups(items);

            bool equal = GroupTestsHelper.AreGroupsAndItemsEqual(expectedRowGroup, results.Root.RowGroup);

            Assert.IsTrue(equal);
        }
        public void ResultsProperty_WhenProviderHasCompletedRefreshing_HasCorrectColumnGroupsData()
        {
            this.ConfigureProviderToProduceResults();
            IGroup expectedColumnGroup = new TestGroup("Grand Total")
            {
                new TestGroup("1 Free with 10"),
                new TestGroup("Extra Discount"),
            };

            this.provider.Refresh();
            this.provider.BlockUntilRefreshCompletes();
            var results = ((IDataProvider)this.provider).Results;

            bool equal = GroupTestsHelper.AreGroupsEqual(expectedColumnGroup, results.Root.ColumnGroup);

            Assert.IsTrue(equal);
        }
        public void ResultsProperty_WhenProviderHasCompletedRefreshing_HasCorrectRowGroupsData()
        {
            this.ConfigureProviderToProduceResults();
            IGroup expectedRowGroup = new TestGroup("Grand Total")
            {
                new TestGroup("Copy holder"),
                new TestGroup("Glare filter"),
                new TestGroup("Mouse pad"),
                new TestGroup("Printer stand"),
            };

            this.provider.Refresh();
            this.provider.BlockUntilRefreshCompletes();
            var results = ((IDataProvider)this.provider).Results;

            bool equal = GroupTestsHelper.AreGroupsEqual(expectedRowGroup, results.Root.RowGroup);

            Assert.IsTrue(equal);
        }
        public void ResultsProperty_WhenProviderHasCompletedRefreshing_HasCorrectAggregatesData()
        {
            this.ConfigureProviderToProduceResults();
            var expectedAggregates = new double?[][]
            {
                new double?[] { 7851.0, 3949.0, 3902.0 },
                new double?[] { 1439.0, 792.0, 647.0 },
                new double?[] { 1708.0, 814.0, 894.0 },
                new double?[] { 3360.0, 1705.0, 1655.0 },
                new double?[] { 1344.0, 638.0, 706.0 }
            };

            this.provider.Refresh();
            this.provider.BlockUntilRefreshCompletes();
            var results = ((IDataProvider)this.provider).Results;

            bool equal = GroupTestsHelper.AreAggregatesEqual(expectedAggregates, results);

            Assert.IsTrue(equal);
        }