public void BuildIdLink_DoesNotThrow_IfJsonAndIdLinkBuilderIsNull(object metadataLevel) { NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_entitySet); ExceptionAssert.DoesNotThrow( () => linkBuilder.BuildIdLink(new ResourceContext(), (ODataMetadataLevel)metadataLevel)); }
public void BuildIdLink_ThrowsArgumentNull_InstanceContext() { // Arrange NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_customers, _model); // Act & Assert ExceptionAssert.ThrowsArgumentNull(() => linkBuilder.BuildIdLink(null, ODataMetadataLevel.Full), "instanceContext"); }
public static Uri GenerateODataLink(HttpRequestMessage request, object entity, bool isEntityId) { EntityInstanceContext entityContext = CreateEntityInstanceContext(request, entity); Contract.Assert(entityContext != null); // Generate location or entityId header from request Uri and key, if Post to a containment. // Link builder is not used, since it is also for generating ID, Edit, Read links, etc. scenarios, where // request Uri is not used. if (entityContext.NavigationSource.NavigationSourceKind() == EdmNavigationSourceKind.ContainedEntitySet) { return(GenerateContainmentODataPathSegments(entityContext, isEntityId)); } NavigationSourceLinkBuilderAnnotation linkBuilder = entityContext.EdmModel.GetNavigationSourceLinkBuilder(entityContext.NavigationSource); Contract.Assert(linkBuilder != null); Uri idLink = linkBuilder.BuildIdLink(entityContext); if (isEntityId) { if (idLink == null) { throw Error.InvalidOperation( SRResources.IdLinkNullForEntityIdHeader, entityContext.NavigationSource.Name); } return(idLink); } Uri editLink = linkBuilder.BuildEditLink(entityContext); if (editLink == null) { if (idLink != null) { return(idLink); } throw Error.InvalidOperation( SRResources.EditLinkNullForLocationHeader, entityContext.NavigationSource.Name); } return(editLink); }
public void Ctor_FollowingConventions_GeneratesSelfLinkWithCast_IfDerivedTypeHasNavigationProperty() { // Arrange CustomersModelWithInheritance model = new CustomersModelWithInheritance(); var request = RequestFactory.CreateFromModel(model.Model); ODataSerializerContext serializerContext = ODataSerializerContextFactory.Create(model.Model, model.Customers, request); ResourceContext instanceContext = new ResourceContext(serializerContext, model.SpecialCustomer.AsReference(), new { ID = 42 }); // Act NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(model.Customers, model.Model); var result = linkBuilder.BuildIdLink(instanceContext, ODataMetadataLevel.FullMetadata); // Assert Assert.Equal("http://localhost/Customers(42)/NS.SpecialCustomer", result.ToString()); }
private static Uri GetNestedNextPageLink(ODataSerializerContext writeContext, int pageSize, object obj) { Contract.Assert(writeContext.ExpandedResource != null); Uri navigationLink; IEdmNavigationSource sourceNavigationSource = writeContext.ExpandedResource.NavigationSource; NavigationSourceLinkBuilderAnnotation linkBuilder = writeContext.Model.GetNavigationSourceLinkBuilder(sourceNavigationSource); // In Contained Navigation, we don't have navigation property binding, // Hence we cannot get the NavigationLink from the NavigationLinkBuilder if (writeContext.NavigationSource.NavigationSourceKind() == EdmNavigationSourceKind.ContainedEntitySet) { // Contained navigation. Uri idlink = linkBuilder.BuildIdLink(writeContext.ExpandedResource); var link = idlink.ToString() + "/" + writeContext.NavigationProperty.Name; navigationLink = new Uri(link); } else { // Non-Contained navigation. navigationLink = linkBuilder.BuildNavigationLink(writeContext.ExpandedResource, writeContext.NavigationProperty); } Uri nestedNextLink = GenerateQueryFromExpandedItem(writeContext, navigationLink); SkipTokenHandler nextLinkGenerator = null; if (writeContext.QueryContext != null) { nextLinkGenerator = writeContext.QueryContext.GetSkipTokenHandler(); } if (nestedNextLink != null) { if (nextLinkGenerator != null) { return(nextLinkGenerator.GenerateNextPageLink(nestedNextLink, pageSize, obj, writeContext)); } return(GetNextPageHelper.GetNextPageLink(nestedNextLink, pageSize)); } return(null); }
public void BuildIdLink(bool followsConventions, ODataMetadataLevel metadataLevel, bool linkEmitted) { // Arrange _entitySet.HasIdLink(new SelfLinkBuilder <Uri>((context) => new Uri("http://selflink"), followsConventions)); NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_entitySet); // Act Uri generatedIdLink = linkBuilder.BuildIdLink(new ResourceContext(), (ODataMetadataLevel)metadataLevel); // Assert if (linkEmitted) { Assert.Equal(new Uri("http://selflink"), generatedIdLink); } else { Assert.Null(generatedIdLink); } }
internal Uri GenerateLocationHeader() { EntityInstanceContext entityContext = CreateEntityInstanceContext(Request, Entity); Contract.Assert(entityContext != null); NavigationSourceLinkBuilderAnnotation linkBuilder = entityContext.EdmModel.GetNavigationSourceLinkBuilder(entityContext.NavigationSource); Contract.Assert(linkBuilder != null); Uri idLink = linkBuilder.BuildIdLink(entityContext, ODataMetadataLevel.Default); Uri editLink = linkBuilder.BuildEditLink(entityContext, ODataMetadataLevel.Default, idLink); if (editLink == null) { throw Error.InvalidOperation(SRResources.EditLinkNullForLocationHeader, entityContext.NavigationSource.Name); } return(editLink); }