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"); }); } }
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"); }); } }