Exemplo n.º 1
0
        public void NestedTopAndSkipAndCountWithValidExpression()
        {
            // Arrange
            SelectToken select = ParseSelectToken("FavoriteColors($skip=4;$count=false;$top=2)");

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken: select);

            // Assert
            Assert.NotNull(clause);
            Assert.NotNull(clause.SelectedItems);

            // FavoriteColors
            SelectItem     selectItem    = Assert.Single(clause.SelectedItems);
            PathSelectItem subPathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.NotNull(subPathSelect.SkipOption);
            Assert.Equal(4, subPathSelect.SkipOption.Value);

            Assert.NotNull(subPathSelect.CountOption);
            Assert.False(subPathSelect.CountOption.Value);

            Assert.NotNull(subPathSelect.TopOption);
            Assert.Equal(2, subPathSelect.TopOption.Value);
        }
Exemplo n.º 2
0
        public void MultiLevelExpandTermTokenWorks()
        {
            // Arrange: $expand=MyDog($expand=MyPeople)
            ExpandTermToken innerExpandTerm = new ExpandTermToken(new NonSystemToken("MyPeople", null, null));
            ExpandTermToken outerExpandTerm = new ExpandTermToken(new NonSystemToken("MyDog", null, null), null,
                                                                  new ExpandToken(new ExpandTermToken[] { innerExpandTerm }));
            ExpandToken expandToken = new ExpandToken(new ExpandTermToken[] { outerExpandTerm });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken, null);

            // Assert
            Assert.True(clause.AllSelected);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            ExpandedNavigationSelectItem expandedItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp());

            // sub-level
            Assert.NotNull(expandedItem.SelectAndExpand);
            Assert.True(expandedItem.SelectAndExpand.AllSelected);
            selectItem   = Assert.Single(expandedItem.SelectAndExpand.SelectedItems);
            expandedItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetDogMyPeopleNavProp());

            // sub-sub level
            Assert.NotNull(expandedItem.SelectAndExpand);
        }
Exemplo n.º 3
0
        public void SelectIsBasedOnTheCurrentLevel()
        {
            // Arrange: $expand=MyDog($select=Color;$expand=MyPeople;)
            ExpandTermToken innerExpandTerm = new ExpandTermToken(new NonSystemToken("MyPeople", null, null));
            ExpandTermToken outerExpandTerm = new ExpandTermToken(new NonSystemToken("MyDog", null, null),
                                                                  new SelectToken(new List <PathSegmentToken>()
            {
                new NonSystemToken("Color", null, null)
            }),
                                                                  new ExpandToken(new ExpandTermToken[] { innerExpandTerm }));
            ExpandToken expandToken = new ExpandToken(new ExpandTermToken[] { outerExpandTerm });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken, null);

            // $expand=MyDog
            Assert.True(clause.AllSelected);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);
            ExpandedNavigationSelectItem expandedItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp());

            // Sub-level ($select=Color;$expand=MyPeople;)
            SelectExpandClause subSelectExpand = expandedItem.SelectAndExpand;

            Assert.False(subSelectExpand.AllSelected);
            Assert.Equal(2, subSelectExpand.SelectedItems.Count());
            selectItem   = Assert.Single(subSelectExpand.SelectedItems, x => x is ExpandedNavigationSelectItem);
            expandedItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetDogMyPeopleNavProp());

            Assert.NotNull(expandedItem.SelectAndExpand);
        }
Exemplo n.º 4
0
        public void EntitySetCorrectlyPopulatedAtEachLevel()
        {
            // Arrange: $expand=MyDog($expand=MyPeople;)
            ExpandTermToken innerExpandTerm = new ExpandTermToken(new NonSystemToken("MyPeople", null, null));
            ExpandTermToken outerExpandTerm = new ExpandTermToken(new NonSystemToken("MyDog", null, null),
                                                                  null,
                                                                  new ExpandToken(new ExpandTermToken[] { innerExpandTerm }));
            ExpandToken expandToken = new ExpandToken(new ExpandTermToken[] { outerExpandTerm });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken, null);

            // Assert
            SelectItem selectItem = Assert.Single(clause.SelectedItems);
            ExpandedNavigationSelectItem myDogExpandItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp());

            Assert.Same(HardCodedTestModel.GetDogsSet(), myDogExpandItem.NavigationSource);

            // Sub-level ($expand=MyPeople)
            Assert.NotNull(myDogExpandItem.SelectAndExpand);
            selectItem = Assert.Single(myDogExpandItem.SelectAndExpand.SelectedItems);
            ExpandedNavigationSelectItem myPeopleExpandItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetDogMyPeopleNavProp());

            Assert.Same(HardCodedTestModel.GetPeopleSet(), myPeopleExpandItem.NavigationSource);

            // Sub-sub-level
            Assert.NotNull(myPeopleExpandItem.SelectAndExpand);
        }
Exemplo n.º 5
0
        public void NestedSelectWithValidExpressionOnCollection()
        {
            // Arrange
            SelectToken select = ParseSelectToken("PreviousAddresses($select=Street)");

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken: select);

            // Assert
            Assert.NotNull(clause);

            // only one top level $select
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            // it should be "PathSelectItem
            PathSelectItem pathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.NotNull(pathSelect.SelectAndExpand);

            // Street
            selectItem = Assert.Single(pathSelect.SelectAndExpand.SelectedItems);
            PathSelectItem subPathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.Equal("Street", subPathSelect.SelectedPath.ToResourcePathString(ODataUrlKeyDelimiter.Parentheses));
            Assert.NotNull(subPathSelect.SelectAndExpand);
        }
Exemplo n.º 6
0
        public void SelectWildcardStoresSubsumed()
        {
            // Arrange: $select=Name,*,Birthdate
            SelectToken selectToken = new SelectToken(
                new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Name", null, null)),
                new SelectTermToken(new NonSystemToken("*", null, null)),
                new SelectTermToken(new NonSystemToken("Birthdate", null, null)),
            });


            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            WildcardSelectItem wildcardSelectItem = Assert.Single(clause.SelectedItems) as WildcardSelectItem;

            Assert.NotNull(wildcardSelectItem);

            SelectItem[] subsumedSelectItems = wildcardSelectItem.SubsumedSelectItems.ToArray();
            Assert.Equal(2, subsumedSelectItems.Length);
            subsumedSelectItems[0].ShouldBePathSelectionItem(new ODataPath(new PropertySegment(HardCodedTestModel.GetPersonNameProp())));
            subsumedSelectItems[1].ShouldBePathSelectionItem(new ODataPath(new PropertySegment(HardCodedTestModel.GetPersonBirthdateProp())));
        }
Exemplo n.º 7
0
        public void AllSelectedIsSetIfSelectIsEmpty()
        {
            // Arrange & Act
            SelectExpandClause clause = BinderForPerson.Bind(new ExpandToken(), selectToken: null);

            // Assert
            Assert.NotNull(clause);
            Assert.True(clause.AllSelected);
        }
        public void BindReturnsNotNullForNullExpandAndSelect()
        {
            // Arrange & Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken: null);

            // Assert
            Assert.NotNull(clause);
            Assert.True(clause.AllSelected);
            Assert.Empty(clause.SelectedItems);
        }
Exemplo n.º 9
0
        public void NonNavigationPropertyThrowsUsefulErrorIfKnobIsNotFlipped()
        {
            // Arrange: $expand=Shoe
            ExpandToken expandToken = new ExpandToken(new ExpandTermToken[] { new ExpandTermToken(new NonSystemToken("Shoe", null, null)) });

            // Act
            Action test = () => BinderForPerson.Bind(expandToken, null);

            test.Throws <ODataException>(ODataErrorStrings.ExpandItemBinder_PropertyIsNotANavigationPropertyOrComplexProperty("Shoe", HardCodedTestModel.GetPersonType().FullName()));
        }
Exemplo n.º 10
0
        public void NonexistentPropertyThrowsUsefulError()
        {
            // Arrange: $expand=Blah
            ExpandToken expandToken = new ExpandToken(new[] { new ExpandTermToken(new NonSystemToken("Blah", null, null)) });

            // Act & Assert
            Action test = () => BinderForPerson.Bind(expandToken, null);

            test.Throws <ODataException>(ODataErrorStrings.MetadataBinder_PropertyNotDeclared(HardCodedTestModel.GetPersonType().FullName(), "Blah"));
        }
Exemplo n.º 11
0
        public void QueryOptionsNestedInNotAllowedSelectionThrows(string select, string identifier)
        {
            // Arrange
            SelectToken selectToken = ParseSelectToken(select);

            // Act
            Action test = () => BinderForPerson.Bind(null, selectToken);

            // Assert
            test.Throws <ODataException>(Strings.SelectExpandBinder_InvalidQueryOptionNestedSelection(identifier));
        }
Exemplo n.º 12
0
        public void BindingOnTreeWithWithMultipleNavPropPathsThrows()
        {
            // Arrange: $expand=MyDog/MyPeople
            NonSystemToken innerSegment = new NonSystemToken("MyPeople", null, null);
            NonSystemToken navProp      = new NonSystemToken("MyDog", null, innerSegment);
            ExpandToken    expandToken  = new ExpandToken(new ExpandTermToken[] { new ExpandTermToken(navProp) });

            // Act & Assert
            Action test = () => BinderForPerson.Bind(expandToken, null);

            test.Throws <ODataException>(ODataErrorStrings.ExpandItemBinder_TraversingMultipleNavPropsInTheSamePath);
        }
Exemplo n.º 13
0
        public void SystemTokenInSelectionThrows()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Shoe", null, new SystemToken("$value", null)))
            });

            // Act
            Action test = () => BinderForPerson.Bind(null, selectToken);

            // Assert
            test.Throws <ODataException>(Strings.SelectExpandBinder_SystemTokenInSelect("$value"));
        }
Exemplo n.º 14
0
        public void InvlidIdentifierInSelectionThrows()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Dotted.Name", null, null))
            });

            // Act
            Action test = () => BinderForPerson.Bind(null, selectToken);

            // Assert
            test.Throws <ODataException>(Strings.MetadataBinder_InvalidIdentifierInQueryOption("Dotted.Name"));
        }
Exemplo n.º 15
0
        public void MultiLevelPathAfterNavigationPropertyThrows()
        {
            // Arrange : $select=MyDog/Color
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("MyDog", null, new NonSystemToken("Color", null, null)))
            });

            // Act
            Action test = () => BinderForPerson.Bind(null, selectToken);

            // Assert
            test.Throws <ODataException>(Strings.SelectBinder_MultiLevelPathInSelect);
        }
Exemplo n.º 16
0
        public void CustomFunctionsThrow()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("GetCoolPeople", null, null))
            });

            // Act
            Action test = () => BinderForPerson.Bind(null, selectToken);

            // Assert
            test.Throws <ODataException>(Strings.MetadataBinder_PropertyNotDeclared(HardCodedTestModel.GetPersonType(), "GetCoolPeople"));
        }
Exemplo n.º 17
0
        public void FunctionCallsInSelectTreeThrows()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("substring", null, null))
            });

            // Act
            Action test = () => BinderForPerson.Bind(null, selectToken);

            // Arrange
            test.Throws <ODataException>(Strings.MetadataBinder_PropertyNotDeclared(HardCodedTestModel.GetPersonType(), "substring"));
        }
Exemplo n.º 18
0
        public void AllSelectedIsNotSetIfSelectedIsNotEmpty()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Name", null, null)) // normal property
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
        }
Exemplo n.º 19
0
        public void NestedSkipWithValidExpression()
        {
            SelectToken select = ParseSelectToken("FavoriteColors($skip=5)");

            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken: select);

            Assert.NotNull(clause);
            Assert.NotNull(clause.SelectedItems);

            // FavoriteColors
            SelectItem     selectItem    = Assert.Single(clause.SelectedItems);
            PathSelectItem subPathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.NotNull(subPathSelect.SkipOption);
            Assert.Equal(5, subPathSelect.SkipOption.Value);
        }
Exemplo n.º 20
0
        public void LowerLevelEmptySelectedItemsListDoesNotThrow()
        {
            // Arrange
            ExpandToken     lowerLevelExpand        = new ExpandToken(new List <ExpandTermToken>());
            ExpandTermToken topLevelExpandTermToken = new ExpandTermToken(new NonSystemToken("MyDog", /*namedValues*/ null, /*nextToken*/ null), null, lowerLevelExpand);
            ExpandToken     topLevelExpand          = new ExpandToken(new List <ExpandTermToken>()
            {
                topLevelExpandTermToken
            });

            // Act
            Action bindWithEmptySelectedItemsList = () => BinderForPerson.Bind(topLevelExpand, null);

            // Assert
            var ex = Record.Exception(bindWithEmptySelectedItemsList);

            Assert.Null(ex);
        }
Exemplo n.º 21
0
        public void WildcardSelectionItemPreemptsStructuralProperties()
        {
            // Arrange : $select=*
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("*", null, null))
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            selectItem.ShouldBeWildcardSelectionItem();
        }
Exemplo n.º 22
0
        public void NavigationPropertyEndPathResultsInNavPropLinkSelectionItem()
        {
            // Arrange: $select=MyDog
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("MyDog", null, null))
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            selectItem.ShouldBePathSelectionItem(new ODataPath(new NavigationPropertySegment(HardCodedTestModel.GetPersonMyDogNavProp(), null)));
        }
Exemplo n.º 23
0
        public void SingleLevelExpandTermTokenWorks()
        {
            // Arrange
            ExpandTermToken expandTermToken = new ExpandTermToken(new NonSystemToken("MyDog", null, null));
            ExpandToken     expandToken     = new ExpandToken(new ExpandTermToken[] { expandTermToken });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken, null);

            // Arrange
            Assert.NotNull(clause);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            ExpandedNavigationSelectItem expandedItem = selectItem.ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp());

            Assert.NotNull(expandedItem);
            Assert.NotNull(expandedItem.SelectAndExpand);
        }
Exemplo n.º 24
0
        public void NonSystemTokenTranslatedToSelectionItem()
        {
            // Arrange: $select=Shoe
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Shoe", null, null))
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            selectItem.ShouldBePathSelectionItem(new ODataPath(new PropertySegment(HardCodedTestModel.GetPersonShoeProp())));
        }
Exemplo n.º 25
0
        public void ExistingWildcardPreemptsAnyNewPropertiesAdded()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("*", null, null)),   // *
                new SelectTermToken(new NonSystemToken("Name", null, null)) // normal property
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);

            selectItem.ShouldBeWildcardSelectionItem();
        }
Exemplo n.º 26
0
        public void NamespaceWildcardSelectionItemPreemptsStructuralProperties()
        {
            // Arrange : $select=*
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Fully.Qualified.Namespace.*", null, null))
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            SelectItem selectItem = Assert.Single(clause.SelectedItems);
            NamespaceQualifiedWildcardSelectItem namespaceSelectItem = Assert.IsType <NamespaceQualifiedWildcardSelectItem>(selectItem);

            Assert.Equal("Fully.Qualified.Namespace", namespaceSelectItem.Namespace);
        }
Exemplo n.º 27
0
        public void NestedCountWithValidExpression()
        {
            // Assert
            SelectToken select = ParseSelectToken("FavoriteColors($count=true)");

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken: select);

            // Assert
            Assert.NotNull(clause);
            Assert.NotNull(clause.SelectedItems);

            // FavoriteColors
            SelectItem     selectItem    = Assert.Single(clause.SelectedItems);
            PathSelectItem subPathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.NotNull(subPathSelect.CountOption);
            Assert.True(subPathSelect.CountOption.Value);
        }
Exemplo n.º 28
0
        public void MustFindNonTypeSegmentBeforeTheEndOfTheChain()
        {
            // Arrange
            SelectToken selectToken = new SelectToken(new SelectTermToken[]
            {
                new SelectTermToken(new NonSystemToken("Fully.Qualified.Namespace.Employee", null, new NonSystemToken("WorkEmail", null, null)))
            });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(null, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            SelectItem     selectItem    = Assert.Single(clause.SelectedItems);
            PathSelectItem subPathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.Equal("Fully.Qualified.Namespace.Employee/WorkEmail", subPathSelect.SelectedPath.ToResourcePathString(ODataUrlKeyDelimiter.Parentheses));
        }
        public void SelectedAndExpandedNavPropProduceExpandedNavPropSelectionItemAndPathSelectionItem()
        {
            // Arrange: $select=MyDog&$expand=MyDog
            ExpandTermToken innerExpandTermToken = new ExpandTermToken(new NonSystemToken("MyDog", null, null));
            ExpandToken     expandToken          = new ExpandToken(new ExpandTermToken[] { innerExpandTermToken });

            SelectTermToken innerSelectTermToken = new SelectTermToken(new NonSystemToken("MyDog", null, null));
            SelectToken     selectToken          = new SelectToken(new SelectTermToken[] { innerSelectTermToken });

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken, selectToken);

            // Assert
            Assert.NotNull(clause);
            Assert.False(clause.AllSelected);
            Assert.Equal(2, clause.SelectedItems.Count());

            clause.SelectedItems.First().ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp());
            clause.SelectedItems.Last().ShouldBePathSelectionItem(new ODataPath(new NavigationPropertySegment(HardCodedTestModel.GetPersonMyDogNavProp(), HardCodedTestModel.GetPeopleSet())));
        }
Exemplo n.º 30
0
        public void NestedFilterWithValidExpression()
        {
            // Arrange
            SelectToken select = ParseSelectToken("PreviousAddresses($filter=Street eq 'abc')");

            // Act
            SelectExpandClause clause = BinderForPerson.Bind(expandToken: null, selectToken: select);

            // Assert
            Assert.NotNull(clause);
            Assert.NotNull(clause.SelectedItems);

            SelectItem     selectItem    = Assert.Single(clause.SelectedItems);
            PathSelectItem subPathSelect = Assert.IsType <PathSelectItem>(selectItem);

            Assert.Equal("PreviousAddresses", subPathSelect.SelectedPath.FirstSegment.Identifier);

            Assert.NotNull(subPathSelect.FilterOption);
            subPathSelect.FilterOption.Expression.ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal);
        }