File: test_dict.py

package info (click to toggle)
elixir 0.6.0-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 640 kB
  • ctags: 1,079
  • sloc: python: 4,936; makefile: 10
file content (143 lines) | stat: -rw-r--r-- 3,783 bytes parent folder | download
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
"""
    test the deep-set functionality
"""

import sqlalchemy as sa
from elixir import *

def setup():
    metadata.bind = 'sqlite:///'

    global Table1, Table2, Table3
    class Table1(Entity):
        t1id = Field(Integer, primary_key=True)
        name = Field(String(30))
        tbl2s = OneToMany('Table2')
        tbl3 = OneToOne('Table3')

    class Table2(Entity):
        t2id = Field(Integer, primary_key=True)
        name = Field(String(30))
        tbl1 = ManyToOne(Table1)

    class Table3(Entity):
        t3id = Field(Integer, primary_key=True)
        name = Field(String(30))
        tbl1 = ManyToOne(Table1)

    setup_all(True)

def teardown():
    cleanup_all(True)

class TestDeepSet(object):
    def test_set_attr(self):
        t1 = Table1()
        t1.from_dict(dict(name='test1'))
        assert t1.name == 'test1'

    def test_nonset_attr(self):
        t1 = Table1(name='test2')
        t1.from_dict({})
        assert t1.name == 'test2'

    def test_set_rel(self):
        t1 = Table1()
        t1.from_dict(dict(tbl3={'name': 'bob'}))
        assert t1.tbl3.name == 'bob'

    def test_remove_rel(self):
        t1 = Table1()
        t1.tbl3 = Table3()
        t1.from_dict(dict(tbl3=None))
        assert t1.tbl3 is None

    def test_update_rel(self):
        t1 = Table1()
        t1.tbl3 = Table3(name='fred')
        t1.from_dict(dict(tbl3={'name': 'bob'}))
        assert t1.tbl3.name == 'bob'

    def test_extend_list(self):
        t1 = Table1()
        t1.from_dict(dict(tbl2s=[{'name': 'test3'}]))
        assert len(t1.tbl2s) == 1
        assert t1.tbl2s[0].name == 'test3'

    def test_truncate_list(self):
        t1 = Table1()
        t2 = Table2()
        t1.tbl2s.append(t2)
        session.commit()
        t1.from_dict(dict(tbl2s=[]))
        assert len(t1.tbl2s) == 0

    def test_update_list_item(self):
        t1 = Table1()
        t2 = Table2()
        t1.tbl2s.append(t2)
        session.commit()
        t1.from_dict(dict(tbl2s=[{'t2id': t2.t2id, 'name': 'test4'}]))
        assert len(t1.tbl2s) == 1
        assert t1.tbl2s[0].name == 'test4'

    def test_invalid_update(self):
        t1 = Table1()
        t2 = Table2()
        t1.tbl2s.append(t2)
        session.commit()
        try:
            t1.from_dict(dict(tbl2s=[{'t2id':t2.t2id+1}]))
            assert False
        except:
            pass

    def test_to(self):
        t1 = Table1(t1id=50, name='test1')
        assert t1.to_dict() == {'t1id': 50, 'name': 'test1'}

    def test_to_deep(self):
        t1 = Table1(t1id=51, name='test2')
        assert t1.to_dict(deep={'tbl2s':{}}) == \
                {'t1id': 51, 'name': 'test2', 'tbl2s': []}

    def test_to_deep2(self):
        t1 = Table1(t1id=52, name='test3')
        t2 = Table2(t2id=50, name='test4')
        t1.tbl2s.append(t2)
        session.commit()
        assert t1.to_dict(deep={'tbl2s':{}}) == \
                {'t1id': 52,
                 'name': 'test3',
                 'tbl2s': [{'t2id': 50, 'name': 'test4'}]}

    def test_to_deep3(self):
        t1 = Table1(t1id=53, name='test2')
        t1.tbl3 = Table3(t3id=50, name='wobble')
        session.commit()
        assert t1.to_dict(deep={'tbl3':{}}) == \
                {'t1id': 53,
                 'name': 'test2',
                 'tbl3': {'t3id': 50, 'name': 'wobble'}}

class TestSetOnAliasedColumn(object):
    def setup(self):
        metadata.bind = 'sqlite:///'
        session.clear()

    def teardown(self):
        cleanup_all(True)

    def test_set_on_aliased_column(self):
        class A(Entity):
            name = Field(String(60), colname='strName')

        setup_all(True)

        a = A()
        a.set(name='Aye')

        assert a.name == 'Aye'
        session.commit()
        session.clear()