def test_find_target_with_invalid_path(): bar = StubTraversable(_name='bar') foo = StubTraversable( _name='foo', members=Struct( bar=bar, ), ) root = StubTraversable( _name='root', members=Struct(foo=foo), ) root = root.bind(request=None) with pytest.raises(InvalidEndpointPathException) as e: find_target(path='/foo/bar/baz', root=root) assert ( str(e.value) == "Given path /foo/bar/baz not found.\n" " Short alternatives:\n" " ''\n" " foo\n" " bar\n" " Long alternatives:\n" " ''\n" " foo\n" " foo/bar" )
def test_perform_post_dispatch_error_message(): target = StubTraversable(_name='root', members=Struct(foo=StubTraversable(_name='foo'))) target = target.bind(request=None) with pytest.raises(InvalidEndpointPathException) as e: perform_post_dispatch(root=target, path='/foo', value='') assert ( str(e.value) == "Target <tests.helpers.StubTraversable foo (bound) path:'foo'> has no registered post_handler" )
def test_traverse(): bar = Struct( _name='bar', _declared_members=dict( baz=Struct(_name='baz'), buzz=Struct(_name='buzz'), ), ) foo = Struct( _name='foo', _declared_members=dict(bar=bar, ), ) root = StubTraversable( _name='root', members=Struct(foo=foo), ) expected = { '': '', 'foo': 'foo', 'bar': 'foo/bar', 'baz': 'foo/bar/baz', 'buzz': 'foo/bar/buzz', } actual = build_long_path_by_path(root) assert items(actual) == items(expected) assert len(keys(actual)) == len(set(keys(actual)))
def test_traversable_repr(): bar = StubTraversable(_name='bar') foo = StubTraversable( _name='foo', members=Struct(bar=bar, ), ) assert repr(foo) == '<tests.helpers.StubTraversable foo>' assert repr(bar) == '<tests.helpers.StubTraversable bar>' foo = foo.bind(request=None) assert repr( foo) == "<tests.helpers.StubTraversable foo (bound) members:['bar']>" assert repr(foo._bound_members.bar ) == "<tests.helpers.StubTraversable bar (bound) path:'bar'>"
def test_find_target(): # To build paths: _declared_members: Struct, and optionally name # To find target: _long_path_by_path: Dict on root bar = StubTraversable(_name='bar') foo = StubTraversable( _name='foo', members=Struct(bar=bar, ), ) root = StubTraversable( _name='root', members=Struct(foo=foo), ) root = root.bind(request=None) target = find_target(path='/foo/bar', root=root) assert target._declared is bar assert build_long_path(target) == 'foo/bar'
def test_dunder_path_is_fully_qualified_and_skipping_root(): foo = StubTraversable( _name='my_part3', members=Struct(my_part2=StubTraversable( _name='my_part2', members=Struct(my_part=StubTraversable(_name='my_part', ))))) foo = foo.bind(request=None) assert foo.iommi_path == '' assert foo.iommi_bound_members().my_part2.iommi_path == 'my_part2' assert foo.iommi_bound_members().my_part2.iommi_dunder_path == 'my_part2' assert foo.iommi_bound_members().my_part2.iommi_bound_members( ).my_part.iommi_path == 'my_part' assert foo.iommi_bound_members().my_part2.iommi_bound_members( ).my_part.iommi_dunder_path == 'my_part2__my_part'