示例#1
0
    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);
        }
示例#5
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
        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));
        }
示例#11
0
 public static ODataNavigationSourceSegment ConvertTo(this EntitySetSegmentTemplate entitySet)
 {
     return(new ODataNavigationSourceSegment(entitySet.EntitySet));
 }