6
#Load OpenERP Client Library
12
from tests.openerplib import db
14
from scripts.common import Synchro, HQ, Coordo, Project, Project2
25
skipModuleTest = False
30
class db_creation(object):
32
buggy_models = ('sale.price.setup',)
39
'sale.price.setup' : {
42
'msf_instance.setup' : {
43
'button' : 'action_skip',
45
'account.installer' : {
46
'charts' : 'msf_chart_of_account',
48
'stock.location.configuration.wizard' : {
49
'location_type' : 'internal',
50
'location_usage' : 'stock',
51
'location_name' : 'Test Location',
52
'button' : 'action_stop',
60
raise Exception("Bad use of class")
62
@unittest.skipIf(skipCreation, "Creation desactivated")
63
def test_00_drop(self):
64
self.db.connect('admin')
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)
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()
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()
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)
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')
99
model = 'base.setup.installer'
100
while model != 'ir.ui.menu':
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()
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)
113
print "DEBUG: db=%s, model=%s" % (self.db.__name__, model)
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']))
123
class synchro_creation(db_creation, unittest.TestCase):
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')
133
'type_id' : group_type.search([('name','=','Section')])[0],
137
'type_id' : group_type.search([('name','=','Coordination')])[0],
140
@unittest.skipIf(skipConfig, "Modules configuration desactivated")
141
def test_20_configuration_wizards(self):
142
self.db.connect('admin')
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', [])
150
class client_creation(db_creation):
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})
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__
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')])
175
raise NotImplementedError('Cannot identify database %s' % self.db.__name__)
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])],
186
group.write(group.search([('name','=','Mission')]), {
187
'entity_ids' : [(4,ids[0])],
190
@unittest.skipIf(skipSync, "Synchronization desactivated")
191
def test_40_synchronize(self):
192
self.db.connect('admin')
195
class hq_creation(client_creation, unittest.TestCase):
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()
203
@unittest.skipIf(skipConfig, "Modules configuration desactivated")
204
def test_30_configuration_wizards(self):
205
self.db.connect('admin')
208
class coordo_creation(client_creation, unittest.TestCase):
211
@unittest.skipIf(skipConfig, "Modules configuration desactivated")
212
def test_50_configuration_wizards(self):
213
self.db.connect('admin')
216
class project_creation(client_creation, unittest.TestCase):
219
@unittest.skipIf(skipConfig, "Modules configuration desactivated")
220
def test_50_configuration_wizards(self):
221
self.db.connect('admin')
224
class project2_creation(client_creation, unittest.TestCase):
227
@unittest.skipIf(skipConfig, "Modules configuration desactivated")
228
def test_50_configuration_wizards(self):
229
self.db.connect('admin')
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,)
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)
247
if __name__ == '__main__':
248
unittest.main(failfast=True, verbosity=2)