proteus 7.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ import os
4
+
5
+ os.environ.setdefault('TRYTOND_DATABASE_URI', 'sqlite:///')
6
+ os.environ.setdefault('DB_NAME', ':memory:')
7
+
8
+ here = os.path.dirname(__file__)
9
+ readme = os.path.normpath(os.path.join(here, '..', '..', 'README.rst'))
@@ -0,0 +1,17 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ from unittest import TestCase
4
+
5
+ from proteus import config
6
+ from trytond.tests.test_tryton import create_db, db_exist
7
+
8
+
9
+ class ProteusTestCase(TestCase):
10
+
11
+ @classmethod
12
+ def setUpClass(cls):
13
+ if not db_exist():
14
+ create_db()
15
+
16
+ def setUp(self):
17
+ self.config = config.set_trytond()
@@ -0,0 +1,49 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+
4
+ import unittest
5
+
6
+ try:
7
+ import pydot
8
+ except ImportError:
9
+ pydot = None
10
+
11
+ from proteus import Model, Wizard, launch_action
12
+
13
+ from .common import ProteusTestCase
14
+
15
+
16
+ class TestAction(ProteusTestCase):
17
+
18
+ def test_act_window(self):
19
+ IrModel = Model.get('ir.model')
20
+ actions = IrModel.find([
21
+ ('name', '=', 'ir.action'),
22
+ ])
23
+ model_access = launch_action(
24
+ 'ir.act_model_access_form_relate_model', actions)
25
+ self.assertEqual(
26
+ {m.__class__.__name__ for m in model_access},
27
+ {'ir.model.access'})
28
+
29
+ def test_wizard(self):
30
+ IrModel = Model.get('ir.model')
31
+ actions = IrModel.find([
32
+ ('name', '=', 'ir.action'),
33
+ ])
34
+ wizard = launch_action('ir.print_model_graph', actions)
35
+ self.assertIsInstance(wizard, Wizard)
36
+ self.assertEqual(wizard.name, 'ir.model.print_model_graph')
37
+
38
+ @unittest.skipIf(not pydot, 'requires pydot')
39
+ def test_report(self):
40
+ IrModel = Model.get('ir.model')
41
+ actions = IrModel.find([
42
+ ('name', '=', 'ir.action'),
43
+ ])
44
+ ftype, data, direct_print, report_name = launch_action(
45
+ 'ir.report_model_workflow_graph', actions)
46
+ self.assertIsInstance(ftype, str)
47
+ self.assertIsInstance(data, bytes)
48
+ self.assertIsInstance(direct_print, bool)
49
+ self.assertIsInstance(report_name, str)
@@ -0,0 +1,40 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ import proteus.config
4
+
5
+ from .common import ProteusTestCase
6
+
7
+
8
+ class TestConfig(ProteusTestCase):
9
+
10
+ def test_proxy(self):
11
+ config = proteus.config.get_config()
12
+ user_proxy = config.get_proxy('res.user')
13
+ user_id = user_proxy.search([('login', '=', 'admin')], 0, 1, None,
14
+ config.context)[0]
15
+ self.assertTrue(user_id == config.user)
16
+
17
+ def test_proxy_keyword(self):
18
+ config = proteus.config.get_config()
19
+ user_proxy = config.get_proxy('res.user')
20
+ user_id, = user_proxy.search(
21
+ [('login', '=', 'admin')], limit=1, context=config.context)
22
+ self.assertTrue(user_id == config.user)
23
+
24
+ def test_proxy_methods(self):
25
+ config = proteus.config.get_config()
26
+ self.assertTrue('search' in config.get_proxy_methods('res.user'))
27
+
28
+ def test_trytond_config_eq(self):
29
+ config1 = proteus.config.get_config()
30
+ proteus.config.set_trytond()
31
+ config2 = proteus.config.get_config()
32
+ self.assertEqual(config1, config2)
33
+
34
+ self.assertRaises(NotImplementedError, config1.__eq__, None)
35
+
36
+ def test_repr(self):
37
+ config = proteus.config.TrytondConfig('sqlite:///:memory:')
38
+ self.assertEqual(repr(config),
39
+ "proteus.config.TrytondConfig("
40
+ "'sqlite:///:memory:', 'admin', config_file=None)")
@@ -0,0 +1,16 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of this
2
+ # repository contains the full copyright notices and license terms.
3
+ from .common import ProteusTestCase
4
+
5
+
6
+ class TestContext(ProteusTestCase):
7
+
8
+ def test_config(self):
9
+ prev_ctx = self.config._context
10
+
11
+ with self.config.set_context({'a': 1}):
12
+ self.assertEqual(self.config.context['a'], 1)
13
+ for key, value in prev_ctx.items():
14
+ self.assertEqual(self.config.context[key], value)
15
+
16
+ self.assertEqual(self.config.context, prev_ctx)
@@ -0,0 +1,406 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ from proteus import Model
4
+
5
+ from .common import ProteusTestCase
6
+
7
+
8
+ class TestModel(ProteusTestCase):
9
+
10
+ def test_class_cache(self):
11
+ User1 = Model.get('res.user')
12
+ User2 = Model.get('res.user')
13
+ self.assertEqual(id(User1), id(User2))
14
+
15
+ Model.reset()
16
+ User3 = Model.get('res.user')
17
+ self.assertNotEqual(id(User1), id(User3))
18
+
19
+ def test_class_method(self):
20
+ User = Model.get('res.user')
21
+ self.assertTrue(len(User.search([('login', '=', 'admin')], {})))
22
+
23
+ def test_int(self):
24
+ User = Model.get('res.user')
25
+ admin = User.find([('login', '=', 'admin')])[0]
26
+ self.assertEqual(int(admin), admin.id)
27
+
28
+ def test_id_zero(self):
29
+ User = Model.get('res.user')
30
+ root = User(0)
31
+ self.assertEqual(root.login, 'root')
32
+
33
+ def test_find(self):
34
+ User = Model.get('res.user')
35
+ admin = User.find([('login', '=', 'admin')])[0]
36
+ self.assertEqual(admin.login, 'admin')
37
+
38
+ def test_many2one(self):
39
+ User = Model.get('res.user')
40
+ admin = User.find([('login', '=', 'admin')])[0]
41
+ self.assertTrue(isinstance(admin.create_uid, User))
42
+ try:
43
+ admin.create_uid = 'test'
44
+ self.fail()
45
+ except AssertionError:
46
+ pass
47
+ admin.create_uid = admin
48
+ admin.create_uid = None
49
+
50
+ User(write_uid=None)
51
+
52
+ def test_one2many(self):
53
+ Group = Model.get('res.group')
54
+ administration = Group.find([('name', '=', 'Administration')])[0]
55
+ self.assertTrue(isinstance(administration.model_access, list))
56
+ self.assertTrue(isinstance(administration.model_access[0],
57
+ Model.get('ir.model.access')))
58
+ try:
59
+ administration.model_access = []
60
+ self.fail()
61
+ except AttributeError:
62
+ pass
63
+
64
+ def test_many2many(self):
65
+ User = Model.get('res.user')
66
+ admin = User.find([('login', '=', 'admin')])[0]
67
+ self.assertTrue(isinstance(admin.groups, list))
68
+ self.assertTrue(isinstance(admin.groups[0],
69
+ Model.get('res.group')))
70
+ try:
71
+ admin.groups = []
72
+ self.fail()
73
+ except AttributeError:
74
+ pass
75
+
76
+ def test_many2many_append_unique(self):
77
+ User = Model.get('res.user')
78
+ Group = Model.get('res.group')
79
+ admin, = User.find([('login', '=', 'admin')])
80
+ group = Group(admin.groups[0].id)
81
+ admin.groups.append(group)
82
+
83
+ self.assertEqual(admin.groups.count(group), 1)
84
+
85
+ def test_many2many_extend_unique(self):
86
+ User = Model.get('res.user')
87
+ Group = Model.get('res.group')
88
+ admin, = User.find([('login', '=', 'admin')])
89
+ group = Group(admin.groups[0].id)
90
+ admin.groups.extend([group])
91
+
92
+ self.assertEqual(admin.groups.count(group), 1)
93
+
94
+ # TODO test date
95
+
96
+ def test_reference(self):
97
+ Attachment = Model.get('ir.attachment')
98
+ User = Model.get('res.user')
99
+ admin = User.find([('login', '=', 'admin')])[0]
100
+ attachment = Attachment()
101
+ attachment.name = 'Test'
102
+ attachment.resource = admin
103
+ attachment.save()
104
+ self.assertEqual(attachment.resource, admin)
105
+
106
+ def test_id_counter(self):
107
+ User = Model.get('res.user')
108
+ test1 = User()
109
+ self.assertTrue(test1.id < 0)
110
+ test2 = User()
111
+ self.assertTrue(test2.id < 0)
112
+ self.assertNotEqual(test1.id, test2.id)
113
+
114
+ def test_init(self):
115
+ User = Model.get('res.user')
116
+ self.assertEqual(User(1).id, 1)
117
+ self.assertEqual(User(name='Foo').name, 'Foo')
118
+
119
+ Lang = Model.get('ir.lang')
120
+ en, = Lang.find([('code', '=', 'en')])
121
+ self.assertEqual(User(language=en).language, en)
122
+ self.assertEqual(User(language=en.id).language, en)
123
+
124
+ Group = Model.get('res.group')
125
+ groups = Group.find()
126
+ self.assertEqual(len(User(groups=groups).groups), len(groups))
127
+ self.assertEqual(len(User(groups=[x.id for x in groups]).groups),
128
+ len(groups))
129
+
130
+ def test_assign_unknown_field(self):
131
+ "Test it is not allowed to assign unknown field"
132
+ User = Model.get('res.user')
133
+ user = User()
134
+
135
+ with self.assertRaises(AttributeError):
136
+ user.unknown_field = 'foo'
137
+
138
+ def test_save(self):
139
+ User = Model.get('res.user')
140
+ test = User()
141
+ test.name = 'Test'
142
+ test.login = 'test'
143
+ test.save()
144
+ self.assertTrue(test.id > 0)
145
+
146
+ test = User(test.id)
147
+ self.assertEqual(test.name, 'Test')
148
+ self.assertEqual(test.login, 'test')
149
+ self.assertTrue(test.active)
150
+
151
+ test.signature = 'Test signature'
152
+ self.assertEqual(test.signature, 'Test signature')
153
+ test.save()
154
+ self.assertEqual(test.signature, 'Test signature')
155
+ test = User(test.id)
156
+ self.assertEqual(test.signature, 'Test signature')
157
+
158
+ Group = Model.get('res.group')
159
+ test2 = User(name='Test 2', login='test2',
160
+ groups=[Group(name='Test 2')])
161
+ test2.save()
162
+ self.assertTrue(test2.id > 0)
163
+ self.assertEqual(test2.name, 'Test 2')
164
+ self.assertEqual(test2.login, 'test2')
165
+
166
+ test.signature = 'classmethod save'
167
+ test2.name = 'Test 2 classmethod'
168
+ test3 = User(name='Test 3', login='test3')
169
+ User.save([test, test2, test3])
170
+ self.assertEqual(test.signature, 'classmethod save')
171
+ self.assertEqual(test2.name, 'Test 2 classmethod')
172
+ self.assertTrue(test3.id > 0)
173
+ self.assertEqual(test3.name, 'Test 3')
174
+
175
+ def test_save_many2one(self):
176
+ User = Model.get('res.user')
177
+ test = User()
178
+ test.name = 'Test save many2one'
179
+ test.login = 'test_save_many2one'
180
+ test.save()
181
+
182
+ Lang = Model.get('ir.lang')
183
+ en, = Lang.find([('code', '=', 'en')])
184
+ test.language = en
185
+ test.save()
186
+ self.assertEqual(test.language, en)
187
+
188
+ test.language = None
189
+ test.save()
190
+ self.assertFalse(test.language)
191
+
192
+ def test_save_one2many(self):
193
+ Group = Model.get('res.group')
194
+ group = Group()
195
+ group.name = 'Test save one2many'
196
+ group.save()
197
+
198
+ ModelAccess = Model.get('ir.model.access')
199
+ model_access = ModelAccess()
200
+ model_access.model = 'res.group'
201
+ model_access.perm_read = True
202
+ model_access.perm_write = True
203
+ model_access.perm_create = True
204
+ model_access.perm_delete = True
205
+
206
+ group.model_access.append(model_access)
207
+ group.save()
208
+ self.assertEqual(len(group.model_access), 1)
209
+
210
+ model_access_id = group.model_access[0].id
211
+
212
+ group.name = 'Test save one2many bis'
213
+ group.model_access[0].description = 'Test save one2many'
214
+ group.save()
215
+ self.assertEqual(group.model_access[0].description,
216
+ 'Test save one2many')
217
+
218
+ group.model_access.pop()
219
+ group.save()
220
+ self.assertEqual(group.model_access, [])
221
+ self.assertEqual(len(ModelAccess.find([('id', '=', model_access_id)])),
222
+ 1)
223
+
224
+ group.model_access.append(ModelAccess(model_access_id))
225
+ group.save()
226
+ self.assertEqual(len(group.model_access), 1)
227
+
228
+ group.model_access.remove(group.model_access[0])
229
+ group.save()
230
+ self.assertEqual(group.model_access, [])
231
+ self.assertEqual(len(ModelAccess.find([('id', '=', model_access_id)])),
232
+ 0)
233
+
234
+ def test_save_many2many(self):
235
+ User = Model.get('res.user')
236
+ test = User()
237
+ test.name = 'Test save many2many'
238
+ test.login = 'test_save_many2many'
239
+ test.save()
240
+
241
+ Group = Model.get('res.group')
242
+ group = Group()
243
+ group.name = 'Test save many2many'
244
+ group.save()
245
+
246
+ test.groups.append(group)
247
+ test.save()
248
+ self.assertEqual(len(test.groups), 1)
249
+
250
+ group_id = test.groups[0].id
251
+
252
+ test.name = 'Test save many2many bis'
253
+ test.groups[0].name = 'Test save many2many bis'
254
+ test.save()
255
+ self.assertEqual(test.groups[0].name,
256
+ 'Test save many2many bis')
257
+
258
+ test.groups.pop()
259
+ test.save()
260
+ self.assertEqual(test.groups, [])
261
+ self.assertEqual(len(Group.find([('id', '=', group_id)])), 1)
262
+
263
+ test.groups.append(Group(group_id))
264
+ test.save()
265
+ self.assertEqual(len(test.groups), 1)
266
+
267
+ test.groups.remove(test.groups[0])
268
+ test.save()
269
+ self.assertEqual(test.groups, [])
270
+ self.assertEqual(len(Group.find([('id', '=', group_id)])), 0)
271
+
272
+ def test_eq(self):
273
+ User = Model.get('res.user')
274
+ test = User()
275
+ test.name = 'Test eq'
276
+ test.login = 'test_eq'
277
+ test.save()
278
+ admin1 = User.find([('login', '=', 'admin')])[0]
279
+ admin2 = User.find([('login', '=', 'admin')])[0]
280
+
281
+ self.assertEqual(admin1, admin2)
282
+ self.assertFalse(admin1 != admin2)
283
+ self.assertNotEqual(admin1, test)
284
+ self.assertFalse(admin1 == test)
285
+ self.assertNotEqual(admin1, None)
286
+ self.assertNotEqual(admin1, False)
287
+ self.assertNotEqual(admin1, 1)
288
+
289
+ def test_lt(self):
290
+ User = Model.get('res.user')
291
+
292
+ user1 = User(1)
293
+ user2 = User(2)
294
+
295
+ self.assertLess(user1, user2)
296
+
297
+ def test_lt_other_model(self):
298
+ User = Model.get('res.user')
299
+ Group = Model.get('res.group')
300
+
301
+ user1 = User(1)
302
+ group2 = Group(2)
303
+
304
+ with self.assertRaises(TypeError):
305
+ user1 < group2
306
+
307
+ def test_default_set(self):
308
+ User = Model.get('res.user')
309
+ Group = Model.get('res.group')
310
+ group_ids = [x.id for x in Group.find()]
311
+ test = User()
312
+ test._default_set({
313
+ 'name': 'Test',
314
+ 'groups': group_ids,
315
+ })
316
+ self.assertEqual(test.name, 'Test')
317
+ self.assertEqual([x.id for x in test.groups], group_ids)
318
+
319
+ test = User()
320
+ test._default_set({
321
+ 'name': 'Test',
322
+ 'groups': [
323
+ {
324
+ 'name': 'Group 1',
325
+ },
326
+ {
327
+ 'name': 'Group 2',
328
+ },
329
+ ],
330
+ })
331
+ self.assertEqual(test.name, 'Test')
332
+ self.assertEqual([x.name for x in test.groups], ['Group 1', 'Group 2'])
333
+
334
+ def test_delete(self):
335
+ Group = Model.get('res.group')
336
+ test = Group()
337
+ test.name = 'Test delete'
338
+ test.save()
339
+ test.delete()
340
+
341
+ def test_duplicate(self):
342
+ User = Model.get('res.user')
343
+ test = User()
344
+ test.name = 'Test duplicate'
345
+ test.login = 'test duplicate'
346
+ test.save()
347
+ copy, = User.duplicate([test], {'name': 'Test copy'})
348
+ self.assertEqual(copy.name, 'Test copy')
349
+ self.assertEqual(copy.login, 'test duplicate (copy)')
350
+ self.assertNotEqual(copy.id, test.id)
351
+
352
+ def test_on_change(self):
353
+ Trigger = Model.get('ir.trigger')
354
+
355
+ trigger = Trigger()
356
+
357
+ trigger.on_time_ = True
358
+ self.assertEqual(trigger.on_create_, False)
359
+
360
+ trigger.on_create_ = True
361
+ self.assertEqual(trigger.on_time_, False)
362
+
363
+ def test_on_change_with(self):
364
+ Attachment = Model.get('ir.attachment')
365
+
366
+ attachment = Attachment()
367
+
368
+ attachment.description = 'Test'
369
+ self.assertEqual(attachment.summary, 'Test')
370
+
371
+ def test_on_change_set(self):
372
+ User = Model.get('res.user')
373
+ Group = Model.get('res.group')
374
+
375
+ test = User()
376
+ test._on_change_set('name', 'Test')
377
+ self.assertEqual(test.name, 'Test')
378
+ group_ids = [x.id for x in Group.find()]
379
+ test._on_change_set('groups', group_ids)
380
+ self.assertEqual([x.id for x in test.groups], group_ids)
381
+
382
+ test._on_change_set('groups', {'remove': [group_ids[0]]})
383
+ self.assertEqual([x.id for x in test.groups], group_ids[1:])
384
+
385
+ test._on_change_set('groups', {'add': [(-1, {
386
+ 'name': 'Bar',
387
+ })]})
388
+ self.assertTrue([x for x in test.groups if x.name == 'Bar'])
389
+
390
+ test.groups.extend(Group.find())
391
+ group = test.groups[0]
392
+ test._on_change_set('groups', {'update': [{
393
+ 'id': group.id,
394
+ 'name': 'Foo',
395
+ }]})
396
+ self.assertTrue([x for x in test.groups if x.name == 'Foo'])
397
+
398
+ def test_model_list_find(self):
399
+ User = Model.get('res.user')
400
+ Group = Model.get('res.group')
401
+
402
+ test = User()
403
+ groups = test.groups.find(order=[('id', 'ASC')])
404
+ all_groups = Group.find([], order=[('id', 'ASC')])
405
+
406
+ self.assertListEqual(groups, all_groups)
@@ -0,0 +1,23 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ import doctest
4
+ import os
5
+
6
+ import proteus
7
+ import proteus.config
8
+ from trytond.tests.test_tryton import doctest_setup, doctest_teardown
9
+
10
+ here = os.path.dirname(__file__)
11
+ readme = os.path.normpath(os.path.join(here, '..', '..', 'README.rst'))
12
+
13
+
14
+ def load_tests(loader, tests, pattern):
15
+ for mod in (proteus, proteus.config):
16
+ tests.addTest(doctest.DocTestSuite(mod))
17
+ if os.path.isfile(readme):
18
+ tests.addTest(doctest.DocFileSuite(
19
+ readme, module_relative=False,
20
+ setUp=doctest_setup, tearDown=doctest_teardown,
21
+ encoding='utf-8',
22
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
23
+ return tests
@@ -0,0 +1,29 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ import unittest
4
+
5
+ try:
6
+ import pydot
7
+ except ImportError:
8
+ pydot = None
9
+
10
+ from proteus import Model, Report
11
+
12
+ from .common import ProteusTestCase
13
+
14
+
15
+ class TestReport(ProteusTestCase):
16
+
17
+ @unittest.skipIf(not pydot, 'requires pydot')
18
+ def test_model_graph(self):
19
+ IrModel = Model.get('ir.model')
20
+ models = IrModel.find([])
21
+ data = {
22
+ 'level': 1,
23
+ 'filter': '',
24
+ }
25
+ report = Report('ir.model.graph')
26
+ type_, data, print_, name = report.execute(models, data)
27
+ self.assertEqual(type_, 'png')
28
+ self.assertEqual(print_, False)
29
+ self.assertEqual(name, 'Graph')
@@ -0,0 +1,54 @@
1
+ # This file is part of Tryton. The COPYRIGHT file at the top level of
2
+ # this repository contains the full copyright notices and license terms.
3
+ from proteus import Model, Wizard
4
+
5
+ from .common import ProteusTestCase
6
+
7
+
8
+ class TestWizard(ProteusTestCase):
9
+
10
+ def test_translation_clean(self):
11
+ translation_clean = Wizard('ir.translation.clean')
12
+ self.assertEqual(translation_clean.form.__class__.__name__,
13
+ 'ir.translation.clean.start')
14
+ translation_clean.execute('clean')
15
+ self.assertEqual(translation_clean.form.__class__.__name__,
16
+ 'ir.translation.clean.succeed')
17
+
18
+ def test_translation_export(self):
19
+ Lang = Model.get('ir.lang')
20
+ Module = Model.get('ir.module')
21
+ translation_export = Wizard('ir.translation.export')
22
+ translation_export.form.language, = Lang.find([('code', '=', 'en')])
23
+ translation_export.form.module, = Module.find([('name', '=', 'ir')])
24
+ translation_export.execute('export')
25
+ self.assertTrue(translation_export.form.file)
26
+ translation_export.execute('end')
27
+
28
+ def test_user_config(self):
29
+ User = Model.get('res.user')
30
+
31
+ user_config = Wizard('res.user.config')
32
+ user_config.execute('user')
33
+ user_config.form.name = 'Foo'
34
+ user_config.form.login = 'foo'
35
+ user_config.execute('add')
36
+ self.assertEqual(user_config.form.name, None)
37
+ self.assertEqual(user_config.form.login, None)
38
+ user_config.form.name = 'Bar'
39
+ user_config.form.login = 'bar'
40
+ user_config.execute('end')
41
+
42
+ self.assertTrue(User.find([('name', '=', 'Foo')]))
43
+ self.assertFalse(User.find([('name', '=', 'Bar')]))
44
+
45
+ def test_translation_update(self):
46
+ print_model_graph = Wizard('ir.translation.update')
47
+ self.assertEqual(len(print_model_graph.actions), 0)
48
+ print_model_graph.execute('update')
49
+ self.assertEqual(len(print_model_graph.actions), 1)
50
+
51
+ def test_configuration_wizard(self):
52
+ config_wizard = Wizard('ir.module.config_wizard')
53
+ config_wizard.execute('action')
54
+ self.assertTrue(config_wizard.actions)