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); }
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); }
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); }
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); }
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"); }