-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathtest_SQLMultipleJoin.py
More file actions
65 lines (54 loc) · 2.28 KB
/
test_SQLMultipleJoin.py
File metadata and controls
65 lines (54 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import pytest
from sqlobject import ForeignKey, IntCol, MultipleJoin, SQLMultipleJoin, \
SQLObject, StringCol
from sqlobject.tests.dbtest import setupClass, supports
class Race(SQLObject):
name = StringCol()
fightersAsList = MultipleJoin('RFighter', joinColumn="rf_id")
fightersAsSResult = SQLMultipleJoin('RFighter', joinColumn="rf_id")
class RFighter(SQLObject):
name = StringCol()
race = ForeignKey('Race', dbName="rf_id")
power = IntCol()
def createAllTables():
setupClass([Race, RFighter])
def test_1():
createAllTables()
# create some races
human = Race(name='human')
saiyajin = Race(name='saiyajin')
hibrid = Race(name='hibrid (human with sayajin)')
namek = Race(name='namekuseijin')
# create some fighters
RFighter(name='Gokou (Kakaruto)', race=saiyajin, power=10)
RFighter(name='Vegeta', race=saiyajin, power=9)
RFighter(name='Krilim', race=human, power=3)
RFighter(name='Yancha', race=human, power=2)
RFighter(name='Jackie Chan', race=human, power=2)
RFighter(name='Gohan', race=hibrid, power=8)
RFighter(name='Goten', race=hibrid, power=7)
trunks = RFighter(name='Trunks', race=hibrid, power=8)
picollo = RFighter(name='Picollo', race=namek, power=6)
RFighter(name='Neil', race=namek, power=5)
# testing the SQLMultipleJoin stuff
for i, j in zip(human.fightersAsList, human.fightersAsSResult):
assert i is j # the 2 ways should give the same result
assert namek.fightersAsSResult.count() == len(namek.fightersAsList)
assert saiyajin.fightersAsSResult.max('power') == 10
assert trunks in hibrid.fightersAsSResult
assert picollo not in hibrid.fightersAsSResult
assert str(hibrid.fightersAsSResult.sum('power')) == '23'
def test_multiple_join_transaction():
if not supports('transactions'):
pytest.skip("Transactions aren't supported")
createAllTables()
trans = Race._connection.transaction()
try:
namek = Race(name='namekuseijin', connection=trans)
RFighter(name='Gokou (Kakaruto)', race=namek, power=10,
connection=trans)
assert namek.fightersAsSResult.count() == 1
assert namek.fightersAsSResult[0]._connection == trans
finally:
trans.commit(True)
Race._connection.autoCommit = True