public bool AppliesToAction(ODataControllerActionContext context) { if (context.Action.ActionName == "Get") { var entitySet = context.Model.EntityContainer.FindEntitySet("Order Details"); var route = new EntitySetSegmentTemplate(entitySet); var parameters = context.Action.ActionMethod.GetParameters(); if (parameters.Length == 0) { var path = new ODataPathTemplate(route); context.Action.AddSelector("get", context.Prefix, context.Model, path, context.Options.RouteOptions); return(true); } if (parameters.Length == 2 && parameters[0].Name == "keyOrderId" && parameters[1].Name == "keyProductId") { var keys = new Dictionary <string, string> { { "OrderID", "{keyOrderId}" }, { "ProductID", "{keyProductId}" } }; var keyTemplate = new KeySegmentTemplate(keys, entitySet.EntityType(), entitySet); var path = new ODataPathTemplate(route, keyTemplate); context.Action.AddSelector("get", context.Prefix, context.Model, path, context.Options.RouteOptions); return(true); } } return(false); }
public void TryTranslateEntitySetSegmentTemplate_ThrowsArgumentNull_Context() { // Arrange EntitySetSegmentTemplate template = GetSegmentTemplate(out _); // Act & Assert ExceptionAssert.ThrowsArgumentNull(() => template.TryTranslate(null), "context"); }
public void CtorEntitySetSegmentTemplate_SetsProperties() { // Arrange & Act EntitySetSegmentTemplate segmentTemplate = GetSegmentTemplate(out EdmEntitySet entitySet); // Assert Assert.NotNull(segmentTemplate.Segment); Assert.Same(entitySet, segmentTemplate.EntitySet); }
public void GetTemplatesEntitySetSegmentTemplate_ReturnsTemplates() { // Arrange EntitySetSegmentTemplate segmentTemplate = GetSegmentTemplate(out _); // Act & Assert IEnumerable <string> templates = segmentTemplate.GetTemplates(); string template = Assert.Single(templates); Assert.Equal("/entities", template); }
public void ParseODataUriTemplate_ForEntitySet() { // Arrange IODataPathTemplateParser parser = new DefaultODataPathTemplateParser(); // Act ODataPathTemplate path = parser.Parse(_edmModel, "Customers", null); // Assert Assert.NotNull(path); ODataSegmentTemplate pathSegment = Assert.Single(path); EntitySetSegmentTemplate setSegment = Assert.IsType <EntitySetSegmentTemplate>(pathSegment); Assert.Equal("Customers", setSegment.EntitySet.Name); }
public void CommonEntitySetProperties_ReturnsAsExpected() { // Assert EdmEntityType entityType = new EdmEntityType("NS", "entity"); EdmEntityContainer container = new EdmEntityContainer("NS", "default"); EdmEntitySet entityset = new EdmEntitySet(container, "entities", entityType); EntitySetSegmentTemplate template = new EntitySetSegmentTemplate(new EntitySetSegment(entityset)); // Act & Assert Assert.Equal(ODataSegmentKind.EntitySet, template.Kind); Assert.Equal("entities", template.Literal); Assert.False(template.IsSingle); Assert.Equal(EdmTypeKind.Collection, template.EdmType.TypeKind); Assert.Same(entityset, template.NavigationSource); }
public void TryTranslateEntitySetSegmentTemplate_ReturnsODataEntitySetSegment() { // Arrange EntitySetSegmentTemplate template = GetSegmentTemplate(out EdmEntitySet entitySet); ODataTemplateTranslateContext context = new ODataTemplateTranslateContext(); // Act bool ok = template.TryTranslate(context); // Assert Assert.True(ok); ODataPathSegment actual = Assert.Single(context.Segments); EntitySetSegment setSegment = Assert.IsType <EntitySetSegment>(actual); Assert.Same(entitySet, setSegment.EntitySet); }
public void TryMatch_ReturnsFalse() { // Arrange EdmEntityType entityType = new EdmEntityType("NS", "entity"); EdmEntityContainer container = new EdmEntityContainer("NS", "default"); EdmEntitySet entityset1 = new EdmEntitySet(container, "entities1", entityType); EdmEntitySet entityset2 = new EdmEntitySet(container, "entities2", entityType); EntitySetSegmentTemplate template = new EntitySetSegmentTemplate(new EntitySetSegment(entityset1)); EntitySetSegment segment = new EntitySetSegment(entityset2); // Act Dictionary <string, object> values = new Dictionary <string, object>(); bool result = template.TryMatch(segment, values); // Assert Assert.False(result); }
public void Translate_ReturnsODataEntitySetSegment() { // Arrange EdmEntityType entityType = new EdmEntityType("NS", "entity"); EdmEntityContainer container = new EdmEntityContainer("NS", "default"); EdmEntitySet entityset = new EdmEntitySet(container, "entities", entityType); EntitySetSegmentTemplate template = new EntitySetSegmentTemplate(new EntitySetSegment(entityset)); ODataTemplateTranslateContext context = new ODataTemplateTranslateContext(); // Act ODataPathSegment actual = template.Translate(context); // Assert Assert.NotNull(actual); EntitySetSegment setSegment = Assert.IsType<EntitySetSegment>(actual); Assert.Same(entityset, setSegment.EntitySet); }
public static ODataPath Translate(this ODataPathTemplate pathTemplate) { if (pathTemplate.Count == 0) { // It's service root, so far, let's skip it. return(null); } IList <ODataSegment> newSegments = new List <ODataSegment>(); foreach (var segment in pathTemplate) { switch (segment.Kind) { case ODataSegmentKind.Metadata: newSegments.Add(new ODataMetadataSegment()); break; case ODataSegmentKind.EntitySet: EntitySetSegmentTemplate entitySet = (EntitySetSegmentTemplate)segment; newSegments.Add(entitySet.ConvertTo()); break; case ODataSegmentKind.Singleton: SingletonSegmentTemplate singleton = (SingletonSegmentTemplate)segment; newSegments.Add(singleton.ConvertTo()); break; case ODataSegmentKind.Key: KeySegmentTemplate key = (KeySegmentTemplate)segment; newSegments.Add(key.ConvertTo()); break; case ODataSegmentKind.Cast: CastSegmentTemplate cast = (CastSegmentTemplate)segment; newSegments.Add(cast.ConvertTo()); break; case ODataSegmentKind.Property: // TODO: return(null); //PropertySegmentTemplate property = (PropertySegmentTemplate)segment; //newSegments.Add(property.ConvertTo()); //break; case ODataSegmentKind.Navigation: NavigationSegmentTemplate navigation = (NavigationSegmentTemplate)segment; newSegments.Add(navigation.ConvertTo()); break; case ODataSegmentKind.Function: FunctionSegmentTemplate function = (FunctionSegmentTemplate)segment; newSegments.Add(function.ConvertTo()); break; case ODataSegmentKind.Action: ActionSegmentTemplate action = (ActionSegmentTemplate)segment; newSegments.Add(action.ConvertTo()); break; case ODataSegmentKind.FunctionImport: FunctionImportSegmentTemplate functionImport = (FunctionImportSegmentTemplate)segment; newSegments.Add(functionImport.ConvertTo()); break; case ODataSegmentKind.ActionImport: ActionImportSegmentTemplate actionImport = (ActionImportSegmentTemplate)segment; newSegments.Add(actionImport.ConvertTo()); break; case ODataSegmentKind.Value: return(null); //ValueSegmentTemplate value = (ValueSegmentTemplate)segment; //newSegments.Add(value.ConvertTo()); //break; case ODataSegmentKind.Ref: return(null); //KeySegmentTemplate key = (KeySegmentTemplate)segment; //newSegments.Add(key.ConvertTo()); //break; case ODataSegmentKind.NavigationLink: return(null); //NavigationLinkSegmentTemplate navigationLink = (NavigationLinkSegmentTemplate)segment; //newSegments.Add(navigationLink.ConvertTo()); //break; case ODataSegmentKind.Count: CountSegmentTemplate count = (CountSegmentTemplate)segment; newSegments.Add(count.ConvertTo()); break; case ODataSegmentKind.PathTemplate: return(null); //KeySegmentTemplate key = (KeySegmentTemplate)segment; //newSegments.Add(key.ConvertTo()); //break; case ODataSegmentKind.Dynamic: return(null); //KeySegmentTemplate key = (KeySegmentTemplate)segment; //newSegments.Add(key.ConvertTo()); //break; default: throw new NotSupportedException(); } } return(new ODataPath(newSegments)); }
public static ODataNavigationSourceSegment ConvertTo(this EntitySetSegmentTemplate entitySet) { return(new ODataNavigationSourceSegment(entitySet.EntitySet)); }