public void GenerateActionLink_ThrowsArgumentNull_EntityContext()
        {
            ResourceContext  entityContext = null;
            IEdmActionImport action        = new Mock <IEdmActionImport>().Object;

            ExceptionAssert.ThrowsArgumentNull(() => entityContext.GenerateActionLink(action.Action), "resourceContext");
        }
        public void GenerateActionLink_GeneratesLinkWithoutCast_IfEntitySetTypeMatchesActionEntityType()
        {
            // Arrange
            var request           = RequestFactory.CreateFromModel(_model.Model);
            var serializerContext = ODataSerializerContextFactory.Create(_model.Model, _model.Customers, request);
            var entityContext     = new ResourceContext(serializerContext, _model.Customer.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.UpgradeCustomer);

            Assert.Equal("http://localhost/Customers(42)/NS.upgrade", link.AbsoluteUri);
        }
        public void GenerateActionLink_ReturnsNull_ForContainment()
        {
            // Arrange
            var request           = RequestFactory.CreateFromModel(_model.Model);
            var serializerContext = ODataSerializerContextFactory.Create(_model.Model, _model.OrderLines, request);
            var entityContext     = new ResourceContext(serializerContext, _model.OrderLine.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.Tag);

            // Assert
            Assert.Null(link);
        }
        public void GenerateActionLink_GeneratesLinkWithCast_IfEntitySetTypeDoesnotMatchActionEntityType_ForSingleton()
        {
            // Arrange
            var request           = RequestFactory.CreateFromModel(_model.Model);
            var serializerContext = ODataSerializerContextFactory.Create(_model.Model, _model.Mary, request);
            var entityContext     = new ResourceContext(serializerContext, _model.SpecialCustomer.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.UpgradeSpecialCustomer);

            // Assert
            Assert.Equal("http://localhost/Mary/NS.SpecialCustomer/NS.specialUpgrade", link.AbsoluteUri);
        }
        public void GenerateActionLink_ThrowsActionNotBoundToEntity_IfActionHasNoParameters()
        {
            ResourceContext   entityContext = new ResourceContext();
            Mock <IEdmAction> action        = new Mock <IEdmAction>();

            action.Setup(a => a.Parameters).Returns(Enumerable.Empty <IEdmOperationParameter>());
            action.Setup(a => a.Name).Returns("SomeAction");

            ExceptionAssert.ThrowsArgument(
                () => entityContext.GenerateActionLink(action.Object),
                "action",
                "The action 'SomeAction' is not bound to an entity. Only actions that are bound to entities can have action links.");
        }
        public void GenerateActionLink_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType_ForSingleton()
        {
            // Arrange
            IEdmSingleton me                = new EdmSingleton(_model.Container, "Me", _model.SpecialCustomer);
            var           request           = RequestFactory.CreateFromModel(_model.Model);
            var           serializerContext = ODataSerializerContextFactory.Create(_model.Model, me, request);
            var           entityContext     = new ResourceContext(serializerContext, _model.SpecialCustomer.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.UpgradeCustomer);

            // Assert
            Assert.Equal("http://localhost/Me/NS.Customer/NS.upgrade", link.AbsoluteUri);
        }
        public void GenerateActionLink_GeneratesLinkWithoutCast_IfEntitySetTypeMatchesActionEntityType()
        {
            // Arrange
            HttpRequestMessage request = GetODataRequest(_model.Model);
            var serializerContext      = new ODataSerializerContext {
                Model = _model.Model, NavigationSource = _model.Customers, Url = request.GetUrlHelper()
            };
            var entityContext = new ResourceContext(serializerContext, _model.Customer.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.UpgradeCustomer);

            Assert.Equal("http://localhost/Customers(42)/NS.upgrade", link.AbsoluteUri);
        }
예제 #8
0
        public void GenerateActionLink_GeneratesLinkWithoutCast_IfEntitySetTypeMatchesActionEntityType()
        {
            // Arrange
            var        request           = RequestFactory.Create(_model);
            var        serializerContext = ODataSerializerContextFactory.Create(_model, _customers, request);
            var        entityContext     = new ResourceContext(serializerContext, _customer.AsReference(), new { ID = 42 });
            IEdmAction upgradeCustomer   = _model.SchemaElements.OfType <IEdmAction>().FirstOrDefault(c => c.Name == "upgrade");

            Assert.NotNull(upgradeCustomer);

            // Act
            Uri link = entityContext.GenerateActionLink(upgradeCustomer);

            Assert.Equal("http://localhost/Customers(42)/NS.upgrade", link.AbsoluteUri);
        }
        public void GenerateActionLink_ReturnsNull_ForContainment()
        {
            // Arrange
            HttpRequestMessage request = GetODataRequest(_model.Model);
            var serializerContext      = new ODataSerializerContext {
                Model = _model.Model, NavigationSource = _model.OrderLines, Url = request.GetUrlHelper()
            };
            var entityContext = new ResourceContext(serializerContext, _model.OrderLine.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.Tag);

            // Assert
            Assert.Null(link);
        }
        public void GenerateActionLink_GeneratesLinkWithCast_IfEntitySetTypeDoesnotMatchActionEntityType_ForSingleton()
        {
            // Arrange
            HttpRequestMessage request = GetODataRequest(_model.Model);
            var serializerContext      = new ODataSerializerContext {
                Model = _model.Model, NavigationSource = _model.Mary, Url = request.GetUrlHelper()
            };
            var entityContext = new ResourceContext(serializerContext, _model.SpecialCustomer.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.UpgradeSpecialCustomer);

            // Assert
            Assert.Equal("http://localhost/Mary/NS.SpecialCustomer/NS.specialUpgrade", link.AbsoluteUri);
        }
        public void GenerateActionLink_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType_ForSingleton()
        {
            // Arrange
            IEdmSingleton      me      = new EdmSingleton(_model.Container, "Me", _model.SpecialCustomer);
            HttpRequestMessage request = GetODataRequest(_model.Model);
            var serializerContext      = new ODataSerializerContext {
                Model = _model.Model, NavigationSource = me, Url = request.GetUrlHelper()
            };
            var entityContext = new ResourceContext(serializerContext, _model.SpecialCustomer.AsReference(), new { ID = 42 });

            // Act
            Uri link = entityContext.GenerateActionLink(_model.UpgradeCustomer);

            // Assert
            Assert.Equal("http://localhost/Me/NS.Customer/NS.upgrade", link.AbsoluteUri);
        }
예제 #12
0
        public void GenerateActionLink_GeneratesLinkWithDownCast_IfElementTypeDerivesFromBindingParameterType_ForSingleton()
        {
            // Arrange
            IEdmSingleton me                = new EdmSingleton(_model.EntityContainer, "Me", _specialCustomer);
            var           request           = RequestFactory.Create(_model);
            var           serializerContext = ODataSerializerContextFactory.Create(_model, me, request);
            var           entityContext     = new ResourceContext(serializerContext, _specialCustomer.AsReference(), new { ID = 42 });
            IEdmAction    upgradeCustomer   = _model.SchemaElements.OfType <IEdmAction>().FirstOrDefault(c => c.Name == "upgrade");

            Assert.NotNull(upgradeCustomer);

            // Act
            Uri link = entityContext.GenerateActionLink(upgradeCustomer);

            // Assert
            Assert.Equal("http://localhost/Me/NS.Customer/NS.upgrade", link.AbsoluteUri);
        }
예제 #13
0
        public void GenerateActionLink_GeneratesLinkWithCast_IfEntitySetTypeDoesnotMatchActionEntityType_ForSingleton()
        {
            // Arrange
            IEdmSingleton mary              = new EdmSingleton(_model.EntityContainer, "Mary", _customer);
            var           request           = RequestFactory.Create(_model);
            var           serializerContext = ODataSerializerContextFactory.Create(_model, mary, request);
            var           entityContext     = new ResourceContext(serializerContext, _specialCustomer.AsReference(), new { ID = 42 });
            IEdmAction    specialUpgrade    = _model.SchemaElements.OfType <IEdmAction>().FirstOrDefault(c => c.Name == "specialUpgrade");

            Assert.NotNull(specialUpgrade);

            // Act
            Uri link = entityContext.GenerateActionLink(specialUpgrade);

            // Assert
            Assert.Equal("http://localhost/Mary/NS.SpecialCustomer/NS.specialUpgrade", link.AbsoluteUri);
        }
예제 #14
0
        internal static Uri GenerateActionLink(this ResourceContext resourceContext, string bindingParameterType,
                                               string actionName)
        {
            Contract.Assert(resourceContext != null);
            if (resourceContext.NavigationSource is IEdmContainedEntitySet)
            {
                return(null);
            }

            if (resourceContext.EdmModel == null)
            {
                return(null);
            }

            IEdmModel         model         = resourceContext.EdmModel;
            IEdmTypeReference typeReference = model.FindDeclaredType(bindingParameterType).ToEdmTypeReference(true);
            IEdmOperation     operation     = model.FindDeclaredOperations(actionName).First();

            return(resourceContext.GenerateActionLink(typeReference, operation));
        }
        public void GenerateActionLink_ThrowsArgumentNull_Action()
        {
            ResourceContext entityContext = new ResourceContext();

            ExceptionAssert.ThrowsArgumentNull(() => entityContext.GenerateActionLink(action: null), "action");
        }