[FIX]Fixed the issue of translation for node which has avg.
[odoo/odoo.git] / openerp / tests / test_ir_sequence.py
1 # -*- coding: utf-8 -*-
2 # Run with one of these commands:
3 #    > OPENERP_ADDONS_PATH='../../addons/trunk' OPENERP_PORT=8069 \
4 #      OPENERP_DATABASE=yy PYTHONPATH=. python tests/test_ir_sequence.py
5 #    > OPENERP_ADDONS_PATH='../../addons/trunk' OPENERP_PORT=8069 \
6 #      OPENERP_DATABASE=yy nosetests tests/test_ir_sequence.py
7 #    > OPENERP_ADDONS_PATH='../../../addons/trunk' OPENERP_PORT=8069 \
8 #      OPENERP_DATABASE=yy PYTHONPATH=../:. unit2 test_ir_sequence
9 # This assume an existing database.
10 import psycopg2
11 import unittest2
12
13 import openerp
14 import common
15
16 DB = common.DB
17 ADMIN_USER_ID = common.ADMIN_USER_ID
18
19 def setUpModule():
20     common.create_xmlrpc_proxies()
21
22 tearDownModule = common.tearDownModule
23
24 def registry(model):
25     return openerp.modules.registry.RegistryManager.get(DB)[model]
26
27 def cursor():
28     return openerp.modules.registry.RegistryManager.get(DB).db.cursor()
29
30 class test_ir_sequence_standard(unittest2.TestCase):
31     """ A few tests for a 'Standard' (i.e. PostgreSQL) sequence. """
32
33     def test_ir_sequence_create(self):
34         """ Try to create a sequence object. """
35         cr = cursor()
36         d = dict(code='test_sequence_type', name='Test sequence type')
37         c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {})
38         assert c
39         d = dict(code='test_sequence_type', name='Test sequence')
40         c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {})
41         assert c
42         cr.commit()
43         cr.close()
44
45     def test_ir_sequence_search(self):
46         """ Try a search. """
47         cr = cursor()
48         ids = registry('ir.sequence').search(cr, ADMIN_USER_ID, [], {})
49         assert ids
50         cr.commit()
51         cr.close()
52
53     def test_ir_sequence_draw(self):
54         """ Try to draw a number. """
55         cr = cursor()
56         n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type', {})
57         assert n
58         cr.commit()
59         cr.close()
60
61     def test_ir_sequence_draw_twice(self):
62         """ Try to draw a number from two transactions. """
63         cr0 = cursor()
64         cr1 = cursor()
65         n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type', {})
66         assert n0
67         n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type', {})
68         assert n1
69         cr0.commit()
70         cr1.commit()
71         cr0.close()
72         cr1.close()
73
74 class test_ir_sequence_no_gap(unittest2.TestCase):
75     """ Copy of the previous tests for a 'No gap' sequence. """
76
77     def test_ir_sequence_create_no_gap(self):
78         """ Try to create a sequence object. """
79         cr = cursor()
80         d = dict(code='test_sequence_type_2', name='Test sequence type')
81         c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {})
82         assert c
83         d = dict(code='test_sequence_type_2', name='Test sequence',
84             implementation='no_gap')
85         c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {})
86         assert c
87         cr.commit()
88         cr.close()
89
90     def test_ir_sequence_draw_no_gap(self):
91         """ Try to draw a number. """
92         cr = cursor()
93         n = registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_2', {})
94         assert n
95         cr.commit()
96         cr.close()
97
98     def test_ir_sequence_draw_twice_no_gap(self):
99         """ Try to draw a number from two transactions.
100         This is expected to not work.
101         """
102         cr0 = cursor()
103         cr1 = cursor()
104         msg_re = '^could not obtain lock on row in relation "ir_sequence"$'
105         with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re):
106             n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {})
107             assert n0
108             n1 = registry('ir.sequence').get(cr1, ADMIN_USER_ID, 'test_sequence_type_2', {})
109         cr0.close()
110         cr1.close()
111
112 class test_ir_sequence_change_implementation(unittest2.TestCase):
113     """ Create sequence objects and change their ``implementation`` field. """
114
115     def test_ir_sequence_1_create(self):
116         """ Try to create a sequence object. """
117         cr = cursor()
118         d = dict(code='test_sequence_type_3', name='Test sequence type')
119         c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {})
120         assert c
121         d = dict(code='test_sequence_type_3', name='Test sequence')
122         c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {})
123         assert c
124         d = dict(code='test_sequence_type_4', name='Test sequence type')
125         c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {})
126         assert c
127         d = dict(code='test_sequence_type_4', name='Test sequence',
128             implementation='no_gap')
129         c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {})
130         assert c
131         cr.commit()
132         cr.close()
133
134     def test_ir_sequence_2_write(self):
135         cr = cursor()
136         ids = registry('ir.sequence').search(cr, ADMIN_USER_ID,
137             [('code', 'in', ['test_sequence_type_3', 'test_sequence_type_4'])], {})
138         registry('ir.sequence').write(cr, ADMIN_USER_ID, ids,
139             {'implementation': 'standard'}, {})
140         registry('ir.sequence').write(cr, ADMIN_USER_ID, ids,
141             {'implementation': 'no_gap'}, {})
142         cr.commit()
143         cr.close()
144
145     def test_ir_sequence_3_unlink(self):
146         cr = cursor()
147         ids = registry('ir.sequence').search(cr, ADMIN_USER_ID,
148             [('code', 'in', ['test_sequence_type_3', 'test_sequence_type_4'])], {})
149         registry('ir.sequence').unlink(cr, ADMIN_USER_ID, ids, {})
150         cr.commit()
151         cr.close()
152
153 class test_ir_sequence_generate(unittest2.TestCase):
154     """ Create sequence objects and generate some values. """
155
156     def test_ir_sequence_create(self):
157         """ Try to create a sequence object. """
158         cr = cursor()
159         d = dict(code='test_sequence_type_5', name='Test sequence type')
160         c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {})
161         assert c
162         d = dict(code='test_sequence_type_5', name='Test sequence')
163         c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {})
164         assert c
165         cr.commit()
166         cr.close()
167
168         cr = cursor()
169         f = lambda *a: registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_5', {})
170         assert all(str(x) == f() for x in xrange(1,1000))
171         cr.commit()
172         cr.close()
173
174     def test_ir_sequence_create_no_gap(self):
175         """ Try to create a sequence object. """
176         cr = cursor()
177         d = dict(code='test_sequence_type_6', name='Test sequence type',
178             implementation='no_gap')
179         c = registry('ir.sequence.type').create(cr, ADMIN_USER_ID, d, {})
180         assert c
181         d = dict(code='test_sequence_type_6', name='Test sequence')
182         c = registry('ir.sequence').create(cr, ADMIN_USER_ID, d, {})
183         assert c
184         cr.commit()
185         cr.close()
186
187         cr = cursor()
188         f = lambda *a: registry('ir.sequence').get(cr, ADMIN_USER_ID, 'test_sequence_type_6', {})
189         assert all(str(x) == f() for x in xrange(1,1000))
190         cr.commit()
191         cr.close()
192         
193
194
195 if __name__ == '__main__':
196     unittest2.main()
197
198
199 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: