public async Task CustomReadLinksAppearInFullAndMinimalMetadata(string acceptHeader) { //Arrange OneToOneParent[] entities = MetadataTestHelpers.CreateInstances <OneToOneParent[]>(); var entity = entities.First(); string requestUrl = BaseAddress.ToLowerInvariant() + "/CustomReadLinkConventions/OneToOneParent(" + entity.Id + ")"; string expectedReadLinkUrl = "http://*****:*****@odata.readLink", result); } else { JsonAssert.DoesNotContainProperty("@odata.readLink", result); } }
public async Task MetadataIsCorrectForFeedsOfEntriesWithJustPrimitiveTypeProperties( string acceptHeader) { // Arrange EntityWithSimpleProperties[] entities = MetadataTestHelpers.CreateInstances <EntityWithSimpleProperties[]>(); string requestUrl = BaseAddress.ToLowerInvariant() + "/EntityWithSimpleProperties/"; string expectedContextUrl = BaseAddress.ToLowerInvariant() + "/$metadata#EntityWithSimpleProperties"; HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, requestUrl); message.SetAcceptHeader(acceptHeader); // Act var response = await Client.SendAsync(message); var result = await response.Content.ReadAsObject <JObject>(); // Assert JsonAssert.ArrayLength(entities.Length, "value", result); if (acceptHeader.Contains("odata.metadata=none")) { JsonAssert.DoesNotContainProperty("@odata.context", result); } else { JsonAssert.PropertyEquals(expectedContextUrl, "@odata.context", result); } }
public async Task NavigationLinksAppearOnlyInFullMetadata(string acceptHeader) { //Arrange OneToOneParent[] entities = MetadataTestHelpers.CreateInstances <OneToOneParent[]>(); var entity = entities.First(); string requestUrl = BaseAddress.ToLowerInvariant() + "/Relationships/OneToOneParent(" + entity.Id + ")"; string expectedNavigationLink = BaseAddress.ToLowerInvariant() + "/Relationships/OneToOneParent(" + entity.Id + ")/Child"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl); request.SetAcceptHeader(acceptHeader); //Act HttpResponseMessage response = await Client.SendAsync(request); JObject result = await response.Content.ReadAsObject <JObject>(); //Assert if (acceptHeader.Contains("odata.metadata=full")) { JsonAssert.PropertyEquals(expectedNavigationLink, "*****@*****.**", result); } else { JsonAssert.DoesNotContainProperty("*****@*****.**", result); } }
public async Task MetadataIsCorrectForAnEntryWithJustPrimitiveTypeProperties(string acceptHeader) { // Arrange EntityWithSimpleProperties entity = MetadataTestHelpers.CreateInstances <EntityWithSimpleProperties[]>() .FirstOrDefault(); Assert.NotNull(entity); string requestUrl = BaseAddress + "/EntityWithSimpleProperties(" + entity.Id + ")"; string expectedContextUrl = BaseAddress.ToLowerInvariant() + "/$metadata#EntityWithSimpleProperties/$entity"; // Act var response = await Client.GetWithAcceptAsync(requestUrl, acceptHeader); var result = await response.Content.ReadAsObject <JObject>(); // Assert Assert.Null(result.Property("*****@*****.**")); Assert.Null(result.Property("*****@*****.**")); Assert.Null(result.Property("*****@*****.**")); string doublePropertyValue = (string)result["DoubleProperty"]; if (!doublePropertyValue.Equals("INF", StringComparison.InvariantCulture) && !doublePropertyValue.Equals("-INF", StringComparison.InvariantCulture) && !doublePropertyValue.Equals("NaN", StringComparison.InvariantCulture)) { Assert.Null(result.Property("*****@*****.**")); } Assert.Null(result.Property("*****@*****.**")); if (acceptHeader.Contains("odata.metadata=none")) { Assert.Null(result.Property("@odata.context")); } else { ODataUrlAssert.UrlEquals(expectedContextUrl, result, "@odata.context", BaseAddress); } if (acceptHeader.Contains("odata.metadata=full")) { ODataUrlAssert.UrlEquals(requestUrl, result, "@odata.id", BaseAddress); Assert.Equal("#Binary", result.Property("*****@*****.**").Value); Assert.Equal("#Duration", result.Property("*****@*****.**").Value); Assert.Equal("#Decimal", result.Property("*****@*****.**").Value); Assert.Equal("#Single", result.Property("*****@*****.**").Value); Assert.Equal("#Guid", result.Property("*****@*****.**").Value); Assert.Equal("#Int16", result.Property("*****@*****.**").Value); Assert.Equal("#Int64", result.Property("*****@*****.**").Value); Assert.Equal("#SByte", result.Property("*****@*****.**").Value); Assert.Equal("#DateTimeOffset", result.Property("*****@*****.**").Value); } }
public async Task ODataCountAndNextLinkAnnotationsAppearsOnAllMetadataLevelsWhenSpecified(string acceptHeader) { //Arrange StubEntity[] entities = MetadataTestHelpers.CreateInstances <StubEntity[]>(); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, BaseAddress.ToLowerInvariant() + "/StubEntity/Default.Paged"); message.SetAcceptHeader(acceptHeader); string expectedNextLink = new Uri("http://*****:*****@odata.count", result); JsonAssert.PropertyEquals(expectedNextLink, "@odata.nextLink", result); }
public async Task MetadataIsCorrectForThePropertiesOfAnEntryWithJustPrimitiveTypeProperties( string acceptHeader, string propertyName, string edmType) { // Arrange EntityWithSimpleProperties entity = MetadataTestHelpers.CreateInstances <EntityWithSimpleProperties[]>() .FirstOrDefault(); Assert.NotNull(entity); string expectedContextUrl = BaseAddress + "/$metadata#EntityWithSimpleProperties(" + entity.Id + ")/" + propertyName; string[] inferableTypes = new string[] { "Edm.Int32", "Edm.Double", "Edm.String", "Edm.Boolean" }; // Act var entryUrl = BaseAddress + "/EntityWithSimpleProperties(" + entity.Id + ")/" + propertyName; var response = await Client.GetWithAcceptAsync(entryUrl, acceptHeader); var result = await response.Content.ReadAsObject <JObject>(); // Assert if (acceptHeader.Contains("odata.metadata=none")) { JsonAssert.DoesNotContainProperty("@odata.*", result); } else { ODataUrlAssert.UrlEquals(expectedContextUrl, result, "@odata.context", BaseAddress); if (!acceptHeader.Contains("odata.metadata=full") || (inferableTypes.Contains(edmType) && !result.IsSpecialValue())) { JsonAssert.DoesNotContainProperty("@odata.type", result); } else { var unqualifiedTypename = "#" + edmType.Substring(4); JsonAssert.PropertyEquals(unqualifiedTypename, "@odata.type", result); } } }
public async Task CanFollowGeneratedNavigationLinks(string acceptHeader) { //Arrange OneToOneParent[] entities = MetadataTestHelpers.CreateInstances <OneToOneParent[]>(); OneToOneChild[] childEntities = entities.Select(x => x.Child).ToArray(); JArray returnedChildEntities = new JArray(); JArray returnedParentEntities; int[] returnedChildrenIdentities; string requestUrl = BaseAddress.ToLowerInvariant() + "/Relationships/OneToOneParent"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl); request.SetAcceptHeader(acceptHeader); //Act HttpResponseMessage response = await Client.SendAsync(request); JObject result = await response.Content.ReadAsObject <JObject>(); returnedParentEntities = (JArray)result["value"]; for (int i = 0; i < returnedParentEntities.Count; i++) { string childUrl = (string)returnedParentEntities[i]["*****@*****.**"]; HttpRequestMessage childRequest = new HttpRequestMessage(HttpMethod.Get, childUrl); HttpResponseMessage childResponse = await Client.SendAsync(childRequest); JObject childEntry = await childResponse.Content.ReadAsObject <JObject>(); returnedChildEntities.Add(childEntry); } returnedChildrenIdentities = returnedChildEntities.Select(x => (int)x["Id"]).ToArray(); //Assert foreach (var returnedChildEntityId in returnedChildrenIdentities) { Assert.Contains(childEntities, (x) => x.Id == returnedChildEntityId); } }
public async Task MetadataAnnotationAppearsOnlyForFullAndMinimalMetadata(string acceptHeader) { //Arrange StubEntity[] entities = MetadataTestHelpers.CreateInstances <StubEntity[]>(); HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, BaseAddress.ToLowerInvariant() + "/StubEntity/"); message.SetAcceptHeader(acceptHeader); string expectedMetadataUrl = BaseAddress.ToLowerInvariant() + "/$metadata#StubEntity"; //Act HttpResponseMessage response = await Client.SendAsync(message); JObject result = await response.Content.ReadAsObject <JObject>(); //Assert if (acceptHeader.Contains("odata.metadata=none")) { JsonAssert.DoesNotContainProperty("@odata.context", result); } else { JsonAssert.PropertyEquals(expectedMetadataUrl, "@odata.context", result); } }
public async Task CanReturnTheWholeResultSetUsingNextLink(string acceptHeader) { //Arrange StubEntity[] entities = MetadataTestHelpers.CreateInstances <StubEntity[]>(); string nextUrlToQuery = BaseAddress.ToLowerInvariant() + "/StubEntity/"; JToken token = null; JArray returnedEntities = new JArray(); JObject result = null; //Act do { HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get, nextUrlToQuery); message.SetAcceptHeader(acceptHeader); HttpResponseMessage response = await Client.SendAsync(message); result = await response.Content.ReadAsObject <JObject>(); JArray currentResults = (JArray)result["value"]; for (int i = 0; i < currentResults.Count; i++) { returnedEntities.Add(currentResults[i]); } if (result.TryGetValue("@odata.nextLink", out token)) { nextUrlToQuery = (string)token; } else { nextUrlToQuery = null; } }while (nextUrlToQuery != null); //Assert Assert.Equal(entities.Length, returnedEntities.Count); }