def setUp(self): Base.metadata.create_all() self.session = Session() c = Container(name=u'c') self.session.add(c) self.container = c self.nd1 = NamedDocument(container=c, title=u"Named Document") self.session.add(self.nd1) self.session.commit() self.nd2 = NamedDocument(container=c, title=u"Another Named Document") self.session.add(self.nd2) self.session.commit() self.snd1 = ScopedNamedDocument(container=c, title=u"Scoped Named Document") self.session.add(self.snd1) self.session.commit() self.snd2 = ScopedNamedDocument(container=c, title=u"Another Scoped Named Document") self.session.add(self.snd2) self.session.commit() self.ind1 = IdNamedDocument(container=c, title=u"Id Named Document") self.session.add(self.ind1) self.session.commit() self.ind2 = IdNamedDocument(container=c, title=u"Another Id Named Document") self.session.add(self.ind2) self.session.commit() self.sid1 = ScopedIdDocument(container=c) self.session.add(self.sid1) self.session.commit() self.sid2 = ScopedIdDocument(container=c) self.session.add(self.sid2) self.session.commit() self.sind1 = ScopedIdNamedDocument(container=c, title=u"Scoped Id Named Document") self.session.add(self.sind1) self.session.commit() self.sind2 = ScopedIdNamedDocument( container=c, title=u"Another Scoped Id Named Document") self.session.add(self.sind2) self.session.commit() self.pc = ParentDocument(title=u"Parent") self.session.add(self.pc) self.session.commit() self.child1 = ChildDocument(parent=self.pc.middle) self.session.add(self.child1) self.session.commit() self.child2 = ChildDocument(parent=self.pc.middle) self.session.add(self.child2) self.session.commit()
class ChildDocument(BaseScopedIdMixin, Base): __tablename__ = 'child_document' parent_id = Column(None, ForeignKey('middle_container.id')) parent = relationship(MiddleContainer, backref='children') query = Session.query_property() def permissions(self, user, inherited=None): if inherited is None: perms = set() else: perms = inherited if user.username == 'foo': if 'delete' in perms: perms.remove('delete') return perms
class ParentDocument(BaseNameMixin, Base): __tablename__ = 'parent_document' middle_id = Column(None, ForeignKey('middle_container.id')) middle = relationship(MiddleContainer, uselist=False) query = Session.query_property() def __init__(self, **kwargs): super(ParentDocument, self).__init__(**kwargs) self.middle = MiddleContainer() def permissions(self, user, inherited=None): perms = super(ParentDocument, self).permissions(user, inherited) perms.add('view') if user.username == 'foo': perms.add('edit') perms.add('delete') return perms
def setUp(self): Base.metadata.create_all() self.session = Session() c = Container(name=u'c') self.session.add(c) self.container = c self.nd1 = NamedDocument(container=c, title=u"Named Document") self.session.add(self.nd1) self.session.commit() self.nd2 = NamedDocument(container=c, title=u"Another Named Document") self.session.add(self.nd2) self.session.commit() self.snd1 = ScopedNamedDocument(container=c, title=u"Scoped Named Document") self.session.add(self.snd1) self.session.commit() self.snd2 = ScopedNamedDocument(container=c, title=u"Another Scoped Named Document") self.session.add(self.snd2) self.session.commit() self.ind1 = IdNamedDocument(container=c, title=u"Id Named Document") self.session.add(self.ind1) self.session.commit() self.ind2 = IdNamedDocument(container=c, title=u"Another Id Named Document") self.session.add(self.ind2) self.session.commit() self.sid1 = ScopedIdDocument(container=c) self.session.add(self.sid1) self.session.commit() self.sid2 = ScopedIdDocument(container=c) self.session.add(self.sid2) self.session.commit() self.sind1 = ScopedIdNamedDocument(container=c, title=u"Scoped Id Named Document") self.session.add(self.sind1) self.session.commit() self.sind2 = ScopedIdNamedDocument(container=c, title=u"Another Scoped Id Named Document") self.session.add(self.sind2) self.session.commit() self.pc = ParentDocument(title=u"Parent") self.session.add(self.pc) self.session.commit() self.child1 = ChildDocument(parent=self.pc.middle) self.session.add(self.child1) self.session.commit() self.child2 = ChildDocument(parent=self.pc.middle) self.session.add(self.child2) self.session.commit()
class MiddleContainer(BaseMixin, Base): __tablename__ = 'middle_container' query = Session.query_property()
class TestLoadModels(unittest.TestCase): def setUp(self): Base.metadata.create_all() self.session = Session() c = Container(name=u'c') self.session.add(c) self.container = c self.nd1 = NamedDocument(container=c, title=u"Named Document") self.session.add(self.nd1) self.session.commit() self.nd2 = NamedDocument(container=c, title=u"Another Named Document") self.session.add(self.nd2) self.session.commit() self.snd1 = ScopedNamedDocument(container=c, title=u"Scoped Named Document") self.session.add(self.snd1) self.session.commit() self.snd2 = ScopedNamedDocument(container=c, title=u"Another Scoped Named Document") self.session.add(self.snd2) self.session.commit() self.ind1 = IdNamedDocument(container=c, title=u"Id Named Document") self.session.add(self.ind1) self.session.commit() self.ind2 = IdNamedDocument(container=c, title=u"Another Id Named Document") self.session.add(self.ind2) self.session.commit() self.sid1 = ScopedIdDocument(container=c) self.session.add(self.sid1) self.session.commit() self.sid2 = ScopedIdDocument(container=c) self.session.add(self.sid2) self.session.commit() self.sind1 = ScopedIdNamedDocument(container=c, title=u"Scoped Id Named Document") self.session.add(self.sind1) self.session.commit() self.sind2 = ScopedIdNamedDocument( container=c, title=u"Another Scoped Id Named Document") self.session.add(self.sind2) self.session.commit() self.pc = ParentDocument(title=u"Parent") self.session.add(self.pc) self.session.commit() self.child1 = ChildDocument(parent=self.pc.middle) self.session.add(self.child1) self.session.commit() self.child2 = ChildDocument(parent=self.pc.middle) self.session.add(self.child2) self.session.commit() def tearDown(self): self.session.rollback() Base.metadata.drop_all() def test_container(self): self.assertEqual(t_container(container=u'c'), self.container) def test_named_document(self): self.assertEqual( t_named_document(container=u'c', document=u'named-document'), self.nd1) self.assertEqual( t_named_document(container=u'c', document=u'another-named-document'), self.nd2) def test_scoped_named_document(self): self.assertEqual( t_scoped_named_document(container=u'c', document=u'scoped-named-document'), self.snd1) self.assertEqual( t_scoped_named_document(container=u'c', document=u'another-scoped-named-document'), self.snd2) def test_id_named_document(self): self.assertEqual( t_id_named_document(container=u'c', document=u'1-id-named-document'), self.ind1) self.assertEqual( t_id_named_document(container=u'c', document=u'2-another-id-named-document'), self.ind2) self.assertRaises(NotFound, t_id_named_document, container=u'c', document=u'random-non-integer') def test_scoped_id_document(self): self.assertEqual(t_scoped_id_document(container=u'c', document=u'1'), self.sid1) self.assertEqual(t_scoped_id_document(container=u'c', document=u'2'), self.sid2) self.assertEqual(t_scoped_id_document(container=u'c', document=1), self.sid1) self.assertEqual(t_scoped_id_document(container=u'c', document=2), self.sid2) def test_scoped_id_named_document(self): self.assertEqual( t_scoped_id_named_document(container=u'c', document=u'1-scoped-id-named-document'), self.sind1) self.assertEqual( t_scoped_id_named_document( container=u'c', document=u'2-another-scoped-id-named-document'), self.sind2) self.assertRaises(NotFound, t_scoped_id_named_document, container=u'c', document=u'random-non-integer') def test_callable_document(self): self.assertEqual(t_callable_document(document=u'parent', child=1), self.child1) self.assertEqual(t_callable_document(document=u'parent', child=2), self.child2) def test_dotted_document(self): self.assertEqual(t_dotted_document(document=u'parent', child=1), self.child1) self.assertEqual(t_dotted_document(document=u'parent', child=2), self.child2) def test_direct_permissions(self): user1 = User(username='******') user2 = User(username='******') self.assertEqual(self.pc.permissions(user1), set(['view', 'edit', 'delete'])) self.assertEqual(self.pc.permissions(user2), set(['view'])) self.assertEqual( self.child1.permissions(user1, inherited=self.pc.permissions(user1)), set(['view', 'edit'])) self.assertEqual( self.child1.permissions(user2, inherited=self.pc.permissions(user2)), set(['view'])) def test_loadmodel_permissions(self): app = Flask(__name__) with app.test_request_context(): g.user = User(username='******') self.assertEqual( t_dotted_document_view(document=u'parent', child=1), self.child1) self.assertEqual( t_dotted_document_edit(document=u'parent', child=1), self.child1) self.assertRaises(Forbidden, t_dotted_document_delete, document=u'parent', child=1)
class TestLoadModels(unittest.TestCase): def setUp(self): Base.metadata.create_all() self.session = Session() c = Container(name=u'c') self.session.add(c) self.container = c self.nd1 = NamedDocument(container=c, title=u"Named Document") self.session.add(self.nd1) self.session.commit() self.nd2 = NamedDocument(container=c, title=u"Another Named Document") self.session.add(self.nd2) self.session.commit() self.snd1 = ScopedNamedDocument(container=c, title=u"Scoped Named Document") self.session.add(self.snd1) self.session.commit() self.snd2 = ScopedNamedDocument(container=c, title=u"Another Scoped Named Document") self.session.add(self.snd2) self.session.commit() self.ind1 = IdNamedDocument(container=c, title=u"Id Named Document") self.session.add(self.ind1) self.session.commit() self.ind2 = IdNamedDocument(container=c, title=u"Another Id Named Document") self.session.add(self.ind2) self.session.commit() self.sid1 = ScopedIdDocument(container=c) self.session.add(self.sid1) self.session.commit() self.sid2 = ScopedIdDocument(container=c) self.session.add(self.sid2) self.session.commit() self.sind1 = ScopedIdNamedDocument(container=c, title=u"Scoped Id Named Document") self.session.add(self.sind1) self.session.commit() self.sind2 = ScopedIdNamedDocument(container=c, title=u"Another Scoped Id Named Document") self.session.add(self.sind2) self.session.commit() self.pc = ParentDocument(title=u"Parent") self.session.add(self.pc) self.session.commit() self.child1 = ChildDocument(parent=self.pc.middle) self.session.add(self.child1) self.session.commit() self.child2 = ChildDocument(parent=self.pc.middle) self.session.add(self.child2) self.session.commit() def tearDown(self): self.session.rollback() Base.metadata.drop_all() def test_container(self): self.assertEqual(t_container(container=u'c'), self.container) def test_named_document(self): self.assertEqual(t_named_document(container=u'c', document=u'named-document'), self.nd1) self.assertEqual(t_named_document(container=u'c', document=u'another-named-document'), self.nd2) def test_scoped_named_document(self): self.assertEqual(t_scoped_named_document(container=u'c', document=u'scoped-named-document'), self.snd1) self.assertEqual(t_scoped_named_document(container=u'c', document=u'another-scoped-named-document'), self.snd2) def test_id_named_document(self): self.assertEqual(t_id_named_document(container=u'c', document=u'1-id-named-document'), self.ind1) self.assertEqual(t_id_named_document(container=u'c', document=u'2-another-id-named-document'), self.ind2) self.assertRaises(NotFound, t_id_named_document, container=u'c', document=u'random-non-integer') def test_scoped_id_document(self): self.assertEqual(t_scoped_id_document(container=u'c', document=u'1'), self.sid1) self.assertEqual(t_scoped_id_document(container=u'c', document=u'2'), self.sid2) self.assertEqual(t_scoped_id_document(container=u'c', document=1), self.sid1) self.assertEqual(t_scoped_id_document(container=u'c', document=2), self.sid2) def test_scoped_id_named_document(self): self.assertEqual(t_scoped_id_named_document(container=u'c', document=u'1-scoped-id-named-document'), self.sind1) self.assertEqual(t_scoped_id_named_document(container=u'c', document=u'2-another-scoped-id-named-document'), self.sind2) self.assertRaises(NotFound, t_scoped_id_named_document, container=u'c', document=u'random-non-integer') def test_callable_document(self): self.assertEqual(t_callable_document(document=u'parent', child=1), self.child1) self.assertEqual(t_callable_document(document=u'parent', child=2), self.child2) def test_dotted_document(self): self.assertEqual(t_dotted_document(document=u'parent', child=1), self.child1) self.assertEqual(t_dotted_document(document=u'parent', child=2), self.child2) def test_direct_permissions(self): user1 = User(username='******') user2 = User(username='******') self.assertEqual(self.pc.permissions(user1), set(['view', 'edit', 'delete'])) self.assertEqual(self.pc.permissions(user2), set(['view'])) self.assertEqual(self.child1.permissions(user1, inherited=self.pc.permissions(user1)), set(['view', 'edit'])) self.assertEqual(self.child1.permissions(user2, inherited=self.pc.permissions(user2)), set(['view'])) def test_loadmodel_permissions(self): app = Flask(__name__) with app.test_request_context(): g.user = User(username='******') self.assertEqual(t_dotted_document_view(document=u'parent', child=1), self.child1) self.assertEqual(t_dotted_document_edit(document=u'parent', child=1), self.child1) self.assertRaises(Forbidden, t_dotted_document_delete, document=u'parent', child=1)