public void ContainedEntityQuery() { TestClientContext.MergeOption = Microsoft.OData.Client.MergeOption.OverwriteChanges; // Query a single contained entity var q1 = TestClientContext.CreateQuery <PaymentInstrumentPlus>("Accounts(103)/MyPaymentInstruments(103902)"); Assert.IsTrue(q1.RequestUri.OriginalString.EndsWith("Accounts(103)/MyPaymentInstruments(103902)", StringComparison.Ordinal)); List <PaymentInstrumentPlus> r1 = q1.ToList(); Assert.AreEqual(1, r1.Count); Assert.AreEqual(103902, r1[0].PaymentInstrumentIDPlus); Assert.AreEqual("103 second PI", r1[0].FriendlyNamePlus); // Query a contained entity set with query option var q2 = TestClientContext.CreateQuery <PaymentInstrumentPlus>("Accounts(103)/MyPaymentInstruments").Expand(pi => pi.BillingStatementsPlus).Where(pi => pi.PaymentInstrumentIDPlus == 103901); PaymentInstrumentPlus r2 = q2.Single(); Assert.IsNotNull(r2.BillingStatementsPlus); // Invoke a bounded Function. double result = TestClientContext.Execute <double>(new Uri(ServiceBaseUri.AbsoluteUri + "Accounts(101)/MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount(bonusRate=0.2)", UriKind.Absolute), "GET", true).Single(); Assert.AreEqual(23.88, result); }
public void AddDeleteLink(string mimeType) { TestClientContext.MergeOption = MergeOption.OverwriteChanges; TestClientContext.SendingRequest2 += (sender, eventArgs) => ((Microsoft.OData.Client.HttpWebRequestMessage)eventArgs.RequestMessage).SetHeader("Accept", mimeType); TestClientContext.Format.UseJson(Model); //preparation //currently service does not support $expand, so need to query the navigation Orders first var uri = new Uri(ServiceBaseUri + "Products(5)/Details"); var detailsInAProdct = TestClientContext.Execute <ProductDetail>(uri); var intOriginalOrderCount = detailsInAProdct.Count(); var prodct = TestClientContext.Products.Where(c => c.ProductID == 5).SingleOrDefault(); TestClientContext.SendingRequest2 += (sender, eventArgs) => ((Microsoft.OData.Client.HttpWebRequestMessage)eventArgs.RequestMessage).SetHeader(TestHeader, "EditLink");//this is make sure EditLink is replaced with a random value. var productDetail = TestClientContext.ProductDetails.Where(o => o.ProductDetailID == 1 && o.ProductID == 6).SingleOrDefault(); //add a link between customer and order TestClientContext.AddLink(prodct, "Details", productDetail); TestClientContext.SaveChanges(); detailsInAProdct = TestClientContext.Execute <ProductDetail>(uri); var intOrderCountAfterAddLink = detailsInAProdct.Count(); Assert.AreEqual(intOriginalOrderCount + 1, intOrderCountAfterAddLink, "The link is added."); //delete the added link TestClientContext.DeleteLink(prodct, "Details", productDetail); TestClientContext.SaveChanges(); detailsInAProdct = TestClientContext.Execute <ProductDetail>(uri); var intOrderCountAfterDeleteLink = detailsInAProdct.Count(); Assert.AreEqual(intOriginalOrderCount, intOrderCountAfterDeleteLink, "The added link is deleted."); }
public void QueryPropertyWithNullValueFromODataClient() { TestClientContext.Format.UseJson(Model); var middleName = TestClientContext.Execute <string>(new Uri(ServiceBaseUri.AbsoluteUri + "/People(5)/MiddleName")); List <string> enumResult = middleName.ToList(); Assert.AreEqual(0, enumResult.Count); }
public void QueryPropertyValueWhichIsNullFromODataClient() { TestClientContext.Format.UseJson(Model); TestClientContext.SendingRequest2 += (sender, eventArgs) => ((Microsoft.OData.Client.HttpWebRequestMessage)eventArgs.RequestMessage).SetHeader("Accept", "text/plain"); var middleName = TestClientContext.Execute <string>(new Uri(ServiceBaseUri.AbsoluteUri + "/People(5)/MiddleName/$value")); List <string> enumResult = middleName.ToList(); Assert.AreEqual(0, enumResult.Count); }
public void InvokeFunctionBoundedToSingleton() { var employeeCount = TestClientContext.Execute <int>(new Uri(ServiceBaseUri.AbsoluteUri + "Company/Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount()", UriKind.Absolute)).Single(); Assert.AreEqual(2, employeeCount); Company company = TestClientContext.Company.GetValue(); OperationDescriptor descriptor = TestClientContext.GetEntityDescriptor(company).OperationDescriptors.Single(e => e.Title == "Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount"); employeeCount = TestClientContext.Execute <int>(descriptor.Target, "GET", true).Single(); Assert.AreEqual(2, employeeCount); }
public void InvokeActionBoundedToSingleton() { Company company = TestClientContext.Company.GetValue(); TestClientContext.LoadProperty(company, "Revenue"); var newValue = TestClientContext.Execute <Int64>(new Uri(ServiceBaseUri.AbsoluteUri + "Company/Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue"), "POST", true, new BodyOperationParameter("IncreaseValue", 20000)); Assert.AreEqual(newValue.Single(), company.Revenue + 20000); OperationDescriptor descriptor = TestClientContext.GetEntityDescriptor(company).OperationDescriptors.Single(e => e.Title == "Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue"); newValue = TestClientContext.Execute <Int64>(descriptor.Target, "POST", new BodyOperationParameter("IncreaseValue", 40000)); Assert.AreEqual(newValue.Single(), company.Revenue + 60000); }
private void QueryObjectsWhenTheyAreTransient(string mimeType) { TestClientContext.MergeOption = MergeOption.OverwriteChanges; TestClientContext.SendingRequest2 += (sender, eventArgs) => ((Microsoft.OData.Client.HttpWebRequestMessage)eventArgs.RequestMessage).SetHeader(TestHeader, "IsTransient"); TestClientContext.SendingRequest2 += (sender, eventArgs) => ((Microsoft.OData.Client.HttpWebRequestMessage)eventArgs.RequestMessage).SetHeader("Accept", mimeType); TestClientContext.Format.UseJson(Model); var entryResults = TestClientContext.Execute <Person>(new Uri(ServiceBaseUri + "/People?$filter=PersonID eq 1")).ToArray(); Assert.AreEqual(1, entryResults.Count(), "Unexpected number of Products returned"); var entityDescriptor = TestClientContext.GetEntityDescriptor(entryResults[0]); Assert.IsNull(entityDescriptor); }
public void QueryEnumPropertyFromODataClient() { for (int i = 1; i < 2; i++) { if (i == 0) { //TestClientContext.Format.UseAtom(); } else { TestClientContext.Format.UseJson(Model); } var userAccess = TestClientContext.Execute <AccessLevel>(new Uri(ServiceBaseUri.AbsoluteUri + "/Products(8)/UserAccess")); List <AccessLevel> enumResult = userAccess.ToList(); Assert.AreEqual(1, enumResult.Count); Assert.AreEqual(AccessLevel.Execute, enumResult[0]); } }
public void QueryEnumCollectionPropertyFromODataClient() { for (int i = 1; i < 2; i++) { if (i == 0) { //TestClientContext.Format.UseAtom(); } else { TestClientContext.Format.UseJson(Model); } var resultTmp = TestClientContext.Execute <List <Color> >(new Uri(ServiceBaseUri.AbsoluteUri + "/Products(5)/CoverColors")); List <List <Color> > enumResult = resultTmp.ToList(); Assert.AreEqual(1, enumResult.Count); Assert.AreEqual(Color.Green, enumResult[0][0]); Assert.AreEqual(Color.Blue, enumResult[0][1]); Assert.AreEqual(Color.Blue, enumResult[0][2]); } }
public void InsertAndUpdatePropertyValueUsingLinq() { TimeSpan timespan = new TimeSpan((new Random()).Next()); var queryable = TestClientContext.Orders.Where(c => c.ShelfLife == timespan) as ODataClient.DataServiceQuery <Order>; Assert.IsTrue(queryable.RequestUri.OriginalString.EndsWith("/Orders?$filter=ShelfLife eq duration'" + XmlConvert.ToString(timespan) + "'", StringComparison.Ordinal)); var result1 = queryable.ToList(); Assert.IsTrue(result1.Count == 0); int orderID = (new Random()).Next(); // create an entity Order order = new Order() { OrderID = orderID, OrderDate = new DateTimeOffset(new DateTime(2011, 3, 4, 16, 3, 57)), ShelfLife = timespan, OrderShelfLifes = new ObservableCollection <TimeSpan>() { timespan } }; TestClientContext.AddToOrders(order); TestClientContext.SaveChanges(); // query and verify var result2 = queryable.ToList(); Assert.AreEqual(1, result2.Count); Assert.AreEqual(orderID, result2[0].OrderID); // update the Duration properties timespan = new TimeSpan((new Random()).Next()); order.ShelfLife = timespan; order.OrderShelfLifes = new ObservableCollection <TimeSpan>() { timespan }; TestClientContext.UpdateObject(order); TestClientContext.SaveChanges(ODataClient.SaveChangesOptions.ReplaceOnUpdate); // query Duration property var queryable2 = TestClientContext.Orders.Where(c => c.OrderID == orderID).Select(c => c.ShelfLife).FirstOrDefault(); Assert.IsTrue(queryable2 != null); Assert.AreEqual(timespan, queryable2); // query collection of Duration property var queryable3 = (from c in TestClientContext.Orders where c.OrderID == orderID select c.OrderShelfLifes).FirstOrDefault(); Assert.IsTrue(queryable3.Count == 1); Assert.AreEqual(timespan, queryable3[0]); // delete entity and validate TestClientContext.DeleteObject(order); TestClientContext.SaveChanges(ODataClient.SaveChangesOptions.ReplaceOnUpdate); var queryable4 = TestClientContext.Execute <Order>(new Uri("Orders()?$filter=ShelfLife eq duration'" + XmlConvert.ToString(timespan) + "'", UriKind.Relative)); Assert.IsTrue(queryable4.Count() == 0); }
public void SingletonClientTest() { Random rand = new Random(); ODataFormat[] formats = { ODataFormat.Json }; foreach (var format in formats) { //Query Singleton TestClientContext.MergeOption = Microsoft.OData.Client.MergeOption.OverwriteChanges; var company = TestClientContext.Company.GetValue(); Assert.IsTrue(company != null); //Update Singleton Property and Verify company.CompanyCategory = CompanyCategory.Communication; company.Name = "UpdatedName"; company.Address.City = "UpdatedCity"; TestClientContext.UpdateObject(company); TestClientContext.SaveChanges(Microsoft.OData.Client.SaveChangesOptions.ReplaceOnUpdate); //Query Singleton Property - Select var companyCategory = TestClientContext.Company.Select(c => c.CompanyCategory).GetValue(); Assert.IsTrue(companyCategory == CompanyCategory.Communication); var city = TestClientContext.CreateSingletonQuery <string>("Company/Address/City").Execute().Single(); Assert.IsTrue(city == "UpdatedCity"); var name = TestClientContext.Execute <string>(new Uri("Company/Name", UriKind.Relative)).Single(); Assert.IsTrue(name == "UpdatedName"); //Projection with properties - Select company = TestClientContext.Company.Select(c => new Company { CompanyID = c.CompanyID, Address = c.Address, Name = c.Name }).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.Name == "UpdatedName"); //Load Navigation Property //Singleton TestClientContext.LoadProperty(company, "VipCustomer"); Assert.IsTrue(company.VipCustomer != null); //Collection TestClientContext.LoadProperty(company, "Departments"); Assert.IsTrue(company.Departments != null); Assert.IsTrue(company.Departments.Count > 0); //Single Entity TestClientContext.LoadProperty(company, "CoreDepartment"); Assert.IsTrue(company.CoreDepartment != null); //Add Navigation Property - Collection company = TestClientContext.Company.GetValue(); int tmpDepartmentID = rand.Next(); int tmpCoreDepartmentID = rand.Next(); Department department = new Department() { DepartmentID = tmpDepartmentID, Name = "ID" + tmpDepartmentID, }; Department coreDepartment = new Department() { DepartmentID = tmpCoreDepartmentID, Name = "ID" + tmpCoreDepartmentID, }; TestClientContext.AddToDepartments(department); TestClientContext.AddLink(company, "Departments", department); TestClientContext.SaveChanges(); TestClientContext.AddToDepartments(coreDepartment); TestClientContext.AddLink(company, "Departments", coreDepartment); TestClientContext.SaveChanges(); TestClientContext.Departments.ToList(); //Projection with Navigation properties - Select company = TestClientContext.Company.Select(c => new Company { CompanyID = c.CompanyID, Departments = c.Departments }).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.Departments.Any(c => c.DepartmentID == tmpDepartmentID)); Assert.IsTrue(company.Departments.Any(c => c.DepartmentID == tmpCoreDepartmentID)); //Update Navigation Property - Single Entity TestClientContext.SetLink(company, "CoreDepartment", coreDepartment); TestClientContext.SaveChanges(); //Projection with Navigation properties - Select company = TestClientContext.Company.Select(c => new Company { CompanyID = c.CompanyID, CoreDepartment = c.CoreDepartment }).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.CoreDepartment.DepartmentID == tmpCoreDepartmentID); //Update EntitySet's Navigation Property - Singleton TestClientContext.SetLink(department, "Company", company); TestClientContext.SaveChanges(Microsoft.OData.Client.SaveChangesOptions.ReplaceOnUpdate); //Query(Expand) EntitySet's Navigation Property - Singleton department = TestClientContext.Departments.Expand(d => d.Company).Where(d => d.DepartmentID == tmpDepartmentID).Single(); Assert.IsTrue(department != null); Assert.IsTrue(department.Company.CompanyID == company.CompanyID); //Delete Navigation Property - EntitySet TestClientContext.DeleteLink(company, "Departments", department); TestClientContext.SaveChanges(); //Projection with Navigation Property - EntitySet company.Departments = null; company = TestClientContext.Company.Select(c => new Company { CompanyID = c.CompanyID, Departments = c.Departments }).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(!company.Departments.Any(c => c.DepartmentID == tmpDepartmentID)); //Query Singleton's Navigation Property - Singleton company = TestClientContext.Company.Select(c => new Company { CompanyID = c.CompanyID, VipCustomer = c.VipCustomer }).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.VipCustomer != null); //Query Singleton again with Execute var vipCustomer = TestClientContext.Execute <Customer>(new Uri("VipCustomer", UriKind.Relative)).Single(); //Update Singleton's Navigation property - Singleton vipCustomer.LastName = "UpdatedLastName"; TestClientContext.UpdateRelatedObject(company, "VipCustomer", vipCustomer); TestClientContext.SaveChanges(); company.VipCustomer = null; company = TestClientContext.Company.Expand(c => c.VipCustomer).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.VipCustomer != null); Assert.IsTrue(company.VipCustomer.LastName == "UpdatedLastName"); //Update Navigation Property - Delete the Singleton navigation TestClientContext.SetLink(company, "VipCustomer", null); TestClientContext.SaveChanges(); //Expand Navigation Property - Singleton company.VipCustomer = null; company = TestClientContext.Company.Expand(c => c.VipCustomer).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.VipCustomer == null); //TODO: AttachTo doesn't support singleton. //TestClientContext = new InMemoryEntities(ServiceBaseUri); //TestClientContext.AttachTo("Company", company); //TestClientContext.AttachTo("VipCustomer", vipCustomer); //TestClientContext.SetLink(company, "VipCustomer", vipCustomer); //TestClientContext.SaveChanges(); //Update Navigation Property - Singleton vipCustomer = TestClientContext.VipCustomer.GetValue(); TestClientContext.SetLink(company, "VipCustomer", vipCustomer); TestClientContext.SaveChanges(); company = TestClientContext.Company.Select(c => new Company { CompanyID = c.CompanyID, VipCustomer = c.VipCustomer }).GetValue(); Assert.IsTrue(company != null); Assert.IsTrue(company.VipCustomer != null); } }