[IMP] tests: provide simple reusable base classes to write tests.
bzr revid: vmt@openerp.com-20120216162706-ccbgkqv8k8kufmnb
This commit is contained in:
parent
0825d52603
commit
0037575619
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import time
|
||||
import unittest2
|
||||
import xmlrpclib
|
||||
|
||||
import openerp
|
||||
|
@ -16,15 +17,6 @@ ADMIN_USER = 'admin'
|
|||
ADMIN_USER_ID = 1
|
||||
ADMIN_PASSWORD = 'admin'
|
||||
|
||||
common_proxy_60 = None
|
||||
db_proxy_60 = None
|
||||
object_proxy_60 = None
|
||||
|
||||
common_proxy_61 = None
|
||||
db_proxy_61 = None
|
||||
model_proxy_61 = None
|
||||
model_uri_61 = None
|
||||
|
||||
def start_openerp():
|
||||
"""
|
||||
Start the OpenERP server similary to the openerp-server script.
|
||||
|
@ -34,33 +26,52 @@ def start_openerp():
|
|||
# Ugly way to ensure the server is listening.
|
||||
time.sleep(2)
|
||||
|
||||
def create_xmlrpc_proxies():
|
||||
def stop_openerp():
|
||||
"""
|
||||
setup some xmlrpclib proxies.
|
||||
Shutdown the OpenERP server similarly to a single ctrl-c.
|
||||
"""
|
||||
global common_proxy_60
|
||||
global db_proxy_60
|
||||
global object_proxy_60
|
||||
|
||||
# Use the old (pre 6.1) API.
|
||||
url = 'http://%s:%d/xmlrpc/' % (HOST, PORT)
|
||||
common_proxy_60 = xmlrpclib.ServerProxy(url + 'common')
|
||||
db_proxy_60 = xmlrpclib.ServerProxy(url + 'db')
|
||||
object_proxy_60 = xmlrpclib.ServerProxy(url + 'object')
|
||||
|
||||
global common_proxy_61
|
||||
global db_proxy_61
|
||||
global model_proxy_61
|
||||
global model_uri_61
|
||||
|
||||
# Use the new (6.1) API.
|
||||
model_uri_61 = 'http://%s:%d/openerp/xmlrpc/1/' % (HOST, PORT)
|
||||
common_proxy_61 = xmlrpclib.ServerProxy(model_uri_61 + 'common')
|
||||
db_proxy_61 = xmlrpclib.ServerProxy(model_uri_61 + 'db')
|
||||
model_proxy_61 = xmlrpclib.ServerProxy(model_uri_61 + 'model/' + DB)
|
||||
|
||||
def tearDownModule():
|
||||
""" Shutdown the OpenERP server similarly to a single ctrl-c. """
|
||||
openerp.service.stop_services()
|
||||
|
||||
class TransactionCase(unittest2.TestCase):
|
||||
"""
|
||||
Subclass of TestCase with a single transaction, rolled-back at the end of
|
||||
the tests.
|
||||
"""
|
||||
|
||||
def __init__(self, name):
|
||||
super(TransactionCase, self).__init__(name)
|
||||
self.registry = lambda model: \
|
||||
openerp.modules.registry.RegistryManager.get(DB)[model]
|
||||
|
||||
def setUp(self):
|
||||
self.cr = openerp.modules.registry.RegistryManager.get(DB).db.cursor()
|
||||
|
||||
def tearDown(self):
|
||||
self.cr.rollback()
|
||||
self.cr.close()
|
||||
|
||||
class RpcCase(unittest2.TestCase):
|
||||
"""
|
||||
Subclass of TestCase with a few XML-RPC proxies.
|
||||
"""
|
||||
|
||||
def __init__(self, name):
|
||||
super(RpcCase, self).__init__(name)
|
||||
|
||||
class A(object):
|
||||
pass
|
||||
self.proxy = A()
|
||||
|
||||
# Use the old (pre 6.1) API.
|
||||
self.proxy.url_60 = url_60 = 'http://%s:%d/xmlrpc/' % (HOST, PORT)
|
||||
self.proxy.common_60 = xmlrpclib.ServerProxy(url_60 + 'common')
|
||||
self.proxy.db_60 = xmlrpclib.ServerProxy(url_60 + 'db')
|
||||
self.proxy.object_60 = xmlrpclib.ServerProxy(url_60 + 'object')
|
||||
|
||||
# Use the new (6.1) API.
|
||||
self.proxy.url_61 = url_61 = 'http://%s:%d/openerp/xmlrpc/1/' % (HOST, PORT)
|
||||
self.proxy.common_61 = xmlrpclib.ServerProxy(url_61 + 'common')
|
||||
self.proxy.db_61 = xmlrpclib.ServerProxy(url_61 + 'db')
|
||||
self.proxy.model_61 = xmlrpclib.ServerProxy(url_61 + 'model/' + DB)
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
|
|
@ -16,11 +16,6 @@ import common
|
|||
DB = common.DB
|
||||
ADMIN_USER_ID = common.ADMIN_USER_ID
|
||||
|
||||
def setUpModule():
|
||||
common.create_xmlrpc_proxies()
|
||||
|
||||
tearDownModule = common.tearDownModule
|
||||
|
||||
def registry(model):
|
||||
return openerp.modules.registry.RegistryManager.get(DB)[model]
|
||||
|
||||
|
|
|
@ -2,9 +2,10 @@ import os
|
|||
import unittest2
|
||||
|
||||
import openerp
|
||||
import common
|
||||
|
||||
UID = 1
|
||||
DB = openerp.tools.config['db_name']
|
||||
UID = common.ADMIN_USER_ID
|
||||
DB = common.DB
|
||||
|
||||
CREATE = lambda values: (0, False, values)
|
||||
UPDATE = lambda id, values: (1, id, values)
|
||||
|
@ -14,16 +15,12 @@ LINK_TO = lambda id: (4, id, False)
|
|||
DELETE_ALL = lambda: (5, False, False)
|
||||
REPLACE_WITH = lambda ids: (6, False, ids)
|
||||
|
||||
class TestO2MSerialization(unittest2.TestCase):
|
||||
class TestO2MSerialization(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
self.cr = openerp.modules.registry.RegistryManager.get(DB).db.cursor()
|
||||
self.partner = openerp.modules.registry.RegistryManager.get(DB)['res.partner']
|
||||
self.address = openerp.modules.registry.RegistryManager.get(DB)['res.partner.address']
|
||||
|
||||
def tearDown(self):
|
||||
self.cr.rollback()
|
||||
self.cr.close()
|
||||
super(TestO2MSerialization, self).setUp()
|
||||
self.partner = self.registry('res.partner')
|
||||
self.address = self.registry('res.partner.address')
|
||||
|
||||
def test_no_command(self):
|
||||
" empty list of commands yields an empty list of records "
|
||||
|
|
|
@ -12,52 +12,51 @@ import xmlrpclib
|
|||
|
||||
import openerp
|
||||
import common
|
||||
import core
|
||||
|
||||
DB = common.DB
|
||||
ADMIN_USER = common.ADMIN_USER
|
||||
ADMIN_USER_ID = common.ADMIN_USER_ID
|
||||
ADMIN_PASSWORD = common.ADMIN_PASSWORD
|
||||
|
||||
def setUpModule():
|
||||
common.start_openerp()
|
||||
common.create_xmlrpc_proxies()
|
||||
setUpModule = common.start_openerp
|
||||
|
||||
tearDownModule = common.tearDownModule
|
||||
tearDownModule = common.stop_openerp
|
||||
|
||||
class test_xmlrpc(unittest2.TestCase):
|
||||
class test_xmlrpc(core.RpcCase):
|
||||
|
||||
def test_00_xmlrpc_create_database_polling(self):
|
||||
"""
|
||||
Simulate a OpenERP client requesting the creation of a database and
|
||||
polling the server until the creation is complete.
|
||||
"""
|
||||
progress_id = common.db_proxy_60.create(ADMIN_PASSWORD, DB, True,
|
||||
progress_id = self.proxy.db_60.create(ADMIN_PASSWORD, DB, True,
|
||||
False, ADMIN_PASSWORD)
|
||||
while True:
|
||||
time.sleep(1)
|
||||
progress, users = common.db_proxy_60.get_progress(ADMIN_PASSWORD,
|
||||
progress, users = self.proxy.db_60.get_progress(ADMIN_PASSWORD,
|
||||
progress_id)
|
||||
if progress == 1.0:
|
||||
break
|
||||
|
||||
def test_xmlrpc_login(self):
|
||||
""" Try to login on the common service. """
|
||||
uid = common.common_proxy_60.login(DB, ADMIN_USER, ADMIN_PASSWORD)
|
||||
uid = self.proxy.common_60.login(DB, ADMIN_USER, ADMIN_PASSWORD)
|
||||
assert uid == ADMIN_USER_ID
|
||||
|
||||
def test_xmlrpc_ir_model_search(self):
|
||||
""" Try a search on the object service. """
|
||||
ids = common.object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD,
|
||||
ids = self.proxy.object_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD,
|
||||
'ir.model', 'search', [])
|
||||
assert ids
|
||||
ids = common.object_proxy_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD,
|
||||
ids = self.proxy.object_60.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD,
|
||||
'ir.model', 'search', [], {})
|
||||
assert ids
|
||||
|
||||
def test_xmlrpc_61_ir_model_search(self):
|
||||
""" Try a search on the object service. """
|
||||
|
||||
proxy = xmlrpclib.ServerProxy(common.model_uri_61 + 'model/' + DB + '/ir.model')
|
||||
proxy = xmlrpclib.ServerProxy(self.proxy.url_61 + 'model/' + DB + '/ir.model')
|
||||
ids = proxy.execute(ADMIN_USER_ID, ADMIN_PASSWORD, 'search', [])
|
||||
assert ids
|
||||
ids = proxy.execute(ADMIN_USER_ID, ADMIN_PASSWORD, 'search', [], {})
|
||||
|
|
Loading…
Reference in New Issue