public void SourceIsSet()
        {
            var source = new ConstantNode(null);
            var node   = new SingleValuePropertyAccessNode(source, HardCodedTestModel.GetDogColorProp());

            node.Source.Should().BeSameAs(source);
        }
Пример #2
0
        public void TranslateWithPropertySetSegmentReturnsFalse()
        {
            IsCollectionTranslator translator = new IsCollectionTranslator();
            var segment = new PropertySegment(HardCodedTestModel.GetDogColorProp());

            Assert.False(translator.Translate(segment));
        }
Пример #3
0
        public void ExplicitPropertyAccessShouldCreatePropertyAccessQueryNode()
        {
            var token = new EndPathToken("Color", new RangeVariableToken("a"));
            EntityCollectionNode entityCollectionNode = new EntitySetNode(HardCodedTestModel.GetDogsSet());

            this.bindingState.RangeVariables.Push(new EntityRangeVariable("a", HardCodedTestModel.GetDogTypeReference(), entityCollectionNode));
            var result = this.propertyBinder.BindEndPath(token);

            result.ShouldBeSingleValuePropertyAccessQueryNode(HardCodedTestModel.GetDogColorProp()).
            And.Source.ShouldBeEntityRangeVariableReferenceNode("a");
        }
Пример #4
0
        public void GenerateQueryNodeShouldReturnQueryNode()
        {
            var property = HardCodedTestModel.GetDogColorProp();
            EntityCollectionNode entityCollectionNode = new EntitySetNode(HardCodedTestModel.GetDogsSet());
            EntityRangeVariable  rangeVariable        = new EntityRangeVariable("Color", HardCodedTestModel.GetDogTypeReference(), entityCollectionNode);
            var result = EndPathBinder.GeneratePropertyAccessQueryNode(
                new EntityRangeVariableReferenceNode(rangeVariable.Name, rangeVariable),
                property);

            result.ShouldBeSingleValuePropertyAccessQueryNode(property);
        }
Пример #5
0
        public void ParseWithAllQueryOptionsWithoutAlias()
        {
            ODataUriParser parser = new ODataUriParser(HardCodedTestModel.TestModel, new Uri("http://www.odata.com/OData/"), new Uri("http://www.odata.com/OData/Dogs?$select=Color, MyPeople&$expand=MyPeople&$filter=startswith(Color, 'Blue')&$orderby=Color asc"));

            parser.ParsePath().FirstSegment.ShouldBeEntitySetSegment(HardCodedTestModel.GetDogsSet());
            var myDogSelectedItems = parser.ParseSelectAndExpand().SelectedItems.ToList();

            myDogSelectedItems.Count.Should().Be(3);
            myDogSelectedItems[1].ShouldBePathSelectionItem(new ODataPath(new PropertySegment(HardCodedTestModel.GetDogColorProp())));
            var myPeopleExpansionSelectionItem = myDogSelectedItems[0].ShouldBeSelectedItemOfType <ExpandedNavigationSelectItem>().And;

            myPeopleExpansionSelectionItem.PathToNavigationProperty.Single().ShouldBeNavigationPropertySegment(HardCodedTestModel.GetDogMyPeopleNavProp());
            myPeopleExpansionSelectionItem.SelectAndExpand.SelectedItems.Should().BeEmpty();
            var startsWithArgs = parser.ParseFilter().Expression.ShouldBeSingleValueFunctionCallQueryNode("startswith").And.Parameters.ToList();

            startsWithArgs[0].ShouldBeSingleValuePropertyAccessQueryNode(HardCodedTestModel.GetDogColorProp());
            startsWithArgs[1].ShouldBeConstantQueryNode("Blue");
            var orderby = parser.ParseOrderBy();

            orderby.Direction.Should().Be(OrderByDirection.Ascending);
            orderby.Expression.ShouldBeSingleValuePropertyAccessQueryNode(HardCodedTestModel.GetDogColorProp());
        }
Пример #6
0
        public void ParseSelectExpand()
        {
            ODataUriParser parser    = new ODataUriParser(HardCodedTestModel.TestModel, new Uri("http://www.odata.com/OData"), new Uri("http://www.odata.com/OData/Dogs?$select=Color, MyPeople&$expand=MyPeople"));
            ODataUri       parsedUri = parser.ParseUri();

            parsedUri.SelectAndExpand.SelectedItems.Count().Should().Be(3);
            parsedUri.SelectAndExpand.SelectedItems.ElementAt(2).ShouldBePathSelectionItem(
                new ODataSelectPath(
                    new NavigationPropertySegment(HardCodedTestModel.GetDogMyPeopleNavProp(), HardCodedTestModel.GetPeopleSet())));

            parsedUri.SelectAndExpand.SelectedItems.ElementAt(1).ShouldBePathSelectionItem(
                new ODataSelectPath(new PropertySegment(HardCodedTestModel.GetDogColorProp())));

            var myPeopleExpand = parsedUri.SelectAndExpand.SelectedItems.First()
                                 .ShouldBeSelectedItemOfType <ExpandedNavigationSelectItem>().And;

            myPeopleExpand.PathToNavigationProperty.Single()
            .ShouldBeNavigationPropertySegment(HardCodedTestModel.GetDogMyPeopleNavProp());

            var myPeopleSelectExpand = myPeopleExpand.SelectAndExpand;

            myPeopleSelectExpand.AllSelected.Should().BeTrue();
            myPeopleSelectExpand.SelectedItems.Should().BeEmpty();
        }
Пример #7
0
        public void SelectIsBasedOnTheCurrentLevel()
        {
            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 });
            var         item        = this.binderForPerson.Bind(BuildUnifiedSelectExpandToken(expandToken));
            var         subExpand   =
                item.SelectedItems.First()
                .ShouldBeExpansionFor(HardCodedTestModel.GetPersonMyDogNavProp())
                .And.SelectAndExpand;

            subExpand.AllSelected.Should().BeFalse();
            subExpand.SelectedItems.Single(x => x is ExpandedNavigationSelectItem).ShouldBeExpansionFor(HardCodedTestModel.GetDogMyPeopleNavProp())
            .And.SelectAndExpand.AllSelected.Should().BeTrue();
            subExpand.SelectedItems.Last(x => x is PathSelectItem).ShouldBePathSelectionItem(new ODataPath(new PropertySegment(HardCodedTestModel.GetDogColorProp())));
        }
Пример #8
0
        public void ExpandWithNestedQueryOptionsShouldWork()
        {
            var ervFilter  = new ResourceRangeVariable(ExpressionConstants.It, HardCodedTestModel.GetDogTypeReference(), HardCodedTestModel.GetDogsSet());
            var ervOrderby = new ResourceRangeVariable(ExpressionConstants.It, HardCodedTestModel.GetDogTypeReference(), HardCodedTestModel.GetDogsSet());
            var expand     =
                new ExpandedNavigationSelectItem(
                    new ODataExpandPath(new NavigationPropertySegment(HardCodedTestModel.GetPersonMyDogNavProp(), null)),
                    HardCodedTestModel.GetPeopleSet(),
                    null,
                    new FilterClause(
                        new BinaryOperatorNode(
                            BinaryOperatorKind.Equal,
                            new SingleValuePropertyAccessNode(new ResourceRangeVariableReferenceNode("$it", ervFilter), HardCodedTestModel.GetDogColorProp()),
                            new ConstantNode("Brown", "'Brown'")),
                        ervFilter),
                    new OrderByClause(
                        null,
                        new SingleValuePropertyAccessNode(new ResourceRangeVariableReferenceNode("$it", ervOrderby), HardCodedTestModel.GetDogColorProp()),
                        OrderByDirection.Ascending,
                        ervOrderby),
                    1,
                    /* skipOption */ null,
                    true,
                    new SearchClause(new SearchTermNode("termX")),
                    /* levelsOption*/ null);

            ODataUri uri = new ODataUri()
            {
                ServiceRoot     = new Uri("http://gobbledygook/"),
                Path            = new ODataPath(new EntitySetSegment(HardCodedTestModel.GetPeopleSet())),
                SelectAndExpand = new SelectExpandClause(new[] { expand }, true)
            };

            Uri actualUri = uri.BuildUri(ODataUrlKeyDelimiter.Parentheses);

            Assert.Equal("http://gobbledygook/People?$expand=" + Uri.EscapeDataString("MyDog($filter=Color eq 'Brown';$orderby=Color;$top=1;$count=true;$search=termX)"), actualUri.OriginalString);
        }
Пример #9
0
        public void OperationCanOnlyBeLastSegment()
        {
            List <ODataPathSegment> typeSegments = new List <ODataPathSegment>()
            {
                new TypeSegment(HardCodedTestModel.GetPersonType(), null), new OperationSegment(HardCodedTestModel.GetFunctionForGetCoolPeople(), HardCodedTestModel.GetPeopleSet()), new PropertySegment(HardCodedTestModel.GetDogColorProp())
            };
            Action createWithInteriorNavProp = () => new ODataSelectPath(typeSegments);

            createWithInteriorNavProp.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.ODataSelectPath_OperationSegmentCanOnlyBeLastSegment);
        }
Пример #10
0
        public void NavPropCanOnlyBeLastSegment()
        {
            List <ODataPathSegment> typeSegments = new List <ODataPathSegment>()
            {
                new TypeSegment(HardCodedTestModel.GetPersonType(), null), new NavigationPropertySegment(HardCodedTestModel.GetPersonMyDogNavProp(), null), new PropertySegment(HardCodedTestModel.GetDogColorProp())
            };
            Action createWithInteriorNavProp = () => new ODataSelectPath(typeSegments);

            createWithInteriorNavProp.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.ODataSelectPath_NavPropSegmentCanOnlyBeLastSegment);
        }
        public void SourceCannotBeNull()
        {
            Action createWithNullSource = () => new SingleValuePropertyAccessNode(null, HardCodedTestModel.GetDogColorProp());

            createWithNullSource.ShouldThrow <Exception>(Error.ArgumentNull("source").ToString());
        }
        public void PropertyIsSet()
        {
            var node = new SingleValuePropertyAccessNode(new ConstantNode(null), HardCodedTestModel.GetDogColorProp());

            node.Property.Should().BeSameAs(HardCodedTestModel.GetDogColorProp());
        }
        public void CollectionPropertyAccessCannotTakeANonCollectionProperty()
        {
            Action create = () => new CollectionPropertyAccessNode(new ConstantNode(null), HardCodedTestModel.GetDogColorProp());

            create.ShouldThrow <ArgumentException>().WithMessage(Strings.Nodes_PropertyAccessTypeMustBeCollection("Color"));
        }
        public void SourceCannotBeNull()
        {
            Action createWithNullSource = () => new SingleValuePropertyAccessNode(null, HardCodedTestModel.GetDogColorProp());

            Assert.Throws <ArgumentNullException>("source", createWithNullSource);
        }
        public void PropertyIsSet()
        {
            var node = new SingleValuePropertyAccessNode(new ConstantNode(null), HardCodedTestModel.GetDogColorProp());

            Assert.Same(HardCodedTestModel.GetDogColorProp(), node.Property);
        }