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'
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 == []
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 == []
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)
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 == []
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
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
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)
def test_path_for_model(): traject = Traject() class IdModel(object): def __init__(self, id): self.id = id traject.register_inverse(IdModel, 'foo/{id}', lambda model: {'id': model.id}) assert traject.get_path(IdModel('a')) == 'foo/a'
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
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)
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)
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')]
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')]