Exemplo n.º 1
0
        public void SetBasedOperations_EachSegmentOnEntityCollectionWithFilterSegmentAndFilterQuery_ReturnsSuccess()
        {
            // Scenario of this test case:
            // A client is sending a PATCH request to update all people with ID eq 42 and return the updated people
            // whose SSN eq 'num'.
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/$filter(@p1)/$each?$filter=SSN eq 'num'&@p1=ID eq 42"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(3);

                List <FilterSegment> filterSegments = oDataPath.OfType <FilterSegment>().ToList();
                filterSegments.Count.Should().Be(1);

                filterSegments[0].Expression.ShouldBeParameterAliasNode("@p1", EdmCoreModel.Instance.GetBoolean(false));
                filterSegments[0].TargetEdmType.ToString().ShouldBeEquivalentTo(HardCodedTestModel.GetPersonType().ToString());
                filterSegments[0].SingleResult.Should().BeFalse();

                filterClause.Expression.ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode("num");
                aliasNodes["@p1"].ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode(42);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetPeopleSet());
            });
        }
Exemplo n.º 2
0
 public async Task VisitAsync(ODataPath path)
 {
     NotFound       = false;
     BadRequest     = false;
     Result         = null;
     ResultType     = null;
     PropertySetter = null;
     Index          = 0;
     foreach (var segment in path)
     {
         await(segment switch
         {
             TypeSegment typeSegment => VisitAsync(typeSegment),
             NavigationPropertySegment navigationPropertySegment => VisitAsync(navigationPropertySegment),
             EntitySetSegment entitySetSegment => VisitAsync(entitySetSegment),
             SingletonSegment singletonSegment => VisitAsync(singletonSegment),
             KeySegment keySegment => VisitAsync(keySegment),
             PropertySegment propertySegment => VisitAsync(propertySegment),
             AnnotationSegment annotationSegment => VisitAsync(annotationSegment),
             OperationImportSegment operationImportSegment => VisitAsync(operationImportSegment),
             OperationSegment operationSegment => VisitAsync(operationSegment),
             DynamicPathSegment dynamicPathSegment => VisitAsync(dynamicPathSegment),
             CountSegment countSegment => VisitAsync(countSegment),
             FilterSegment filterSegment => VisitAsync(filterSegment),
             ReferenceSegment referenceSegment => VisitAsync(referenceSegment),
             EachSegment eachSegment => VisitAsync(eachSegment),
             NavigationPropertyLinkSegment navigationPropertyLinkSegment => VisitAsync(navigationPropertyLinkSegment),
             ValueSegment valueSegment => VisitAsync(valueSegment),
             BatchSegment batchSegment => VisitAsync(batchSegment),
             BatchReferenceSegment batchReferenceSegment => VisitAsync(batchReferenceSegment),
             MetadataSegment metadataSegment => VisitAsync(metadataSegment),
             PathTemplateSegment pathTemplateSegment => VisitAsync(pathTemplateSegment),
             _ => throw new NotSupportedException()
         });
Exemplo n.º 3
0
        public void SetBasedOperations_EachSegmentOnComplexTypeCollection_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/1/PreviousAddresses/$each"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(4);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetPeopleSet());
            });
        }
        public void SetBasedOperations_EachSegmentOnPrimitiveTypeCollection_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/1/RelatedIDs/$each"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                Assert.Equal(4, oDataPath.Count);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                Assert.NotNull(eachSegment);
                Assert.Equal(RequestTargetKind.Primitive, eachSegment.TargetKind);
                Assert.Same(HardCodedTestModel.GetPeopleSet(), eachSegment.TargetEdmNavigationSource);
            });
        }
Exemplo n.º 5
0
        public void SetBasedOperations_EachSegmentOnBoundFunctionResults_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/Fully.Qualified.Namespace.GetPeopleWhoHaveDogs/$each"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(3);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetPeopleSet());
                eachSegment.TargetEdmType.Should().Be(HardCodedTestModel.GetPersonType());
            });
        }
Exemplo n.º 6
0
        public void SetBasedOperations_EachSegmentOnNavigationProperty_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/1/MyFriendsDogs/$each"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(4);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetDogsSet());
                eachSegment.TargetEdmType.Should().Be(HardCodedTestModel.GetDogType());
            });
        }
        public void SetBasedOperations_EachSegmentOnTypeCastedMembers_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/Fully.Qualified.Namespace.Employee/$each"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                Assert.Equal(3, oDataPath.Count);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                Assert.NotNull(eachSegment);
                Assert.Equal(RequestTargetKind.Resource, eachSegment.TargetKind);
                Assert.Same(HardCodedTestModel.GetPeopleSet(), eachSegment.TargetEdmNavigationSource);
                Assert.Same(HardCodedTestModel.GetEmployeeType(), eachSegment.TargetEdmType);
            });
        }
Exemplo n.º 8
0
        public void SetBasedOperations_EachSegmentOnEntityCollectionWithFilterQuery_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/$each?$filter=ID eq 42"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(2);

                filterClause.Expression.ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode(42);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetPeopleSet());
            });
        }
        public void SetBasedOperations_EachSegmentOnTypeCastedMembersWithFilterQuery_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/Fully.Qualified.Namespace.Employee/$each?$filter=ID eq 42"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                Assert.Equal(3, oDataPath.Count);

                filterClause.Expression.ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode(42);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                Assert.NotNull(eachSegment);
                Assert.Equal(RequestTargetKind.Resource, eachSegment.TargetKind);
                Assert.Same(HardCodedTestModel.GetPeopleSet(), eachSegment.TargetEdmNavigationSource);
                Assert.Same(HardCodedTestModel.GetEmployeeType(), eachSegment.TargetEdmType);
            });
        }
Exemplo n.º 10
0
        public void SetBasedOperations_EachSegmentOnFilteredBoundFunctionResults_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/$filter(@p1)/Fully.Qualified.Namespace.GetPeopleWhoHaveDogs/$each?@p1=ID eq 1"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(4);

                List <FilterSegment> filterSegments = oDataPath.OfType <FilterSegment>().ToList();
                filterSegments.Count.Should().Be(1);
                filterSegments[0].Expression.ShouldBeParameterAliasNode("@p1", EdmCoreModel.Instance.GetBoolean(false));
                filterSegments[0].TargetEdmType.ToString().ShouldBeEquivalentTo(HardCodedTestModel.GetPersonType().ToString());
                filterSegments[0].SingleResult.Should().BeFalse();

                filterClause.Should().BeNull();
                aliasNodes["@p1"].ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode(1);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetPeopleSet());
                eachSegment.TargetEdmType.Should().Be(HardCodedTestModel.GetPersonType());
            });
        }
Exemplo n.º 11
0
        public void SetBasedOperations_EachSegmentOnTypeCastedMembersWithFilterSegmentAndFilterQuery_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/Fully.Qualified.Namespace.Employee/$filter(@p1)/$each?$filter=ID eq 42&@p1=WorkEmail eq '*****@*****.**'"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                oDataPath.Count.Should().Be(4);

                List <FilterSegment> filterSegments = oDataPath.OfType <FilterSegment>().ToList();
                filterSegments.Count.Should().Be(1);
                filterSegments[0].Expression.ShouldBeParameterAliasNode("@p1", EdmCoreModel.Instance.GetBoolean(true));
                filterSegments[0].TargetEdmType.ToString().ShouldBeEquivalentTo(HardCodedTestModel.GetEmployeeType().ToString());
                filterSegments[0].SingleResult.Should().BeFalse();

                filterClause.Expression.ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode(42);
                aliasNodes["@p1"].ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode("*****@*****.**");

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                eachSegment.Should().NotBeNull();
                eachSegment.TargetKind.Should().Be(RequestTargetKind.Resource);
                eachSegment.TargetEdmNavigationSource.Should().Be(HardCodedTestModel.GetPeopleSet());
                eachSegment.TargetEdmType.Should().Be(HardCodedTestModel.GetEmployeeType());
            });
        }
        public void SetBasedOperations_EachSegmentOnEntityCollectionWithFilterSegment_ReturnsSuccess()
        {
            ParseUriAndVerify(
                new Uri("http://gobbledygook/People/$filter(@p1)/$each?@p1=ID eq 42"),
                (oDataPath, filterClause, aliasNodes) =>
            {
                Assert.Equal(3, oDataPath.Count);

                List <FilterSegment> filterSegments = oDataPath.OfType <FilterSegment>().ToList();
                Assert.Single(filterSegments);

                filterSegments[0].Expression.ShouldBeParameterAliasNode("@p1", EdmCoreModel.Instance.GetBoolean(false));
                Assert.Equal(HardCodedTestModel.GetPersonType().ToString(), filterSegments[0].TargetEdmType.ToString());
                Assert.False(filterSegments[0].SingleResult);

                Assert.Null(filterClause);
                aliasNodes["@p1"].ShouldBeBinaryOperatorNode(BinaryOperatorKind.Equal).Right.ShouldBeConstantQueryNode(42);

                EachSegment eachSegment = oDataPath.Last() as EachSegment;
                Assert.NotNull(eachSegment);
                Assert.Equal(RequestTargetKind.Resource, eachSegment.TargetKind);
                Assert.Same(HardCodedTestModel.GetPeopleSet(), eachSegment.TargetEdmNavigationSource);
            });
        }
Exemplo n.º 13
0
 /// <summary>
 /// Handle validating a EachSegment
 /// </summary>
 /// <param name="segment">The each segment to valdiate.</param>
 public override void Handle(EachSegment segment)
 {
     ValidateItem(segment);
 }