コード例 #1
0
        public void BuildEditLink_ThrowsArgumentNull_InstanceContext()
        {
            // Arrange
            NavigationSourceLinkBuilderAnnotation linkBuilder = new NavigationSourceLinkBuilderAnnotation(_customers, _model);

            // Act & Assert
            ExceptionAssert.ThrowsArgumentNull(() => linkBuilder.BuildEditLink(null, ODataMetadataLevel.Full, null), "instanceContext");
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }