def test_view_predicates(): app = App() class Root(object): pass def get(request, model): return 'GET' def post(request, model): return 'POST' c = setup() c.configurable(app) c.action(app.root(), Root) c.action(app.view(model=Root, name='foo', request_method='GET'), get) c.action(app.view(model=Root, name='foo', request_method='POST'), post) c.commit() c = Client(app, Response) response = c.get('/foo') assert response.data == 'GET' response = c.post('/foo') assert response.data == 'POST'
def test_extra_predicates(): app = App() class Model(object): def __init__(self, id): self.id = id def get_a(request, model): return 'a' def get_b(request, model): return 'b' def get_id(request, model): return model.id c = setup() c.configurable(app) c.action(app.model(path='{id}'), Model) c.action(app.view(model=Model, name='foo', id='a'), get_a) c.action(app.view(model=Model, name='foo', id='b'), get_b) c.action(app.predicate(name='id', order=2, default=''), get_id) c.commit() c = Client(app, Response) response = c.get('/a/foo') assert response.data == 'a' response = c.post('/b/foo') assert response.data == 'b'
def test_view_predicates(): setup() app = App() class Root(object): pass def get(request, model): return 'GET' def post(request, model): return 'POST' c = Config() c.action(app, app) c.action(app.root(), Root) c.action(app.view(model=Root, name='foo', request_method='GET'), get) c.action(app.view(model=Root, name='foo', request_method='POST'), post) c.commit() c = Client(app, Response) response = c.get('/foo') assert response.data == 'GET' response = c.post('/foo') assert response.data == 'POST'
def test_extends(): app = App() extending = App(extends=[app]) c = setup() c.configurable(app) c.configurable(extending) class User(object): def __init__(self, username): self.username = username c.action( app.model( path='users/{username}', variables=lambda model: {'username': model.username}), User) def render_user(request, model): return "User: %s" % model.username c.action( app.view( model=User), render_user) def edit_user(request, model): return "Edit user: %s" % model.username c.action( extending.view( model=User, name='edit'), edit_user) c.commit() cl = Client(app, Response) response = cl.get('/users/foo') assert response.data == 'User: foo' response = cl.get('/users/foo/edit') assert response.status == '404 NOT FOUND' cl = Client(extending, Response) response = cl.get('/users/foo') assert response.data == 'User: foo' response = cl.get('/users/foo/edit') assert response.data == 'Edit user: foo'
def test_overrides_view(): app = App() overriding = App(extends=[app]) c = setup() c.configurable(app) c.configurable(overriding) class User(object): def __init__(self, username): self.username = username c.action( app.model( path='users/{username}', variables=lambda model: {'username': model.username}), User) def render_user(request, model): return "User: %s" % model.username c.action( app.view( model=User), render_user) def render_user2(request, model): return "USER: %s" % model.username c.action( overriding.view( model=User), render_user2) c.commit() cl = Client(app, Response) response = cl.get('/users/foo') assert response.data == 'User: foo' cl = Client(overriding, Response) response = cl.get('/users/foo') assert response.data == 'USER: foo'
def test_overrides_model(): app = App() overriding = App(extends=[app]) c = setup() c.configurable(app) c.configurable(overriding) class User(object): def __init__(self, username): self.username = username c.action( app.model( path='users/{username}', variables=lambda model: {'username': model.username}), User) def render_user(request, model): return "User: %s" % model.username c.action( app.view( model=User), render_user) def get_user(username): if username != 'bar': return None return User(username) c.action( overriding.model( model=User, path='users/{username}', variables=lambda model: {'username': model.username}), get_user) c.commit() cl = Client(app, Response) response = cl.get('/users/foo') assert response.data == 'User: foo' response = cl.get('/users/bar') assert response.data == 'User: bar' cl = Client(overriding, Response) response = cl.get('/users/foo') assert response.status == '404 NOT FOUND' response = cl.get('/users/bar') assert response.data == 'User: bar'
def test_base(): setup() class Root(object): pass class Container(object): def __init__(self, id): self.id = id self.items = {} def add_item(self, item_id): result = Item(item_id, self) self.items[item_id] = result return result class Item(object): def __init__(self, id, parent): self.id = id self.parent = parent alpha = Container('alpha') beta = Container('beta') alpha.add_item('a') alpha.add_item('b') c = alpha.add_item('c') beta.add_item('d') e = beta.add_item('e') app = App() c = Config() c.action(app, app) c.action(app.root(), Root) def get_container(container_id): if container_id == 'alpha': return alpha elif container_id == 'beta': return beta return None c.action( app.model( model=Container, path="{container_id}", variables=lambda container: {'container_id': container.id}), get_container) def get_item(base, item_id): return base.items.get(item_id) c.action( app.model(model=Item, path="{item_id}", variables=lambda item: {'item_id': item.id}, base=Container, get_base=lambda item: item.parent), get_item) c.action( app.view(model=Container), lambda request, model: 'container: %s' % model.id) c.action( app.view(model=Container, name='link'), lambda request, model: request.link(model)) c.action( app.view(model=Item), lambda request, model: 'item: %s' % model.id) c.action( app.view(model=Item, name='link'), lambda request, model: request.link(model)) c.action( app.view(model=Item, name='otherlink'), lambda request, model: request.link(e)) c.commit() c = Client(app, Response) response = c.get('/alpha') assert response.data == 'container: alpha' response = c.get('/beta') assert response.data == 'container: beta' response = c.get('/alpha/a') assert response.data == 'item: a' response = c.get('/beta/e') assert response.data == 'item: e' response = c.get('/alpha/e') assert response.status == '404 NOT FOUND' response = c.get('/alpha/@@link') assert response.data == 'alpha' response = c.get('/alpha/a/link') assert response.data == 'alpha/a' response = c.get('/alpha/a/otherlink') assert response.data == 'beta/e'
def test_base(): setup() class Root(object): pass class Container(object): def __init__(self, id): self.id = id self.items = {} def add_item(self, item_id): result = Item(item_id, self) self.items[item_id] = result return result class Item(object): def __init__(self, id, parent): self.id = id self.parent = parent alpha = Container('alpha') beta = Container('beta') alpha.add_item('a') alpha.add_item('b') c = alpha.add_item('c') beta.add_item('d') e = beta.add_item('e') app = App() c = Config() c.action(app, app) c.action(app.root(), Root) def get_container(container_id): if container_id == 'alpha': return alpha elif container_id == 'beta': return beta return None c.action( app.model(model=Container, path="{container_id}", variables=lambda container: {'container_id': container.id}), get_container) def get_item(base, item_id): return base.items.get(item_id) c.action( app.model(model=Item, path="{item_id}", variables=lambda item: {'item_id': item.id}, base=Container, get_base=lambda item: item.parent), get_item) c.action(app.view(model=Container), lambda request, model: 'container: %s' % model.id) c.action(app.view(model=Container, name='link'), lambda request, model: request.link(model)) c.action(app.view(model=Item), lambda request, model: 'item: %s' % model.id) c.action(app.view(model=Item, name='link'), lambda request, model: request.link(model)) c.action(app.view(model=Item, name='otherlink'), lambda request, model: request.link(e)) c.commit() c = Client(app, Response) response = c.get('/alpha') assert response.data == 'container: alpha' response = c.get('/beta') assert response.data == 'container: beta' response = c.get('/alpha/a') assert response.data == 'item: a' response = c.get('/beta/e') assert response.data == 'item: e' response = c.get('/alpha/e') assert response.status == '404 NOT FOUND' response = c.get('/alpha/@@link') assert response.data == 'alpha' response = c.get('/alpha/a/link') assert response.data == 'alpha/a' response = c.get('/alpha/a/otherlink') assert response.data == 'beta/e'