public void PrimitiveCollectionPropertyShouldCreateMatchingNode() { var state = new BindingState(configuration); var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASingleDog, state); var token = new InnerPathToken("Nicknames", new DummyToken(), null /*namedValues*/); var result = binder.BindInnerPathSegment(token); result.ShouldBeCollectionPropertyAccessQueryNode(HardCodedTestModel.GetDogNicknamesProperty()); }
public void DeclaredPropertyOnOpenTypeShouldCreateMatchingNode() { var state = new BindingState(configuration); var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASinglePainting, state); var token = new InnerPathToken("Colors", new DummyToken(), null /*namedValues*/); var result = binder.BindInnerPathSegment(token); result.ShouldBeCollectionPropertyAccessQueryNode(HardCodedTestModel.GetPaintingColorsProperty()); }
public void OpenPropertyShouldCreateMatchingNode() { const string OpenPropertyName = "Emotions"; var state = new BindingState(configuration); var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASinglePainting, state); var token = new InnerPathToken(OpenPropertyName, new DummyToken(), null /*namedValues*/); var result = binder.BindInnerPathSegment(token); result.ShouldBeSingleValueOpenPropertyAccessQueryNode(OpenPropertyName); }
public void CollectionNavigationPropertyShouldCreateMatchingNode() { var state = new BindingState(configuration); var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASingleDog, state); var token = new InnerPathToken("MyPeople", new DummyToken(), null /*namedValues*/); var result = binder.BindInnerPathSegment(token); result.ShouldBeCollectionNavigationNode(HardCodedTestModel.GetDogMyPeopleNavProp()). And.NavigationSource.Should().BeSameAs(HardCodedTestModel.GetDogsSet().FindNavigationTarget(HardCodedTestModel.GetDogMyPeopleNavProp())); }
public void MissingPropertyShouldThrow() { const string MissingPropertyName = "ThisPropertyDoesNotExist"; var state = new BindingState(configuration); var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASingleDog, state); var token = new InnerPathToken(MissingPropertyName, new DummyToken(), null /*namedValues*/); Action bind = () => binder.BindInnerPathSegment(token); string expectedMessage = ODataErrorStrings.MetadataBinder_PropertyNotDeclared(HardCodedTestModel.GetDogType().FullTypeName(), MissingPropertyName); bind.ShouldThrow<ODataException>(expectedMessage); }
public void InnerPathTokenBinderShouldFailIfPropertySourceIsNotASingleValue() { var state = new BindingState(configuration); state.ImplicitRangeVariable = NodeFactory.CreateImplicitRangeVariable(HardCodedTestModel.GetDogTypeReference(), HardCodedTestModel.GetDogsSet()); var metadataBinder = new MetadataBinder(state); var binder = new InnerPathTokenBinder(metadataBinder.Bind, state); var token = new InnerPathToken("MyDog", new InnerPathToken("MyPeople", null, null), null); Action bind = () => binder.BindInnerPathSegment(token); bind.ShouldThrow<ODataException>().WithMessage(Strings.MetadataBinder_PropertyAccessSourceNotSingleValue("MyDog")); }
public void KeyLookupOnNavPropIntegrationTest() { var state = new BindingState(configuration); state.ImplicitRangeVariable = NodeFactory.CreateImplicitRangeVariable(HardCodedTestModel.GetDogTypeReference(), HardCodedTestModel.GetDogsSet()); var metadataBinder = new MetadataBinder(state); var binder = new InnerPathTokenBinder(metadataBinder.Bind, state); var token = new InnerPathToken("MyPeople", null, new[] { new NamedValue(null, new LiteralToken(123)) }); var result = binder.BindInnerPathSegment(token); result.ShouldBeKeyLookupQueryNode(); }
public void CollectionOfTimeOfDayShouldCreateMatchingNode() { var state = new BindingState(configuration); var binder = new InnerPathTokenBinder(FakeBindMethods.BindMethodReturningASinglePerson, state); var token = new InnerPathToken("MyTimeOfDays", new DummyToken(), null /*namedValues*/); var result = binder.BindInnerPathSegment(token); result.ShouldBeCollectionPropertyAccessQueryNode(HardCodedTestModel.GetPersonMyTimeOfDaysProp()); }
/// <summary> /// Binds an InnerPathToken. /// </summary> /// <param name="token">Token to bind.</param> /// <returns>Either a SingleNavigationNode, CollectionNavigationNode, SinglePropertyAccessNode (complex), /// or CollectionPropertyAccessNode (primitive or complex) that is the metadata-bound version of the given token.</returns> protected virtual QueryNode BindInnerPathSegment(InnerPathToken token) { InnerPathTokenBinder innerPathTokenBinder = new InnerPathTokenBinder(this.Bind, this.BindingState); return(innerPathTokenBinder.BindInnerPathSegment(token)); }
/// <summary> /// Binds an InnerPathToken. /// </summary> /// <param name="token">Token to bind.</param> /// <returns>Either a SingleNavigationNode, CollectionNavigationNode, SinglePropertyAccessNode (complex), /// or CollectionPropertyAccessNode (primitive or complex) that is the metadata-bound version of the given token.</returns> protected virtual QueryNode BindInnerPathSegment(InnerPathToken token) { InnerPathTokenBinder innerPathTokenBinder = new InnerPathTokenBinder(this.Bind, this.BindingState); return innerPathTokenBinder.BindInnerPathSegment(token); }