예제 #1
0
        public void CreateODataWriterDelegateTestForOpenProvider()
        {
            var testInfo = new[] {
                    new { Query = "/Customers?$format=atom", CustomerCount = 3, NavLinkCount = 3, OrderCount = 0 },
                    new { Query = "/Customers?$format=atom&$expand=Orders", CustomerCount = 3, NavLinkCount = 3, OrderCount = 6 },
                    new { Query = "/Customers(1)?$format=atom", CustomerCount = 1, NavLinkCount = 1, OrderCount = 0 },
                    new { Query = "/Customers(1)?$format=atom&$expand=Orders", CustomerCount = 1, NavLinkCount = 1, OrderCount = 2 },
                    new { Query = "/Customers(1)/Orders?$format=atom", CustomerCount = 0, NavLinkCount = 0, OrderCount = 2 },
                };

            using (OpenWebDataServiceHelper.CreateODataWriterDelegate.Restore())
            using (MyODataWriter.WriteEntryStart.Restore())
            using (MyODataWriter.WriteLinkStart.Restore())
            using (var request = TestWebRequest.CreateForInProcess())
            {
                request.HttpMethod = "GET";
                request.DataServiceType = typeof(CustomRowBasedOpenTypesContext);
                OpenWebDataServiceHelper.CreateODataWriterDelegate.Value = (odataWriter) =>
                {
                    return new MyODataWriter(odataWriter);
                };

                test.TestUtil.RunCombinations(testInfo, UnitTestsUtil.BooleanValues, (ti, batchMode) =>
                {
                    int CustomerCount = 0;
                    int NavigationLink = 0;
                    int OrderCount = 0;

                    MyODataWriter.WriteEntryStart.Value = (args) =>
                    {
                        Assert.IsTrue(args.Instance.GetType() == typeof(RowComplexType), "Making sure the right provider type is exposed");
                        var instance = (RowComplexType)args.Instance;
                        if (args.Entry.TypeName.Contains("Customer"))
                        {
                            Assert.IsTrue(instance.TypeName.Contains("Customer"), "Make sure the instance is customer or customerwithbirthday");
                            CustomerCount++;
                        }
                        else if (args.Entry.TypeName.Contains("Order"))
                        {
                            Assert.IsTrue(instance.TypeName.Contains("Order"), "Make sure the instance is order");
                            OrderCount++;
                        }

                        return false;
                    };

                    MyODataWriter.WriteLinkStart.Value = (args) =>
                    {
                        if (args.NavigationLink.Name == "Orders")
                        {
                            Assert.IsTrue(args.NavigationLink.IsCollection.Value, "orders must be collection");
                            NavigationLink++;
                        }

                        return false;
                    };

                    if (!batchMode)
                    {
                        request.RequestUriString = ti.Query;
                        request.SendRequest();
                    }
                    else
                    {
                        BatchWebRequest batchRequest = new BatchWebRequest();
                        InMemoryWebRequest getRequest = new InMemoryWebRequest();
                        getRequest.RequestUriString = ti.Query;
                        batchRequest.Parts.Add(getRequest);
                        batchRequest.SendRequest(request);
                    }

                    Assert.AreEqual(CustomerCount, ti.CustomerCount, "CustomerCount should match");
                    Assert.AreEqual(OrderCount, ti.OrderCount, "OrderCount should match");
                    Assert.AreEqual(NavigationLink, ti.NavLinkCount, "NavigationCount should match");
                });
            }
        }
예제 #2
0
        public void CreateODataWriterDelegateTest()
        {
            int createODataWriterDelegateCount = 0;
            var testInfo = new[] {
                    new { Query = "/Customers?$format=atom", CustomerCount = 3, NavLinkCount = 6, OrderCount = 0 },
                    new { Query = "/Customers?$format=atom&$expand=BestFriend", CustomerCount = 5, NavLinkCount = 10, OrderCount = 0 },
                    new { Query = "/Customers?$format=atom&$expand=Orders", CustomerCount = 3, NavLinkCount = 18, OrderCount = 6 },
                    new { Query = "/Customers(1)?$format=atom", CustomerCount = 1, NavLinkCount = 2, OrderCount = 0 },
                    new { Query = "/Customers(1)?$format=atom&$expand=Orders", CustomerCount = 1, NavLinkCount = 6, OrderCount = 2 },
                    new { Query = "/Customers(1)/Orders?$format=atom", CustomerCount = 0, NavLinkCount = 4, OrderCount = 2 },
                };

            using (OpenWebDataServiceHelper.CreateODataWriterDelegate.Restore())
            using (MyODataWriter.WriteEntryStart.Restore())
            using (MyODataWriter.WriteLinkStart.Restore())
            using (var request = TestWebRequest.CreateForInProcess())
            {
                createODataWriterDelegateCount = 0;
                request.HttpMethod = "GET";
                request.DataServiceType = typeof(CustomDataContext);
                OpenWebDataServiceHelper.CreateODataWriterDelegate.Value = (odataWriter) =>
                {
                    createODataWriterDelegateCount++;
                    return new MyODataWriter(odataWriter);
                };

                test.TestUtil.RunCombinations(testInfo, UnitTestsUtil.BooleanValues, (ti, batchMode) =>
                {
                    createODataWriterDelegateCount = 0;
                    int CustomerCount = 0;
                    int NavigationLink = 0;
                    int OrderCount = 0;

                    MyODataWriter.WriteEntryStart.Value = (args) =>
                        {
                            if (args.Entry != null)
                            {
                                if (args.Entry.TypeName.Contains("Customer"))
                                {
                                    Assert.IsTrue(typeof(Customer).IsAssignableFrom(args.Instance.GetType()), "Make sure the instance is customer or customerwithbirthday");
                                    CustomerCount++;
                                }
                                else if (args.Entry.TypeName.Contains("Order"))
                                {
                                    Assert.IsTrue(typeof(Order).IsAssignableFrom(args.Instance.GetType()), "Make sure the instance is order");
                                    OrderCount++;
                                }
                            }

                            return false;
                        };

                    MyODataWriter.WriteLinkStart.Value = (args) =>
                        {
                             NavigationLink++;
                             return false;
                        };

                    if (!batchMode)
                    {
                        request.RequestUriString = ti.Query;
                        request.SendRequest();
                        Assert.AreEqual(1, createODataWriterDelegateCount, "NavigationCount should match");
                    }
                    else
                    {
                        BatchWebRequest batchRequest = new BatchWebRequest();
                        InMemoryWebRequest getRequest = new InMemoryWebRequest();
                        getRequest.RequestUriString = ti.Query;
                        batchRequest.Parts.Add(getRequest);
                        batchRequest.SendRequest(request);
                        Assert.AreEqual(batchRequest.Parts.Count, createODataWriterDelegateCount, "NavigationCount should match");
                    }

                    Assert.AreEqual(ti.CustomerCount, CustomerCount, "CustomerCount should match");
                    Assert.AreEqual(ti.OrderCount, OrderCount, "OrderCount should match");
                    Assert.AreEqual(ti.NavLinkCount, NavigationLink, "NavigationCount should match");
                });
            }
        }