root / elixir / trunk / tests / test_m2o.py @ 273

Revision 273, 4.5 kB (checked in by ged, 5 years ago)

removed empty test file. The selfref tests are in test_o2m & test_m2m.

Line 
1"""
2test many to one relationships
3"""
4
5from elixir import *
6
7def setup():
8    metadata.bind = 'sqlite:///'
9
10class TestManyToOne(object):
11    def teardown(self):
12        cleanup_all(True)
13   
14    def test_simple(self):
15        class A(Entity):
16            name = Field(String(60))
17
18        class B(Entity):
19            name = Field(String(60))
20            a = ManyToOne('A')
21
22        setup_all(True)
23
24        b1 = B(name='b1', a=A(name='a1'))
25
26        session.flush()
27        session.clear()
28
29        b = B.query.one()
30
31        assert b.a.name == 'a1'
32
33    # this test is in test_o2m.py
34    # def test_selfref(self):
35
36    def test_with_key_pk(self):
37        class A(Entity):
38            test = Field(Integer, primary_key=True, key='testx')
39
40        class B(Entity):
41            a = ManyToOne('A')
42           
43        setup_all(True)
44       
45        b1 = B(a=A(testx=1))
46       
47        session.flush()
48        session.clear()
49       
50        b = B.query.one()
51
52        assert b.a.testx == 1
53
54    def test_one_pk(self):
55        class A(Entity):
56            name = Field(String(40), primary_key=True)
57         
58        class B(Entity):
59            a = ManyToOne('A', primary_key=True)
60         
61        class C(Entity):
62            b = ManyToOne('B', primary_key=True)
63
64        setup_all()
65
66        assert A.table.primary_key.columns.has_key('name')
67        assert B.table.primary_key.columns.has_key('a_name')
68        assert C.table.primary_key.columns.has_key('b_a_name')
69
70    def test_m2o_is_only_pk(self):
71        class A(Entity):
72            pass
73         
74        class B(Entity):
75            a = ManyToOne('A', primary_key=True)
76         
77        setup_all()
78
79        assert A.table.primary_key.columns.has_key('id')
80        assert B.table.primary_key.columns.has_key('a_id')
81        assert not B.table.primary_key.columns.has_key('id')
82
83    def test_multi_pk_in_target(self):
84        class A(Entity):
85            key1 = Field(Integer, primary_key=True)
86            key2 = Field(String(40), primary_key=True)
87         
88        class B(Entity):
89            num = Field(Integer, primary_key=True)
90            a = ManyToOne('A', primary_key=True)
91         
92        class C(Entity):
93            num = Field(Integer, primary_key=True)
94            b = ManyToOne('B', primary_key=True)
95
96        setup_all()
97
98        assert A.table.primary_key.columns.has_key('key1')
99        assert A.table.primary_key.columns.has_key('key2')
100
101        assert B.table.primary_key.columns.has_key('num')
102        assert B.table.primary_key.columns.has_key('a_key1')
103        assert B.table.primary_key.columns.has_key('a_key2')
104
105        assert C.table.primary_key.columns.has_key('num')
106        assert C.table.primary_key.columns.has_key('b_num')
107        assert C.table.primary_key.columns.has_key('b_a_key1')
108        assert C.table.primary_key.columns.has_key('b_a_key2')
109
110    def test_cycle_but_use_alter(self):
111        class A(Entity):
112            c = ManyToOne('C', use_alter=True)
113         
114        class B(Entity):
115            a = ManyToOne('A', primary_key=True)
116         
117        class C(Entity):
118            b = ManyToOne('B', primary_key=True)
119
120        setup_all()
121
122        assert B.table.primary_key.columns.has_key('a_id')
123        assert C.table.primary_key.columns.has_key('b_a_id')
124        assert A.table.primary_key.columns.has_key('id')
125        assert A.table.columns.has_key('c_b_a_id')
126
127    def test_multi(self):
128        class A(Entity):
129            name = Field(String(32))
130           
131        class B(Entity):
132            name = Field(String(15))
133           
134            a_rel1 = ManyToOne('A')
135            a_rel2 = ManyToOne('A')
136
137        setup_all(True)
138
139        a1 = A(name="a1")
140        a2 = A(name="a2")
141        b1 = B(name="b1", a_rel1=a1, a_rel2=a2)
142        b2 = B(name="b2", a_rel1=a1, a_rel2=a1)
143       
144        session.flush()
145        session.clear()
146       
147        a1 = A.get_by(name="a1")
148        a2 = A.get_by(name="a2")
149        b1 = B.get_by(name="b1")
150        b2 = B.get_by(name="b2")
151       
152        assert a1 == b2.a_rel1
153        assert a2 == b1.a_rel2
154
155    def test_belongs_to_syntax(self):
156        class Person(Entity):
157            has_field('name', String(30))
158
159        class Animal(Entity):
160            has_field('name', String(30))
161            belongs_to('owner', of_kind='Person')
162
163        setup_all(True)
164       
165        santa = Person(name="Santa Claus")
166        rudolph = Animal(name="Rudolph", owner=santa)
167       
168        session.flush()
169        session.clear()
170       
171        assert "Claus" in Animal.get_by(name="Rudolph").owner.name
Note: See TracBrowser for help on using the browser.