Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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]);
            }
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
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);
            }
        }