예제 #1
0
        public void PropertyDefinedInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };
            var requestMessage = new HttpWebRequestMessage(
                new Uri(ServiceBaseUri.AbsoluteUri + "DerivedVehicleGPSSet('VehicleKey4')/Microsoft.OData.SampleService.Models.ModelRefDemo.GPS.VehicleGPSType/StartLocation", UriKind.Absolute));

            requestMessage.SetHeader("Accept", MimeTypes.ApplicationJson + MimeTypes.ODataParameterFullMetadata);
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var odatareader = messageReader.CreateODataResourceReader();
                while (odatareader.Read())
                {
                    if (odatareader.State == ODataReaderState.ResourceEnd)
                    {
                        Assert.IsNotNull(odatareader.Item as ODataResource);
                    }
                }
            }
        }
예제 #2
0
        public void UnBoundActionForEntryInReferencedModel()
        {
            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "ResetVehicleSpeedToValue", UriKind.Absolute));

            requestMessage.SetHeader("Accept", "*/*");
            requestMessage.Method = "POST";

            ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings()
            {
                BaseUri = ServiceBaseUri
            };

            using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings, Model))
            {
                var odataWriter = messageWriter.CreateODataParameterWriter(null);
                odataWriter.WriteStart();
                odataWriter.WriteValue("targetValue", 80);
                odataWriter.WriteEnd();
            }
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            var actual = (this.QueryEntityItem("VehicleGPSSetInGPS('VehicleGPSSetInGPSKey2')") as ODataResource).Properties.Single(p => p.Name == "VehicleSpeed").Value;

            Assert.AreEqual((double)80, actual);
        }
예제 #3
0
        public void ServiceDocument()
        {
            string[] types = new string[]
            {
                MimeTypes.ApplicationJson + MimeTypes.ODataParameterFullMetadata,
                MimeTypes.ApplicationJson + MimeTypes.ODataParameterMinimalMetadata,
                MimeTypes.ApplicationJson + MimeTypes.ODataParameterNoMetadata,
            };

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in types)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri, UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.AreEqual(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        ODataServiceDocument workSpace = messageReader.ReadServiceDocument();
                        Assert.IsNotNull(workSpace.EntitySets.Single(c => c.Name == "Trucks"));
                        Assert.AreEqual("GetDefaultOutsideGeoFenceAlarm", workSpace.FunctionImports.First().Name);
                    }
                }
            }
        }
예제 #4
0
        public void EntryTypeDefinedInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "VehicleGPSSet('VehicleKey2')", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.AreEqual(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();

                        List <ODataResource> entries = new List <ODataResource>();
                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                entries.Add(reader.Item as ODataResource);
                            }
                        }
                        Assert.AreEqual("VehicleKey2", entries.Last().Properties.Single(p => p.Name == "Key").Value);
                        Assert.AreEqual(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
예제 #5
0
        private void TestGet(string relativeUri, string expectedPayload)
        {
            var headers = new Dictionary <string, string>
            {
                { "Content-Type", "application/json" }
            };

            var request = new HttpWebRequestMessage(
                new DataServiceClientRequestMessageArgs(
                    "Get",
                    new Uri(this.TestClientContext.BaseUri, relativeUri),
                    false,
                    false,
                    headers));

            using (var response = request.GetResponse() as HttpWebResponseMessage)
            {
                Assert.Equal(200, response.StatusCode);
                using (var stream = response.GetStream())
                {
                    var reader  = new StreamReader(stream);
                    var content = reader.ReadToEnd();
                    Assert.Equal(expectedPayload, content);
                }
            }
        }
예제 #6
0
        public void UnBoundFunctionReturnTypeInReferencedModel()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "GetDefaultOutsideGeoFenceAlarm()", UriKind.Absolute));

            requestMessage.SetHeader("Accept", "*/*");
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            ODataResource perp = null;

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var odataReader = messageReader.CreateODataResourceReader();
                while (odataReader.Read())
                {
                    if (odataReader.State == ODataReaderState.ResourceEnd)
                    {
                        perp = odataReader.Item as ODataResource;
                    }
                }

                Assert.AreEqual(1, perp.Properties.Single(p => p.Name == "Severity").Value);
            }
        }
예제 #7
0
        public ODataFeed QueryInnerFeed(string requestUri, string mimeType)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = baseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(baseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model))
                {
                    var reader = messageReader.CreateODataEntryReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.FeedEnd)
                        {
                            return(reader.Item as ODataFeed);
                        }
                    }
                }
            }
            return(null);
        }
        public void QueryRawValue()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var requestMessage  = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Orders(7)/ShipDate/$value", UriKind.Absolute));
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);
            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var date = messageReader.ReadValue(EdmCoreModel.Instance.GetDate(false));
                Assert.AreEqual(new Date(2014, 8, 31), date);
            }

            var requestMessage2  = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Orders(7)/ShipTime/$value", UriKind.Absolute));
            var responseMessage2 = requestMessage2.GetResponse();

            Assert.AreEqual(200, responseMessage2.StatusCode);
            using (var messageReader = new ODataMessageReader(responseMessage2, readerSettings, Model))
            {
                var date = messageReader.ReadValue(EdmCoreModel.Instance.GetTimeOfDay(false));
                Assert.AreEqual(new TimeOfDay(12, 40, 5, 50), date);
            }
        }
예제 #9
0
        public void CallUnboundFunctionWhichReturnsEnumValue()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "GetDefaultColor()", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                if (mimeType == MimeTypes.ApplicationAtomXml)
                {
                    requestMessage.SetHeader("Accept", "text/html, application/xhtml+xml, */*");
                }

                var responseMessage = requestMessage.GetResponse();
                Assert.AreEqual(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        ODataProperty  colorProperty = messageReader.ReadProperty();
                        ODataEnumValue enumValue     = colorProperty.Value as ODataEnumValue;
                        Assert.AreEqual("Red", enumValue.Value);
                    }
                }
            }
        }
예제 #10
0
        public void RequestDeltaLink_Projection()
        {
            var customersSet = Model.FindDeclaredEntitySet("Customers");
            var cutomerType  = customersSet.EntityType();

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in deltaMimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "$delta?$token=projection", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var deltaReader = messageReader.CreateODataDeltaReader(customersSet, cutomerType);

                        while (deltaReader.Read())
                        {
                            if (deltaReader.State == ODataDeltaReaderState.DeltaResourceEnd)
                            {
                                ODataResource entry = deltaReader.Item as ODataResource;
                            }
                        }
                        Assert.Equal(ODataDeltaReaderState.Completed, deltaReader.State);
                    }
                }
            }
        }
        private List <ODataResource> QueryEntry(string requestUri, string mimeType)
        {
            List <ODataResource> entries = new List <ODataResource>();

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            var responseMessage = requestMessage.GetResponse();

            Assert.Equal(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                {
                    var reader = messageReader.CreateODataResourceReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            entries.Add(reader.Item as ODataResource);
                        }
                    }
                    Assert.Equal(ODataReaderState.Completed, reader.State);
                }
            }
            return(entries);
        }
예제 #12
0
        public void InvokeActionWithUintParameterAndReturnType()
        {
            var writerSettings = new ODataMessageWriterSettings();

            writerSettings.PayloadBaseUri = ServiceBaseUri;
            var readerSettings = new ODataMessageReaderSettings();

            readerSettings.BaseUri = ServiceBaseUri;

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + "Products(11)/microsoft.odata.sampleService.models.typedefinition.ExtendLifeTime"));

            requestMessage.SetHeader("Content-Type", MimeTypes.ApplicationJson);
            requestMessage.SetHeader("Accept", MimeTypes.ApplicationJson);
            requestMessage.Method = "POST";

            using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings, Model))
            {
                var odataWriter = messageWriter.CreateODataParameterWriter((IEdmOperation)null);
                odataWriter.WriteStart();
                odataWriter.WriteValue("seconds", 1000u);
                odataWriter.WriteEnd();
            }

            // send the http request
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var property = messageReader.ReadProperty();
                Assert.IsNotNull(property);
                Assert.AreEqual(4600ul, property.Value);
            }
        }
        public void EntityInstanceAnnotation()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in TestMimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Boss", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                requestMessage.SetHeader("Prefer", string.Format("{0}={1}", IncludeAnnotation, "*"));
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();
                        List <ODataResource> entries = new List <ODataResource>();
                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                entries.Add(reader.Item as ODataResource);
                            }
                        }

                        Assert.Equal(true, (entries.Last().InstanceAnnotations.First(i => i.Name.Equals(string.Format("{0}.IsBoss", TestModelNameSpace))).Value as ODataPrimitiveValue).Value);
                        Assert.Equal(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
예제 #14
0
        public ODataEntityReferenceLinks QueryReferenceLinks(string uri, string mimeType)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = baseUri
            };

            var queryRequestMessage = new HttpWebRequestMessage(new Uri(baseUri.AbsoluteUri + uri, UriKind.Absolute));

            queryRequestMessage.SetHeader("Accept", mimeType);
            queryRequestMessage.SetHeader("Prefer", string.Format("{0}={1}", IncludeAnnotation, "*"));

            var queryResponseMessage = queryRequestMessage.GetResponse();

            Assert.AreEqual(200, queryResponseMessage.StatusCode);
            ODataEntityReferenceLinks item = null;

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(queryResponseMessage, readerSettings, model))
                {
                    item = messageReader.ReadEntityReferenceLinks();
                }
            }

            return(item);
        }
예제 #15
0
        /// <summary>
        /// Specifically use to query single entry or multi entries(query with $expand)
        /// </summary>
        /// <param name="requestUri"></param>
        /// <param name="mimeType"></param>
        /// <returns></returns>
        public List <ODataEntry> QueryEntries(string requestUri, string mimeType)
        {
            List <ODataEntry> entries = new List <ODataEntry>();

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = baseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(baseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            requestMessage.SetHeader("Prefer", string.Format("{0}={1}", IncludeAnnotation, "*"));
            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model))
                {
                    var reader = messageReader.CreateODataEntryReader();

                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.EntryEnd)
                        {
                            entries.Add(reader.Item as ODataEntry);
                        }
                    }
                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }
            return(entries);
        }
예제 #16
0
        private void TestPut(string relativeUri, string payload)
        {
            var headers = new Dictionary <string, string>
            {
                { "Content-Type", "application/json" }
            };

            var request = new HttpWebRequestMessage(
                new DataServiceClientRequestMessageArgs(
                    "Put",
                    new Uri(this.TestClientContext.BaseUri, relativeUri),
                    false,
                    false,
                    headers));

            using (var stream = request.GetStream())
                using (var writer = new StreamWriter(stream))
                {
                    writer.Write(payload);
                }

            using (var response = request.GetResponse() as HttpWebResponseMessage)
            {
                Assert.Equal(200, response.StatusCode);
            }
        }
예제 #17
0
        public ODataProperty QueryProperty(string requestUri, string mimeType)
        {
            ODataProperty property = null;

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = baseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(baseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);

            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model))
                {
                    property = messageReader.ReadProperty();
                }
            }
            return(property);
        }
        public void QueryServiceDocument()
        {
            string[] types = new string[]
            {
                "text/html, application/xhtml+xml, */*",
                MimeTypes.ApplicationJson + MimeTypes.ODataParameterFullMetadata,
                MimeTypes.ApplicationJson + MimeTypes.ODataParameterMinimalMetadata,
                MimeTypes.ApplicationJson + MimeTypes.ODataParameterNoMetadata,
            };

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in types)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri, UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        ODataServiceDocument workSpace = messageReader.ReadServiceDocument();

                        Assert.NotNull(workSpace.EntitySets.Single(c => c.Name == "People"));
                    }
                }
            }
        }
        public void QueryVCardEntityProperty()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri,
            };

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(31)/BusinessCard", UriKind.Absolute));

            SetVCardMediaTypeResolver(requestMessage);
            requestMessage.SetHeader("Accept", "text/x-vCard");
            var responseMessage = requestMessage.GetResponse();

            Assert.Equal(200, responseMessage.StatusCode);

            ODataResource resource = null;

            using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
            {
                var odataReader = messageReader.CreateODataResourceReader();
                while (odataReader.Read())
                {
                    if (odataReader.State == ODataReaderState.ResourceEnd)
                    {
                        resource = odataReader.Item as ODataResource;
                    }
                }
            }

            Assert.NotNull(resource);
            Assert.Equal("Name1", resource.Properties.Single(p => p.Name == "N").Value);
        }
예제 #20
0
        private ODataProperty QueryProperty(string requestUri, string mimeType)
        {
            ODataProperty property = null;

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };
            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + requestUri, UriKind.Absolute));

            requestMessage.SetHeader("Accept", mimeType);
            if (mimeType == MimeTypes.ApplicationAtomXml)
            {
                requestMessage.SetHeader("Accept", "text/html, application/xhtml+xml, */*");
            }

            var responseMessage = requestMessage.GetResponse();

            Assert.AreEqual(200, responseMessage.StatusCode);

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                {
                    property = messageReader.ReadProperty();
                }
            }
            return(property);
        }
예제 #21
0
        public void InvokeActionBoundedToSingleton()
        {
            foreach (var mimeType in mimeTypes)
            {
                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Company/Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue", UriKind.Absolute));
                    requestMessage.SetHeader("Accept", "*/*");
                    requestMessage.Method = "POST";

                    var   oldProperty = this.QueryProperty("Company/Revenue", mimeType);
                    Int64 oldValue    = (Int64)oldProperty.Value;

                    ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings()
                    {
                        PayloadBaseUri = ServiceBaseUri
                    };
                    using (var messageWriter = new ODataMessageWriter(requestMessage, writerSettings, Model))
                    {
                        var odataWriter = messageWriter.CreateODataParameterWriter(null);
                        odataWriter.WriteStart();
                        odataWriter.WriteValue("IncreaseValue", 20000);
                        odataWriter.WriteEnd();
                    }
                    var responseMessage = requestMessage.GetResponse();
                    Assert.AreEqual(200, responseMessage.StatusCode);

                    ODataProperty property = this.QueryProperty("Company/Revenue", mimeType);
                    Assert.AreEqual((Int64)(oldValue + 20000), property.Value);
                }
            }
        }
예제 #22
0
        private ODataEntry QueryEntry(string uri, string mimeType)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var queryRequestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + uri, UriKind.Absolute));

            queryRequestMessage.SetHeader("Accept", mimeType);
            var queryResponseMessage = queryRequestMessage.GetResponse();

            Assert.AreEqual(200, queryResponseMessage.StatusCode);

            ODataEntry entry = null;

            if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
            {
                using (var messageReader = new ODataMessageReader(queryResponseMessage, readerSettings, Model))
                {
                    var reader = messageReader.CreateODataEntryReader();
                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.EntryEnd)
                        {
                            entry = reader.Item as ODataEntry;
                        }
                    }

                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }

            return(entry);
        }
예제 #23
0
        // With Web Api OData model build, max/min length is not set
        // Keep this test case as Web Api is working on add max/min length support.
        // [Fact]
        public void AnnotationRequiredMaxMinLengthTimestamp()
        {
            var requestMessage = new HttpWebRequestMessage(
                new DataServiceClientRequestMessageArgs(
                    "GET",
                    new Uri(this.ServiceBaseUri.OriginalString + "$metadata", UriKind.Absolute),
                    useDefaultCredentials: true,
                    usePostTunneling: false,
                    headers: new Dictionary <string, string>()));

            using (var r = new StreamReader(requestMessage.GetResponse().GetStream()))
            {
                var modelStr = r.ReadToEnd();

                // [Required] ==> Nullable="false"
                Assert.Contains(
                    "<Property Name=\"FirstName\" Type=\"Edm.String\" Nullable=\"false\" MaxLength=\"max\" />",
                    modelStr,
                    StringComparison.Ordinal);

                // [MaxLength] [MinLength] --> only MaxLength=".."
                Assert.Contains(
                    "<Property Name=\"LastName\" Type=\"Edm.String\" MaxLength=\"26\" />",
                    modelStr,
                    StringComparison.Ordinal);

                // [Timestamp] ==> Computed
                Assert.Contains(
                    "<Property Name=\"TimeStampValue\" Type=\"Edm.Binary\" Nullable=\"false\" MaxLength=\"8\">\r\n"
                    + "          <Annotation Term=\"Org.OData.Core.V1.Computed\" Bool=\"true\" />",
                    modelStr,
                    StringComparison.Ordinal);
            }
        }
        // [Fact] // github issuse: #896
        public void TopLevelPropertyOfComplexTypeInstanceAnnotation()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in TestMimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "People(1)/HomeAddress/City", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                requestMessage.SetHeader("Prefer", string.Format("{0}={1}", IncludeAnnotation, "*"));
                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var property = messageReader.ReadProperty();

                        // TODO: Service does not support add annotation in property now
                    }
                }
            }
        }
예제 #25
0
        private void UpdateEntry(string singletonType, string singletonName, string mimeType, IEnumerable <ODataProperty> properties)
        {
            ODataEntry entry = new ODataEntry()
            {
                TypeName = NameSpacePrefix + singletonType
            };

            entry.Properties = properties;

            var settings = new ODataMessageWriterSettings();

            settings.PayloadBaseUri = ServiceBaseUri;

            var customerType = Model.FindDeclaredType(NameSpacePrefix + singletonType) as IEdmEntityType;
            var customerSet  = Model.EntityContainer.FindSingleton(singletonName);

            var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri + singletonName));

            requestMessage.SetHeader("Content-Type", mimeType);
            requestMessage.SetHeader("Accept", mimeType);
            requestMessage.Method = "PATCH";

            using (var messageWriter = new ODataMessageWriter(requestMessage, settings))
            {
                var odataWriter = messageWriter.CreateODataEntryWriter(customerSet, customerType);
                odataWriter.WriteStart(entry);
                odataWriter.WriteEnd();
            }

            var responseMessage = requestMessage.GetResponse();

            // verify the update
            Assert.AreEqual(204, responseMessage.StatusCode);
        }
예제 #26
0
        public void QueryEntityProperty()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Customers(1)/TimeBetweenLastTwoOrders", UriKind.Absolute));

                requestMessage.SetHeader("Accept", mimeType);
                if (mimeType == MimeTypes.ApplicationAtomXml)
                {
                    requestMessage.SetHeader("Accept", "text/html, application/xhtml+xml, */*");
                }

                var responseMessage = requestMessage.GetResponse();
                Assert.Equal(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    ODataProperty property = null;
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        property = messageReader.ReadProperty();
                    }

                    Assert.Equal(new TimeSpan(1), property.Value);
                }
            }
        }
예제 #27
0
        public void QueryByDateKey()
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in mimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "Calendars(2015-11-11)", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.AreEqual(200, responseMessage.StatusCode);

                if (!mimeType.Contains(MimeTypes.ODataParameterNoMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var reader = messageReader.CreateODataResourceReader();

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.ResourceEnd)
                            {
                                ODataResource entry = reader.Item as ODataResource;
                                // Verify Date Property
                                Assert.AreEqual(new Date(2015, 11, 11), entry.Properties.Single(p => p.Name == "Day").Value);
                            }
                        }
                        Assert.AreEqual(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }
예제 #28
0
        private ODataItem QueryEntityItem(string uri, int expectedStatusCode = 200)
        {
            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            var queryRequestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + uri, UriKind.Absolute));

            queryRequestMessage.SetHeader("Accept", MimeTypes.ApplicationJsonLight);
            var queryResponseMessage = queryRequestMessage.GetResponse();

            Assert.AreEqual(expectedStatusCode, queryResponseMessage.StatusCode);

            ODataItem item = null;

            if (expectedStatusCode == 200)
            {
                using (var messageReader = new ODataMessageReader(queryResponseMessage, readerSettings, Model))
                {
                    var reader = messageReader.CreateODataResourceReader();
                    while (reader.Read())
                    {
                        if (reader.State == ODataReaderState.ResourceEnd)
                        {
                            item = reader.Item;
                        }
                    }

                    Assert.AreEqual(ODataReaderState.Completed, reader.State);
                }
            }

            return(item);
        }
예제 #29
0
        public void RequestDeltaLink_Expanded()
        {
            var customersSet = Model.FindDeclaredEntitySet("Customers");
            var customerType = customersSet.EntityType();

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri
            };

            foreach (var mimeType in deltaMimeTypes)
            {
                var requestMessage = new HttpWebRequestMessage(new Uri(ServiceBaseUri.AbsoluteUri + "$delta?$token=expanded", UriKind.Absolute));
                requestMessage.SetHeader("Accept", mimeType);
                var responseMessage = requestMessage.GetResponse();
                Assert.AreEqual(200, responseMessage.StatusCode);

                // Currently don't test full metadata because the delta reader doesn't support reading
                // annotations on expanded navigation properties, metadata reference properties and paging.
                if (mimeType.Contains(MimeTypes.ODataParameterMinimalMetadata))
                {
                    using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, Model))
                    {
                        var deltaReader = messageReader.CreateODataDeltaReader(customersSet, customerType);

                        while (deltaReader.Read())
                        {
                            if (deltaReader.State == ODataDeltaReaderState.FeedEnd)
                            {
                                Assert.IsNotNull(deltaReader.Item as ODataDeltaFeed);
                            }
                            else if (deltaReader.State == ODataDeltaReaderState.DeltaEntryEnd)
                            {
                                Assert.IsNotNull(deltaReader.Item as ODataEntry);
                            }
                            else if (deltaReader.State == ODataDeltaReaderState.ExpandedNavigationProperty)
                            {
                                switch (deltaReader.SubState)
                                {
                                case ODataReaderState.FeedEnd:
                                    Assert.IsNotNull(deltaReader.Item as ODataFeed);
                                    break;

                                case ODataReaderState.EntryEnd:
                                    Assert.IsNotNull(deltaReader.Item as ODataEntry);
                                    break;

                                case ODataReaderState.NavigationLinkEnd:
                                    Assert.IsNotNull(deltaReader.Item as ODataNavigationLink);
                                    break;
                                }
                            }
                        }

                        Assert.AreEqual(ODataDeltaReaderState.Completed, deltaReader.State);
                    }
                }
            }
        }
예제 #30
0
        public void QueryWithFormat()
        {
            Dictionary <string, string> testCases = new Dictionary <string, string>()
            {
                { "People?$format=application/json", "application/json" },
                // ODL Bug: https://github.com/OData/odata.net/issues/313
                ////{"People?$format=application/json;odata.metadata=full", "application/json; odata.metadata=full"},
                { "People?$format=json", "application/json" },
            };

            ODataMessageReaderSettings readerSettings = new ODataMessageReaderSettings()
            {
                BaseUri = ServiceBaseUri,
                UndeclaredPropertyBehaviorKinds = ODataUndeclaredPropertyBehaviorKinds.IgnoreUndeclaredValueProperty
            };

            foreach (var testCase in testCases)
            {
                DataServiceClientRequestMessageArgs args = new DataServiceClientRequestMessageArgs(
                    "GET",
                    new Uri(ServiceBaseUri.AbsoluteUri + testCase.Key, UriKind.Absolute),
                    false, false, new Dictionary <string, string>()
                {
                });

                var requestMessage = new HttpWebRequestMessage(args);
                using (var responseMessage = requestMessage.GetResponse() as HttpWebResponseMessage)
                {
                    Assert.Equal(200, responseMessage.StatusCode);

                    string contentType = responseMessage.Headers.FirstOrDefault(x => x.Key.Equals("Content-Type")).Value;
                    Assert.True(contentType.StartsWith(testCase.Value));

                    using (var messageReader = new ODataMessageReader(
                               responseMessage,
                               readerSettings,
                               this.TestClientContext.Format.LoadServiceModel()))
                    {
                        var reader = messageReader.CreateODataFeedReader();

                        while (reader.Read())
                        {
                            if (reader.State == ODataReaderState.EntryEnd)
                            {
                                ODataEntry entry = reader.Item as ODataEntry;
                                Assert.NotNull(entry.Properties.Single(p => p.Name == "PersonId").Value);
                            }
                            else if (reader.State == ODataReaderState.FeedEnd)
                            {
                                Assert.NotNull(reader.Item as ODataFeed);
                            }
                        }

                        Assert.Equal(ODataReaderState.Completed, reader.State);
                    }
                }
            }
        }