Files
sqlalchemy/test/orm/test_association.py
T
Khairi Hafsham 772374735d Make all tests to be PEP8 compliant
tested using pycodestyle version 2.2.0

Fixes: #3885
Change-Id: I5df43adc3aefe318f9eeab72a078247a548ec566
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/343
2017-02-07 11:21:56 -05:00

176 lines
6.5 KiB
Python

from sqlalchemy import testing
from sqlalchemy import Integer, String, ForeignKey, func, select
from sqlalchemy.testing.schema import Table, Column
from sqlalchemy.orm import mapper, relationship, create_session
from sqlalchemy.testing import fixtures
from sqlalchemy.testing import eq_
class AssociationTest(fixtures.MappedTest):
run_setup_classes = 'once'
run_setup_mappers = 'once'
@classmethod
def define_tables(cls, metadata):
Table('items', metadata,
Column('item_id', Integer, primary_key=True,
test_needs_autoincrement=True),
Column('name', String(40)))
Table('item_keywords', metadata,
Column('item_id', Integer, ForeignKey('items.item_id')),
Column('keyword_id', Integer, ForeignKey('keywords.keyword_id')),
Column('data', String(40)))
Table('keywords', metadata,
Column('keyword_id', Integer, primary_key=True,
test_needs_autoincrement=True),
Column('name', String(40)))
@classmethod
def setup_classes(cls):
class Item(cls.Basic):
def __init__(self, name):
self.name = name
def __repr__(self):
return "Item id=%d name=%s keywordassoc=%r" % (
self.item_id, self.name, self.keywords)
class Keyword(cls.Basic):
def __init__(self, name):
self.name = name
def __repr__(self):
return "Keyword id=%d name=%s" % (self.keyword_id, self.name)
class KeywordAssociation(cls.Basic):
def __init__(self, keyword, data):
self.keyword = keyword
self.data = data
def __repr__(self):
return "KeywordAssociation itemid=%d keyword=%r data=%s" % (
self.item_id, self.keyword, self.data)
@classmethod
def setup_mappers(cls):
KeywordAssociation, Item, Keyword = (cls.classes.KeywordAssociation,
cls.classes.Item,
cls.classes.Keyword)
items, item_keywords, keywords = cls.tables.get_all(
'items', 'item_keywords', 'keywords')
mapper(Keyword, keywords)
mapper(KeywordAssociation, item_keywords, properties={
'keyword': relationship(Keyword, lazy='joined')},
primary_key=[item_keywords.c.item_id, item_keywords.c.keyword_id])
mapper(Item, items, properties={
'keywords': relationship(KeywordAssociation,
order_by=item_keywords.c.data,
cascade="all, delete-orphan")
})
def test_insert(self):
KeywordAssociation, Item, Keyword = (self.classes.KeywordAssociation,
self.classes.Item,
self.classes.Keyword)
sess = create_session()
item1 = Item('item1')
item2 = Item('item2')
item1.keywords.append(KeywordAssociation(
Keyword('blue'), 'blue_assoc'))
item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc'))
item2.keywords.append(KeywordAssociation(
Keyword('green'), 'green_assoc'))
sess.add_all((item1, item2))
sess.flush()
saved = repr([item1, item2])
sess.expunge_all()
result = sess.query(Item).all()
loaded = repr(result)
eq_(saved, loaded)
def test_replace(self):
KeywordAssociation, Item, Keyword = (self.classes.KeywordAssociation,
self.classes.Item,
self.classes.Keyword)
sess = create_session()
item1 = Item('item1')
item1.keywords.append(KeywordAssociation(
Keyword('blue'), 'blue_assoc'))
item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc'))
sess.add(item1)
sess.flush()
red_keyword = item1.keywords[1].keyword
del item1.keywords[1]
item1.keywords.append(KeywordAssociation(red_keyword, 'new_red_assoc'))
sess.flush()
saved = repr([item1])
sess.expunge_all()
result = sess.query(Item).all()
loaded = repr(result)
eq_(saved, loaded)
def test_modify(self):
KeywordAssociation, Item, Keyword = (self.classes.KeywordAssociation,
self.classes.Item,
self.classes.Keyword)
sess = create_session()
item1 = Item('item1')
item2 = Item('item2')
item1.keywords.append(KeywordAssociation(
Keyword('blue'), 'blue_assoc'))
item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc'))
item2.keywords.append(KeywordAssociation(
Keyword('green'), 'green_assoc'))
sess.add_all((item1, item2))
sess.flush()
red_keyword = item1.keywords[1].keyword
del item1.keywords[0]
del item1.keywords[0]
purple_keyword = Keyword('purple')
item1.keywords.append(KeywordAssociation(red_keyword, 'new_red_assoc'))
item2.keywords.append(KeywordAssociation(
purple_keyword, 'purple_item2_assoc'))
item1.keywords.append(KeywordAssociation(
purple_keyword, 'purple_item1_assoc'))
item1.keywords.append(KeywordAssociation(
Keyword('yellow'), 'yellow_assoc'))
sess.flush()
saved = repr([item1, item2])
sess.expunge_all()
result = sess.query(Item).all()
loaded = repr(result)
eq_(saved, loaded)
def test_delete(self):
KeywordAssociation = self.classes.KeywordAssociation
Item = self.classes.Item
item_keywords = self.tables.item_keywords
Keyword = self.classes.Keyword
sess = create_session()
item1 = Item('item1')
item2 = Item('item2')
item1.keywords.append(KeywordAssociation(
Keyword('blue'), 'blue_assoc'))
item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc'))
item2.keywords.append(KeywordAssociation(
Keyword('green'), 'green_assoc'))
sess.add_all((item1, item2))
sess.flush()
eq_(select([func.count('*')]).select_from(item_keywords).scalar(), 3)
sess.delete(item1)
sess.delete(item2)
sess.flush()
eq_(select([func.count('*')]).select_from(item_keywords).scalar(), 0)