public void BuildEditLink_ThrowsArgumentNull_InstanceContext() { // Arrange NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_customers, _model); // Act & Assert ExceptionAssert.ThrowsArgumentNull(() => linkBuilder.BuildEditLink(null, ODataMetadataLevel.Full, null), "instanceContext"); }
public void BuildEditLink_WhenEditLinkIsSameAsIdLink_And_IsNotSet(bool followsConventions, ODataMetadataLevel metadataLevel) { // Arrange _entitySet.HasIdLink(new SelfLinkBuilder <Uri>((context) => new Uri("http://selflink/"), followsConventions)); NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_entitySet); // Act Uri generatedEditLink = linkBuilder.BuildEditLink(new ResourceContext(), (ODataMetadataLevel)metadataLevel, new Uri("http://selflink")); // Assert Assert.Null(generatedEditLink); }
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 BuildEditLink_WhenEditLinkIsNotSameAsIdLink(bool followsConventions, ODataMetadataLevel metadataLevel, bool linkEmitted) { // Arrange _entitySet.HasEditLink(new SelfLinkBuilder <Uri>((context) => new Uri("http://editlink/"), followsConventions)); NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_entitySet); // Act Uri generatedEditLink = linkBuilder.BuildEditLink(new ResourceContext(), metadataLevel, new Uri("http://selflink")); // Assert if (linkEmitted) { Assert.Equal("http://editlink/", generatedEditLink.AbsoluteUri); } else { Assert.Null(generatedEditLink); } }
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); }