def test_defer_doesnt_break_tool(): class App(morepath.App): pass class Sub(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A) def get_a(): return A() @App.mount(path='/sub', app=Sub) def get_sub(): return Sub() @Sub.defer_links(model=A) def defer_a(app, obj): return app.parent App.commit() infos = get_path_and_view_info(App) infos = restrict(infos, ['path', 'directive']) assert infos == [{ 'path': '/foo', 'directive': 'path' }, { 'path': '/sub', 'directive': 'mount' }]
def test_permissions(): class App(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A) def get_a(): return A() class ReadPermission(object): pass @App.view(model=A, permission=ReadPermission) def a_default(self, request): pass App.commit() infos = get_path_and_view_info(App) for info in infos: info['filename'] = 'flurb.py' info['lineno'] = 17 f = io() format_csv(f, 'excel', infos) s = f.getvalue() assert s == '''\
def test_internal_view(): class App(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A) def get_a(): return A() @App.view(model=A, name='bar', internal=True) def a_default(self, request): return "default" App.commit() infos = get_path_and_view_info(App) infos[0]['filename'] = 'flurb.py' infos[0]['lineno'] = 17 infos[1]['filename'] = 'flurb.py' infos[1]['lineno'] = 20 f = io() format_csv(f, 'excel', infos) s = f.getvalue() assert s == '''\
def test_one_app_view_actions_base_class(): class App(morepath.App): pass class Base(object): pass class A(Base): pass @App.path(path='/foo', model=A) def get_a(): return A() @App.view(model=Base) def base_default(self, request): return "" App.commit() infos = get_path_and_view_info(App) infos = restrict(infos, ['path', 'directive']) assert infos == [ { 'path': '/foo', 'directive': 'path' }, { 'path': '/foo', 'directive': 'view' }, ]
def test_extra_predicates(): class App(morepath.App): pass class A(object): pass class B(object): pass @App.path(path='/foo', model=A) def get_a(): return A() @App.view(model=A, body_model=B, request_method='POST') def post_a(self, request): return A() App.commit() infos = get_path_and_view_info(App) for info in infos: info['filename'] = 'flurb.py' info['lineno'] = 17 f = io() format_csv(f, 'excel', infos) s = f.getvalue() assert s == '''\
def test_one_app_view_predicates(): class App(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A) def get_a(): return A() @App.view(model=A) def a_default(self, request): return "" @App.view(model=A, name='edit') def a_edit(self, request): return "" App.commit() infos = get_path_and_view_info(App) predicates = [d.get('predicates') for d in infos if 'predicates' in d] assert predicates == [{}, {'name': 'edit'}]
def test_mounted_app_paths_and_views(): class App(morepath.App): pass class A(object): pass @App.path(path='foo', model=A) def get_a(): return A() @App.json(model=A) def a_default(self, request): pass class Sub(morepath.App): pass class B(object): pass @Sub.path(path='bar', model=B) def get_b(): return B() @Sub.view(model=B) def b_default(self, request): return '' # shouldn't be picked up as it's in Sub @Sub.view(model=A) def a_sub_view(self, request): return '' @App.mount(path='sub', app=Sub) def get_sub(): return Sub() App.commit() infos = get_path_and_view_info(App) infos = restrict(infos, ['path', 'directive']) assert infos == [{ 'path': '/foo', 'directive': 'path' }, { 'path': '/foo', 'directive': 'json' }, { 'path': '/sub', 'directive': 'mount' }, { 'path': '/sub/bar', 'directive': 'path' }, { 'path': '/sub/bar', 'directive': 'view' }]
def test_app_variables(): class App(morepath.App): pass class A(object): pass @App.path(path='/users/{id}', model=A) def get_a(id): return A() App.commit() infos = get_path_and_view_info(App) infos = restrict(infos, ['path', 'directive']) assert infos == [{'path': '/users/{id}', 'directive': 'path'}]
def test_one_app_with_text_format(): class App(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A) def get_a(): return A() App.commit() infos = get_path_and_view_info(App) infos[0]['filelineno'] = 'File /fake.py, line 335' f = StringIO() format_text(f, infos) s = f.getvalue() assert s == '''\
def test_mounted_app_paths_only(): class App(morepath.App): pass class A(object): pass @App.path(path='foo', model=A) def get_a(): return A() class Sub(morepath.App): pass class B(object): pass @Sub.path(path='bar', model=B) def get_b(): return B() @App.mount(path='sub', app=Sub) def get_sub(): return Sub() App.commit() infos = get_path_and_view_info(App) infos = restrict(infos, ['path', 'directive']) assert infos == [{ 'path': '/foo', 'directive': 'path' }, { 'path': '/sub', 'directive': 'mount' }, { 'path': '/sub/bar', 'directive': 'path' }]
def test_one_app_named_view(): class App(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A) def get_a(): return A() @App.view(model=A) def a_default(self, request): return "" @App.view(model=A, name='edit') def a_edit(self, request): return "" App.commit() infos = get_path_and_view_info(App) infos = restrict(infos, ['path', 'directive']) assert infos == [ { 'path': '/foo', 'directive': 'path' }, { 'path': '/foo', 'directive': 'view' }, { 'path': '/foo/+edit', 'directive': 'view' }, ]
def test_absorb(): class App(morepath.App): pass class A(object): pass @App.path(path='/foo', model=A, absorb=True) def get_a(): return A() App.commit() infos = get_path_and_view_info(App) infos[0]['filename'] = 'flurb.py' infos[0]['lineno'] = 17 f = io() format_csv(f, 'excel', infos) s = f.getvalue() assert s == '''\
def test_sort_paths_and_views(): class App(morepath.App): pass class A(object): pass class B(object): pass @App.path(path='/a', model=A) def get_a(): return A() @App.path(path='/b', model=B) def get_b(): return B() @App.view(model=A) def a_default(self, request): return "default" @App.view(model=A, name='x') def a_x(self, request): return "x" @App.view(model=A, name='y') def a_y(self, request): return "y" @App.view(model=A, name='y', request_method='POST') def a_y_post(self, request): return 'y' @App.view(model=A, name='y', request_method='PUT') def a_y_put(self, request): return 'y' @App.view(model=A, name='y', request_method='DELETE') def a_y_delete(self, request): return 'y' @App.view(model=A, name='z') def a_z(self, request): return 'y' @App.view(model=A, name='i', internal=True) def a_internal(self, request): return 'i' @App.view(model=B) def b_default(self, request): return 'b' App.commit() infos = get_path_and_view_info(App) for info in infos: info['filename'] = 'flurb.py' info['lineno'] = 17 f = io() format_csv(f, 'excel', infos) s = f.getvalue() assert s == '''\