Files
deb-python-sqlalchemy-utils/tests/functions/test_dependencies.py
2014-05-06 20:22:44 +03:00

91 lines
2.9 KiB
Python

import sqlalchemy as sa
from sqlalchemy_utils.functions.orm import dependencies
from tests import TestCase
class TestDependencies(TestCase):
def create_models(self):
class User(self.Base):
__tablename__ = 'user'
id = sa.Column(sa.Integer, primary_key=True)
first_name = sa.Column(sa.Unicode(255))
last_name = sa.Column(sa.Unicode(255))
class Article(self.Base):
__tablename__ = 'article'
id = sa.Column(sa.Integer, primary_key=True)
author_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'))
owner_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'))
author = sa.orm.relationship(User, foreign_keys=[author_id])
owner = sa.orm.relationship(User, foreign_keys=[owner_id])
class BlogPost(self.Base):
__tablename__ = 'blog_post'
id = sa.Column(sa.Integer, primary_key=True)
author_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'))
author = sa.orm.relationship(User)
self.User = User
self.Article = Article
self.BlogPost = BlogPost
def test_multiple_refs(self):
user = self.User(first_name=u'John')
articles = [
self.Article(author=user),
self.Article(),
self.Article(owner=user),
self.Article(author=user, owner=user)
]
self.session.add_all(articles)
self.session.commit()
deps = list(dependencies(user))
assert len(deps) == 3
assert articles[0] in deps
assert articles[2] in deps
assert articles[3] in deps
class TestDependenciesWithCompositeKeys(TestCase):
def create_models(self):
class User(self.Base):
__tablename__ = 'user'
first_name = sa.Column(sa.Unicode(255), primary_key=True)
last_name = sa.Column(sa.Unicode(255), primary_key=True)
class Article(self.Base):
__tablename__ = 'article'
id = sa.Column(sa.Integer, primary_key=True)
author_first_name = sa.Column(sa.Unicode(255))
author_last_name = sa.Column(sa.Unicode(255))
__table_args__ = (
sa.ForeignKeyConstraint(
[author_first_name, author_last_name],
[User.first_name, User.last_name]
),
)
author = sa.orm.relationship(User)
self.User = User
self.Article = Article
def test_returns_all_dependent_objects(self):
user = self.User(first_name=u'John', last_name=u'Smith')
articles = [
self.Article(author=user),
self.Article(),
self.Article(),
self.Article(author=user)
]
self.session.add_all(articles)
self.session.commit()
deps = list(dependencies(user))
assert len(deps) == 2
assert articles[0] in deps
assert articles[3] in deps