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()); }); }
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() });
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); }); }
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()); }); }
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); }); }
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); }); }
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()); }); }
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); }); }
/// <summary> /// Handle validating a EachSegment /// </summary> /// <param name="segment">The each segment to valdiate.</param> public override void Handle(EachSegment segment) { ValidateItem(segment); }