~jfb-tempo-consulting/unifield-wm/sync-env-py3

« back to all changes in this revision

Viewing changes to mkdb.py

  • Committer: Samus CTO
  • Date: 2012-08-28 12:38:31 UTC
  • Revision ID: cto@openerp.com-20120828123831-9dhavvjktnrl2p8d
[INIT]

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python2
 
2
 
 
3
#Load config file
 
4
import config
 
5
 
 
6
#Load OpenERP Client Library
 
7
import openerplib
 
8
 
 
9
#Load tests procedures
 
10
import unittest
 
11
#from tests import *
 
12
from tests.openerplib import db
 
13
 
 
14
from scripts.common import Synchro, HQ, Coordo, Project, Project2
 
15
 
 
16
try:
 
17
    import ipdb as pdb
 
18
except:
 
19
    import pdb
 
20
 
 
21
skipCreation = False
 
22
skipModules = False
 
23
skipConfig = False
 
24
skipGroups = False
 
25
skipModuleTest = False
 
26
skipRegister = False
 
27
skipSync = False
 
28
skipUniUser = False
 
29
 
 
30
class db_creation(object):
 
31
 
 
32
    buggy_models = ('sale.price.setup',)
 
33
 
 
34
    base_wizards = {
 
35
        'res.config.view' : {
 
36
            'name' : "auto_init",
 
37
            'view' : 'extended',
 
38
        },
 
39
        'sale.price.setup' : {
 
40
            'sale_price' : 0.10,
 
41
        },
 
42
        'msf_instance.setup' : {
 
43
            'button' : 'action_skip',
 
44
        },
 
45
        'account.installer' : {
 
46
            'charts' : 'msf_chart_of_account',
 
47
        },
 
48
        'stock.location.configuration.wizard' : {
 
49
            'location_type' : 'internal',
 
50
            'location_usage' : 'stock',
 
51
            'location_name' : 'Test Location',
 
52
            'button' : 'action_stop',
 
53
        },
 
54
    }
 
55
 
 
56
    db = None
 
57
 
 
58
    def setUp(self):
 
59
        if self.db is None:
 
60
            raise Exception("Bad use of class")
 
61
 
 
62
    @unittest.skipIf(skipCreation, "Creation desactivated")
 
63
    def test_00_drop(self):
 
64
        self.db.connect('admin')
 
65
        self.db.drop()
 
66
 
 
67
    @unittest.skipIf(skipCreation, "Creation desactivated")
 
68
    def test_01_create_db(self):
 
69
        self.db.connect('admin')
 
70
        self.db.create_db(config.admin_password)
 
71
        self.db.wait()
 
72
 
 
73
    @unittest.skipIf(skipModules, "Modules installation desactivated")
 
74
    def test_02_base_install(self):
 
75
        self.db.connect('admin')
 
76
        self.db.module('msf_profile').install().do()
 
77
        self.db.module('sync_so').install().do()
 
78
 
 
79
    @unittest.skipIf(skipModules, "Modules installation desactivated")
 
80
    def test_03_specific_install(self):
 
81
        self.db.connect('admin')
 
82
        if self.db is Synchro:
 
83
            self.db.module('sync_server_test').install().do()
 
84
            self.db.module('update_server').install().do()
 
85
        else:
 
86
            self.db.module('update_client').install()
 
87
            self.db.module('sync_client_web').install().do()
 
88
            Synchro.connect('admin')
 
89
            Synchro.user(self.db.__name__).add(self.db.__name__).addGroups('Sync / User')
 
90
            # Force reconnect to set connection manager
 
91
            self.db.connect('admin', reconnect=True)
 
92
 
 
93
    @unittest.skipIf(skipUniUser, "Unifield user creation desactivated")
 
94
    def test_04_unifield_user_creation(self):
 
95
        self.db.connect('admin')
 
96
        self.db.user('unifield').add('admin').addGroups('Sync / User', 'Purchase / User')
 
97
 
 
98
    def configure(self):
 
99
        model = 'base.setup.installer'
 
100
        while model != 'ir.ui.menu':
 
101
            try:
 
102
                if model in self.buggy_models or (model == 'account.installer' and self.db not in (Synchro, HQ)):
 
103
                    proxy = self.db.get(model)
 
104
                    answer = proxy.action_skip([])
 
105
                elif model == 'base.setup.config':
 
106
                    answer = self.db.wizard(model, data).config()
 
107
                else:
 
108
                    data = self.base_wizards.get(model, {})
 
109
                    button = data.pop('button', 'action_next')
 
110
                    answer = getattr(self.db.wizard(model, data), button)()
 
111
                model = answer.get('res_model', None)
 
112
            except:
 
113
                print "DEBUG: db=%s, model=%s" % (self.db.__name__, model)
 
114
                raise
 
115
 
 
116
    def sync(self, db=None):
 
117
        if db is None: db = self.db
 
118
        if not db.get('sync.client.entity').sync():
 
119
            monitor = db.get('sync.monitor')
 
120
            ids = monitor.search([], 0, 1, '"end" desc')
 
121
            self.fail('Synchronization process of database "%s" failed!\n%s' % (db.db_name,monitor.read(ids, ['error'])[0]['error']))
 
122
 
 
123
class synchro_creation(db_creation, unittest.TestCase):
 
124
    db = Synchro
 
125
 
 
126
    @unittest.skipIf(skipGroups, "Group creation desactivated")
 
127
    def test_10_make_groups(self):
 
128
        group = Synchro.get('sync.server.entity_group')
 
129
        group.unlink(group.search([]))
 
130
        group_type = Synchro.get('sync.server.group_type')
 
131
        group.create({
 
132
            'name' : 'Section',
 
133
            'type_id' : group_type.search([('name','=','Section')])[0],
 
134
        })
 
135
        group.create({
 
136
            'name' : 'Mission',
 
137
            'type_id' : group_type.search([('name','=','Coordination')])[0],
 
138
        })
 
139
 
 
140
    @unittest.skipIf(skipConfig, "Modules configuration desactivated")
 
141
    def test_20_configuration_wizards(self):
 
142
        self.db.connect('admin')
 
143
        self.configure()
 
144
 
 
145
    @unittest.skipIf(skipSync, "Synchronization desactivated")
 
146
    def test_30_activate_rules(self):
 
147
        self.db.connect('admin')
 
148
        Synchro.activate('sync_server.sync_rule', [])
 
149
 
 
150
class client_creation(db_creation):
 
151
 
 
152
    @unittest.skipIf(skipRegister, "Registration desactivated")
 
153
    def test_10_register_entity(self):
 
154
        if self.db is Synchro: return
 
155
        self.db.connect('admin')
 
156
        Synchro.connect('admin')
 
157
        wizard = self.db.wizard('sync.client.register_entity', {'email':config.default_email})
 
158
        # Fetch instances
 
159
        wizard.next()
 
160
        # Group state
 
161
        wizard.group_state()
 
162
        # Register instance
 
163
        wizard.validate()
 
164
        # Search entity record, server side
 
165
        entities = Synchro.get('sync.server.entity')
 
166
        ids = entities.search([('name','=',self.db.__name__)])
 
167
        if not len(ids) == 1: raise Exception, "Cannot find validation request for entity %s!" % self.db.__name__
 
168
        # Set parent
 
169
        if self.db is not HQ:
 
170
            if self.db is Coordo:
 
171
                parents = entities.search([('name','=','HQ')])
 
172
            elif self.db in (Project, Project2):
 
173
                parents = entities.search([('name','=','Coordo')])
 
174
            else:
 
175
                raise NotImplementedError('Cannot identify database %s' % self.db.__name__)
 
176
            if not parents:
 
177
                raise Exception('Cannot find parent entity for %s!' % self.db.__name__)
 
178
            entities.write(ids, {'parent_id':parents[0]})
 
179
        # Server accept validation
 
180
        entities.validate_action(ids)
 
181
        # Add entity to groups
 
182
        group = Synchro.get('sync.server.entity_group')
 
183
        group.write(group.search([('name','=','Section')]), {
 
184
            'entity_ids' : [(4,ids[0])],
 
185
        })
 
186
        group.write(group.search([('name','=','Mission')]), {
 
187
            'entity_ids' : [(4,ids[0])],
 
188
        })
 
189
 
 
190
    @unittest.skipIf(skipSync, "Synchronization desactivated")
 
191
    def test_40_synchronize(self):
 
192
        self.db.connect('admin')
 
193
        self.sync()
 
194
 
 
195
class hq_creation(client_creation, unittest.TestCase):
 
196
    db = HQ
 
197
 
 
198
    @unittest.skipIf(skipModuleTest, "client_test installation desactivated")
 
199
    def test_20_install_test_client(self):
 
200
        self.db.connect('admin')
 
201
        self.db.module('sync_client_test').install().do()
 
202
 
 
203
    @unittest.skipIf(skipConfig, "Modules configuration desactivated")
 
204
    def test_30_configuration_wizards(self):
 
205
        self.db.connect('admin')
 
206
        self.configure()
 
207
 
 
208
class coordo_creation(client_creation, unittest.TestCase):
 
209
    db = Coordo
 
210
 
 
211
    @unittest.skipIf(skipConfig, "Modules configuration desactivated")
 
212
    def test_50_configuration_wizards(self):
 
213
        self.db.connect('admin')
 
214
        self.configure()
 
215
 
 
216
class project_creation(client_creation, unittest.TestCase):
 
217
    db = Project
 
218
 
 
219
    @unittest.skipIf(skipConfig, "Modules configuration desactivated")
 
220
    def test_50_configuration_wizards(self):
 
221
        self.db.connect('admin')
 
222
        self.configure()
 
223
 
 
224
class project2_creation(client_creation, unittest.TestCase):
 
225
    db = Project2
 
226
 
 
227
    @unittest.skipIf(skipConfig, "Modules configuration desactivated")
 
228
    def test_50_configuration_wizards(self):
 
229
        self.db.connect('admin')
 
230
        self.configure()
 
231
 
 
232
test_cases = (synchro_creation, hq_creation, coordo_creation, project_creation, project2_creation)
 
233
#test_cases = (synchro_creation,)
 
234
#test_cases = (hq_creation,)
 
235
#test_cases = (coordo_creation,)
 
236
#test_cases = (synchro_creation, hq_creation, coordo_creation,)
 
237
#test_cases = (project_creation,project2_creation,)
 
238
#test_cases = (project2_creation,)
 
239
 
 
240
def load_tests(loader, tests, pattern):
 
241
    suite = unittest.TestSuite()
 
242
    for test_class in test_cases:
 
243
        tests = loader.loadTestsFromTestCase(test_class)
 
244
        suite.addTests(tests)
 
245
    return suite
 
246
 
 
247
if __name__ == '__main__':
 
248
    unittest.main(failfast=True, verbosity=2)
 
249