root / elixir / trunk / tests / test_dict.py @ 485

Revision 485, 4.8 kB (checked in by ged, 4 years ago)

fix a few cosmetic issues reported by pyflakes (mostly unused imports)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
Line 
1"""
2    test the deep-set functionality
3"""
4
5from elixir import *
6
7def setup():
8    metadata.bind = 'sqlite://'
9
10    global Table1, Table2, Table3
11    class Table1(Entity):
12        t1id = Field(Integer, primary_key=True)
13        name = Field(String(30))
14        tbl2s = OneToMany('Table2')
15        tbl3 = OneToOne('Table3')
16
17    class Table2(Entity):
18        t2id = Field(Integer, primary_key=True)
19        name = Field(String(30))
20        tbl1 = ManyToOne(Table1)
21
22    class Table3(Entity):
23        t3id = Field(Integer, primary_key=True)
24        name = Field(String(30))
25        tbl1 = ManyToOne(Table1)
26
27    setup_all()
28
29def teardown():
30    cleanup_all()
31
32class TestDeepSet(object):
33    def setup(self):
34        create_all()
35
36    def teardown(self):
37        session.close()
38        drop_all()
39
40    def test_set_attr(self):
41        t1 = Table1()
42        t1.from_dict(dict(name='test1'))
43        assert t1.name == 'test1'
44
45    def test_nonset_attr(self):
46        t1 = Table1(name='test2')
47        t1.from_dict({})
48        assert t1.name == 'test2'
49
50    def test_set_rel(self):
51        t1 = Table1()
52        t1.from_dict(dict(tbl3={'name': 'bob'}))
53        assert t1.tbl3.name == 'bob'
54
55    def test_remove_rel(self):
56        t1 = Table1()
57        t1.tbl3 = Table3()
58        t1.from_dict(dict(tbl3=None))
59        assert t1.tbl3 is None
60
61    def test_update_rel(self):
62        t1 = Table1()
63        t1.tbl3 = Table3(name='fred')
64        t1.from_dict(dict(tbl3={'name': 'bob'}))
65        assert t1.tbl3.name == 'bob'
66
67    def test_extend_list(self):
68        t1 = Table1()
69        t1.from_dict(dict(tbl2s=[{'name': 'test3'}]))
70        assert len(t1.tbl2s) == 1
71        assert t1.tbl2s[0].name == 'test3'
72
73    def test_truncate_list(self):
74        t1 = Table1()
75        t2 = Table2()
76        t1.tbl2s.append(t2)
77        session.commit()
78        t1.from_dict(dict(tbl2s=[]))
79        assert len(t1.tbl2s) == 0
80
81    def test_update_list_item(self):
82        t1 = Table1()
83        t2 = Table2()
84        t1.tbl2s.append(t2)
85        session.commit()
86        t1.from_dict(dict(tbl2s=[{'t2id': t2.t2id, 'name': 'test4'}]))
87        assert len(t1.tbl2s) == 1
88        assert t1.tbl2s[0].name == 'test4'
89
90    def test_invalid_update(self):
91        t1 = Table1()
92        t2 = Table2()
93        t1.tbl2s.append(t2)
94        session.commit()
95        try:
96            t1.from_dict(dict(tbl2s=[{'t2id': t2.t2id+1}]))
97            assert False
98        except:
99            pass
100
101    def test_to(self):
102        t1 = Table1(t1id=50, name='test1')
103        assert t1.to_dict() == {'t1id': 50, 'name': 'test1'}
104
105    def test_to_deep_m2o(self):
106        t1 = Table1(t1id=1, name='test1')
107        t2 = Table2(t2id=1, name='test2', tbl1=t1)
108        session.flush()
109
110        assert t2.to_dict(deep={'tbl1': {}}) == \
111               {'t2id': 1, 'name': 'test2', 'tbl1_t1id': 1,
112                'tbl1': {'name': 'test1'}}
113
114    def test_to_deep_m2o_none(self):
115        t2 = Table2(t2id=1, name='test2')
116        session.flush()
117        assert t2.to_dict(deep={'tbl1': {}}) == \
118               {'t2id': 1, 'name': 'test2', 'tbl1_t1id': None, 'tbl1': None}
119
120    def test_to_deep_o2m_empty(self):
121        t1 = Table1(t1id=51, name='test2')
122        assert t1.to_dict(deep={'tbl2s': {}}) == \
123                {'t1id': 51, 'name': 'test2', 'tbl2s': []}
124
125    def test_to_deep_o2m(self):
126        t1 = Table1(t1id=52, name='test3')
127        t2 = Table2(t2id=50, name='test4')
128        t1.tbl2s.append(t2)
129        session.commit()
130        assert t1.to_dict(deep={'tbl2s':{}}) == \
131                {'t1id': 52,
132                 'name': 'test3',
133                 'tbl2s': [{'t2id': 50, 'name': 'test4'}]}
134
135    def test_to_deep_o2o(self):
136        t1 = Table1(t1id=53, name='test2')
137        t1.tbl3 = Table3(t3id=50, name='wobble')
138        session.commit()
139        assert t1.to_dict(deep={'tbl3': {}}) == \
140                {'t1id': 53,
141                 'name': 'test2',
142                 'tbl3': {'t3id': 50, 'name': 'wobble'}}
143
144    def test_to_deep_nested(self):
145        t3 = Table3(t3id=1, name='test3')
146        t1 = Table1(t1id=1, name='test1', tbl3=t3)
147        t2 = Table2(t2id=1, name='test2', tbl1=t1)
148        session.flush()
149        assert t2.to_dict(deep={'tbl1': {'tbl3': {}}}) == \
150               {'t2id': 1,
151                'name': 'test2',
152                'tbl1_t1id': 1,
153                'tbl1': {'name': 'test1',
154                         'tbl3': {'t3id': 1,
155                                  'name': 'test3'}}}
156
157class TestSetOnAliasedColumn(object):
158    def setup(self):
159        metadata.bind = 'sqlite://'
160        session.clear()
161
162    def teardown(self):
163        cleanup_all(True)
164
165    def test_set_on_aliased_column(self):
166        class A(Entity):
167            name = Field(String(60), colname='strName')
168
169        setup_all(True)
170
171        a = A()
172        a.set(name='Aye')
173
174        assert a.name == 'Aye'
175        session.commit()
176        session.clear()
Note: See TracBrowser for help on using the browser.