示例#1
0
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"
    )
示例#2
0
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"
    )
示例#3
0
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)))
示例#4
0
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'>"
示例#5
0
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'
示例#6
0
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'