Exemple #1
0
def test_traject_with_multiple_variables():
    app = App()

    traject = Traject()

    def get_model(first_id):
        result = Model()
        result.first_id = first_id
        return result

    def get_special(first_id, second_id):
        result = Special()
        result.first_id = first_id
        result.second_id = second_id
        return result
    traject.register('{first_id}', get_model)
    traject.register('{first_id}/{second_id}', get_special)
    app.register(generic.traject, [App], lambda base: traject)

    found, obj, stack = traject_consumer(app, parse_path('a'), Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == []
    assert obj.first_id == 'a'
    assert not hasattr(obj, 'second_id')
    found, obj, stack = traject_consumer(app, parse_path('a/b'), Lookup(app))
    assert found
    assert isinstance(obj, Special)
    assert stack == []
    assert obj.first_id == 'a'
    assert obj.second_id == 'b'
Exemple #2
0
def test_traject_nested_with_variable():
    app = App()

    traject = Traject()

    def get_model(id):
        result = Model()
        result.id = id
        return result

    def get_special(id):
        result = Special()
        result.id = id
        return result

    traject.register('{id}', get_model)
    traject.register('{id}/sub', get_special)
    app.register(generic.traject, [App], lambda base: traject)

    found, obj, stack = traject_consumer(app, parse_path('a'), Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == []
    found, obj, stack = traject_consumer(app, parse_path('b'), Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == []
    found, obj, stack = traject_consumer(app, parse_path('a/sub'), Lookup(app))
    assert found
    assert isinstance(obj, Special)
    assert stack == []
Exemple #3
0
def test_traject_consumer_combination():
    app = App()

    traject = Traject()

    def get_model(foo):
        result = Model()
        result.foo = foo
        return result

    traject.register('special', Special)
    traject.register('{foo}', get_model)
    app.register(generic.traject, [App], lambda base: traject)

    found, obj, stack = traject_consumer(app, parse_path('something'),
                                         Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == []
    assert obj.foo == 'something'
    found, obj, stack = traject_consumer(app, parse_path('special'),
                                         Lookup(app))
    assert found
    assert isinstance(obj, Special)
    assert stack == []
Exemple #4
0
def test_traject_no_concecutive_variables():
    traject = Traject()

    def get_model(foo, bar):
        return Model()

    with py.test.raises(TrajectError):
        traject.register('{foo}{bar}', get_model)
Exemple #5
0
def test_traject_consumer():
    app = App()
    traject = Traject()
    traject.register('sub', Model)
    app.register(generic.traject, [App], lambda base: traject)
    found, obj, stack = traject_consumer(app, parse_path('sub'), Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == []
Exemple #6
0
def test_traject_no_conflict_if_different_text():
    traject = Traject()

    def get_model(foo):
        return Model()

    traject.register('prefix-{foo}', get_model)
    traject.register('{foo}-postfix', get_model)
    assert True
Exemple #7
0
def test_traject_no_conflict_if_different_path():
    traject = Traject()

    def get_model(foo):
        return Model()

    traject.register('a/{foo}', get_model)
    traject.register('b/{bar}', get_model)
    assert True
Exemple #8
0
def test_traject_conflicting_type_registrations():
    traject = Traject()

    def get_model(foo):
        return Model()

    traject.register('{foo:str}', get_model)
    with py.test.raises(TrajectError):
        traject.register('{foo:int}', get_model)
Exemple #9
0
def test_traject_conflict_if_same_path():
    traject = Traject()

    def get_model(foo):
        return Model()

    traject.register('a/{foo}', get_model)
    with py.test.raises(TrajectError):
        traject.register('a/{bar}', get_model)
    assert True
Exemple #10
0
def test_traject_no_duplicate_variables():
    traject = Traject()

    def get_model(foo):
        return Model

    with py.test.raises(TrajectError):
        traject.register('{foo}-{foo}', get_model)
    with py.test.raises(TrajectError):
        traject.register('{foo}/{foo}', get_model)
Exemple #11
0
def test_traject_conflicting_registrations_without_variables():
    traject = Traject()

    def get_model(foo):
        return Model()

    def get_model2(foo):
        return Model()

    traject.register('foo', get_model)
    with py.test.raises(TrajectError):
        traject.register('foo', get_model2)
Exemple #12
0
def test_traject_nested_not_resolved_entirely_by_consumer():
    app = App()
    traject = Traject()
    traject.register('a', Model)
    app.register(generic.traject, [App], lambda base: traject)

    found, obj, stack = traject_consumer(app, parse_path('a'), Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == []
    found, obj, stack = traject_consumer(app, parse_path('a/b'), Lookup(app))
    assert found
    assert isinstance(obj, Model)
    assert stack == [('default', 'b')]
Exemple #13
0
def test_traject_consumer_factory_returns_none():
    app = App()

    traject = Traject()

    def get_model():
        return None

    traject.register('sub', get_model)
    app.register(generic.traject, [App], lambda base: traject)

    found, obj, stack = traject_consumer(app, parse_path('sub'), Lookup(app))
    assert not found
    assert obj is app
    assert stack == [(u'default', 'sub')]