move tests

move test modules
remove xml test
add phantomjs test
readd remove uninstall test (currently disabled because of cr.commit)

bzr revid: al@openerp.com-20140209003745-ehrx8ikwkmusa644
This commit is contained in:
Antony Lesuisse 2014-02-09 01:37:45 +01:00
parent 9289a2608d
commit 82372e6a02
74 changed files with 196 additions and 208 deletions

View File

@ -34,7 +34,4 @@ Importing them from here is deprecated.
""" """
# get_module_path is used only by base_module_quality
from openerp.modules import get_module_resource, get_module_path
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -92,8 +92,6 @@ The kernel of OpenERP, needed for all installation.
], ],
'test': [ 'test': [
'test/base_test.yml', 'test/base_test.yml',
'test/test_context.xml',
'test/bug_lp541545.xml',
'test/test_osv_expression.yml', 'test/test_osv_expression.yml',
'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules. 'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules.
], ],

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<!-- Test count attribute for assertions -->
<data>
<assert
model="res.currency.rate"
search="[('currency_id', '=', ref('INR'))]"
count="1"
string="Rate entries for Indian rupee">
<test expr="True"/>
</assert>
</data>
</openerp>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<!-- Test context attribute for unit tests -->
<data context="{'date': '2009-06-01'}">
<!-- <assert -->
<!-- model="res.currency"-->
<!-- id="INR"-->
<!-- string="Indian rupee rate in 2009">-->
<!-- date specified in data element's context -->
<!-- <test expr="str(rate)">65.8287</test>-->
<!-- </assert> -->
<assert
model="res.currency"
id="INR"
string="Indian rupee rate in 2002"
context="{'date': '2010-06-01'}">
<test expr="rate_ids and str(rate_ids[0].rate)">59.9739</test>
</assert>
</data>
</openerp>

View File

@ -1,3 +1,17 @@
import test_acl
import test_basecase
import test_db_cursor
import test_expression
import test_fields
import test_ir_filters
import test_ir_sequence
import test_mail
import test_orm
import test_osv
import test_translate
#import test_uninstall
import test_view_validation
import test_xmlrpc
import test_base import test_base
import test_expression import test_expression
import test_ir_actions import test_ir_actions
@ -8,16 +22,4 @@ import test_res_config
import test_res_lang import test_res_lang
import test_search import test_search
import test_views import test_views
import test_phantom
checks = [
test_base,
test_expression,
test_ir_actions,
test_ir_attachment,
test_ir_values,
test_menu,
test_res_config,
test_res_lang,
test_search,
test_views,
]

View File

@ -3,8 +3,7 @@ from lxml import etree
import openerp import openerp
from openerp.tools.misc import mute_logger from openerp.tools.misc import mute_logger
from openerp.tests import common
import common
# test group that demo user should not have # test group that demo user should not have
GROUP_TECHNICAL_FEATURES = 'base.group_no_one' GROUP_TECHNICAL_FEATURES = 'base.group_no_one'

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import unittest2 import unittest2
import common from openerp.tests import common
class test_single_transaction_case(common.SingleTransactionCase): class test_single_transaction_case(common.SingleTransactionCase):
""" """

View File

@ -4,7 +4,7 @@ import unittest2
import openerp import openerp
from openerp.tools.misc import mute_logger from openerp.tools.misc import mute_logger
import common from openerp.tests import common
DB = common.DB DB = common.DB
ADMIN_USER_ID = common.ADMIN_USER_ID ADMIN_USER_ID = common.ADMIN_USER_ID

View File

@ -1,8 +1,9 @@
import unittest2 import unittest2
import openerp
from openerp.osv.orm import BaseModel from openerp.osv.orm import BaseModel
import openerp.tests.common as common import openerp.tests.common as common
class test_expression(common.TransactionCase): class test_expression(common.TransactionCase):
def _reinit_mock(self): def _reinit_mock(self):
@ -439,5 +440,13 @@ class test_expression(common.TransactionCase):
partner_parent_id_col._auto_join = False partner_parent_id_col._auto_join = False
state_country_id_col._auto_join = False state_country_id_col._auto_join = False
def test_30_normalize_domain(self):
expression = openerp.osv.expression
norm_domain = domain = ['&', (1, '=', 1), ('a', '=', 'b')]
assert norm_domain == expression.normalize_domain(domain), "Normalized domains should be left untouched"
domain = [('x', 'in', ['y', 'z']), ('a.v', '=', 'e'), '|', '|', ('a', '=', 'b'), '!', ('c', '>', 'd'), ('e', '!=', 'f'), ('g', '=', 'h')]
norm_domain = ['&', '&', '&'] + domain
assert norm_domain == expression.normalize_domain(domain), "Non-normalized domains should be properly normalized"
if __name__ == '__main__': if __name__ == '__main__':
unittest2.main() unittest2.main()

View File

@ -1,9 +1,8 @@
# #
# test cases for fields access, etc. # test cases for fields access, etc.
# #
import common
from openerp.osv import fields from openerp.osv import fields
from openerp.tests import common
class TestRelatedField(common.TransactionCase): class TestRelatedField(common.TransactionCase):

View File

@ -2,7 +2,7 @@
import functools import functools
from openerp import exceptions from openerp import exceptions
from . import common from openerp.tests import common
def noid(d): def noid(d):
""" Removes `id` key from a dict so we don't have to keep these things """ Removes `id` key from a dict so we don't have to keep these things

View File

@ -11,7 +11,7 @@ import psycopg2
import unittest2 import unittest2
import openerp import openerp
import common from openerp.tests import common
DB = common.DB DB = common.DB
ADMIN_USER_ID = common.ADMIN_USER_ID ADMIN_USER_ID = common.ADMIN_USER_ID

View File

@ -26,9 +26,10 @@ import unittest2
from lxml import etree from lxml import etree
from openerp.tests import test_mail_examples
from openerp.tools import html_sanitize, html_email_clean, append_content_to_html, plaintext2html, email_split from openerp.tools import html_sanitize, html_email_clean, append_content_to_html, plaintext2html, email_split
import test_mail_examples
class TestSanitizer(unittest2.TestCase): class TestSanitizer(unittest2.TestCase):
""" Test the html sanitizer that filters html to remove unwanted attributes """ """ Test the html sanitizer that filters html to remove unwanted attributes """

View File

@ -1,13 +1,6 @@
# This test can be run stand-alone with something like:
# > PYTHONPATH=. python2 openerp/tests/test_misc.py
import datetime
import locale
import unittest2 import unittest2
import babel from openerp.tools import misc
import babel.dates
from ..tools import misc
class test_countingstream(unittest2.TestCase): class test_countingstream(unittest2.TestCase):

View File

@ -1,6 +1,6 @@
from collections import defaultdict from collections import defaultdict
from openerp.tools import mute_logger from openerp.tools import mute_logger
import common from openerp.tests import common
UID = common.ADMIN_USER_ID UID = common.ADMIN_USER_ID
DB = common.DB DB = common.DB

View File

@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
import openerp
from openerp.tests import common
class test_phantom(common.HttpCase):
def test_01_dummy(self):
self.phantomjs(openerp.modules.module.get_module_resource('base','tests','test_phantom_dummy.js'))
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,4 @@
console.log('{ "event": "success", "message": "Phantomjs success"}');
// For a failure:
// console.log('{ "event": "failure", "message": "The test failed" }');
phantom.exit();

View File

@ -0,0 +1,89 @@
# -*- coding: utf-8 -*-
# This assumes an existing but uninitialized database.
import unittest2
import openerp
from openerp import SUPERUSER_ID
import common
DB = common.DB
ADMIN_USER_ID = common.ADMIN_USER_ID
def registry(model):
return openerp.modules.registry.RegistryManager.get(DB)[model]
def cursor():
return openerp.modules.registry.RegistryManager.get(DB).db.cursor()
def get_module(module_name):
registry = openerp.modules.registry.RegistryManager.get(DB)
return registry.get(module_name)
def reload_registry():
openerp.modules.registry.RegistryManager.new(
DB, update_module=True)
def search_registry(model_name, domain):
cr = cursor()
model = registry(model_name)
record_ids = model.search(cr, SUPERUSER_ID, domain, {})
cr.close()
return record_ids
def install_module(module_name):
ir_module_module = registry('ir.module.module')
cr = cursor()
module_ids = ir_module_module.search(cr, SUPERUSER_ID,
[('name', '=', module_name)], {})
assert len(module_ids) == 1
ir_module_module.button_install(cr, SUPERUSER_ID, module_ids, {})
cr.commit()
cr.close()
reload_registry()
def uninstall_module(module_name):
ir_module_module = registry('ir.module.module')
cr = cursor()
module_ids = ir_module_module.search(cr, SUPERUSER_ID,
[('name', '=', module_name)], {})
assert len(module_ids) == 1
ir_module_module.button_uninstall(cr, SUPERUSER_ID, module_ids, {})
cr.commit()
cr.close()
reload_registry()
class test_uninstall(unittest2.TestCase):
"""
Test the install/uninstall of a test module. The module is available in
`openerp.tests` which should be present in the addons-path.
"""
def test_01_install(self):
""" Check a few things showing the module is installed. """
install_module('test_uninstall')
assert get_module('test_uninstall.model')
assert search_registry('ir.model.data',
[('module', '=', 'test_uninstall')])
assert search_registry('ir.model.fields',
[('model', '=', 'test_uninstall.model')])
def test_02_uninstall(self):
""" Check a few things showing the module is uninstalled. """
uninstall_module('test_uninstall')
assert not get_module('test_uninstall.model')
assert not search_registry('ir.model.data',
[('module', '=', 'test_uninstall')])
assert not search_registry('ir.model.fields',
[('model', '=', 'test_uninstall.model')])
if __name__ == '__main__':
unittest2.main()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
import time
import unittest2
import xmlrpclib
from openerp.tests import common
DB = common.DB
ADMIN_USER = common.ADMIN_USER
ADMIN_USER_ID = common.ADMIN_USER_ID
ADMIN_PASSWORD = common.ADMIN_PASSWORD
class test_xmlrpc(common.HttpCase):
def test_01_xmlrpc_login(self):
""" Try to login on the common service. """
uid = self.xmlrpc_common.login(DB, ADMIN_USER, ADMIN_PASSWORD)
self.assertTrue(uid == ADMIN_USER_ID)
def test_xmlrpc_ir_model_search(self):
""" Try a search on the object service. """
o = self.xmlrpc_object
ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [])
self.assertIsInstance(ids, list)
ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [], {})
self.assertIsInstance(ids, list)
# This test was written to test the creation of a new RPC endpoint, not
# really for the EDI itself.
#def test_xmlrpc_import_edi_document(self):
# """ Try to call an EDI method. """
# msg_re = 'EDI Document is empty!'
# with self.assertRaisesRegexp(Exception, msg_re):
# self.proxy.edi_60.import_edi_document(DB, ADMIN_USER_ID, ADMIN_PASSWORD, {})
if __name__ == '__main__':
unittest2.main()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -282,6 +282,9 @@ class Cursor(object):
return self._close(False) return self._close(False)
def _close(self, leak=False): def _close(self, leak=False):
#import traceback
#traceback.print_stack()
if not self._obj: if not self._obj:
return return

View File

@ -7,43 +7,9 @@ This module groups a few sub-modules containing unittest2 test cases.
Tests can be explicitely added to the `fast_suite` or `checks` lists or not. Tests can be explicitely added to the `fast_suite` or `checks` lists or not.
See the :ref:`test-framework` section in the :ref:`features` list. See the :ref:`test-framework` section in the :ref:`features` list.
""" """
import test_acl
import test_basecase
import test_db_cursor
import test_expression
import test_fields
import test_ir_filters
import test_ir_sequence
import test_mail
import test_misc
import test_orm
import test_osv
import test_translate
import test_view_validation
import test_qweb
import test_func
# This need a change in `oe run-tests` to only run fast_suite + checks by default.
# import test_xmlrpc
fast_suite = [ import common
test_ir_sequence, from common import *
test_ir_filters
]
checks = [
test_acl,
test_expression,
test_mail,
test_db_cursor,
test_orm,
test_fields,
test_basecase,
test_view_validation,
test_misc,
test_osv,
test_translate,
test_qweb,
test_func,
]
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -3,15 +3,24 @@
The module :mod:`openerp.tests.common` provides a few helpers and classes to write The module :mod:`openerp.tests.common` provides a few helpers and classes to write
tests. tests.
""" """
import json
import os
import select
import subprocess
import threading import threading
import time import time
import unittest2 import unittest2
import uuid
import xmlrpclib import xmlrpclib
import logging
import openerp import openerp
_logger = logging.getLogger(__name__)
# The openerp library is supposed already configured. # The openerp library is supposed already configured.
ADDONS_PATH = openerp.tools.config['addons_path'] ADDONS_PATH = openerp.tools.config['addons_path']
HOST = '127.0.0.1'
PORT = openerp.tools.config['xmlrpc_port'] PORT = openerp.tools.config['xmlrpc_port']
DB = openerp.tools.config['db_name'] DB = openerp.tools.config['db_name']
@ -22,26 +31,11 @@ DB = openerp.tools.config['db_name']
if not DB and hasattr(threading.current_thread(), 'dbname'): if not DB and hasattr(threading.current_thread(), 'dbname'):
DB = threading.current_thread().dbname DB = threading.current_thread().dbname
HOST = '127.0.0.1'
ADMIN_USER = 'admin' ADMIN_USER = 'admin'
ADMIN_USER_ID = openerp.SUPERUSER_ID ADMIN_USER_ID = openerp.SUPERUSER_ID
ADMIN_PASSWORD = 'admin' ADMIN_PASSWORD = 'admin'
def start_openerp(): HTTP_SESSION = {}
"""
Start the OpenERP server similary to the openerp-server script.
"""
openerp.service.start_services()
# Ugly way to ensure the server is listening.
time.sleep(2)
def stop_openerp():
"""
Shutdown the OpenERP server similarly to a single ctrl-c.
"""
openerp.service.stop_services()
class BaseCase(unittest2.TestCase): class BaseCase(unittest2.TestCase):
""" """

View File

@ -1,82 +0,0 @@
# -*- coding: utf-8 -*-
# Run with one of these commands:
# > OPENERP_ADDONS_PATH='../../addons/trunk' OPENERP_PORT=8069 \
# OPENERP_DATABASE=yy PYTHONPATH=. python tests/test_xmlrpc.py
# > OPENERP_ADDONS_PATH='../../addons/trunk' OPENERP_PORT=8069 \
# OPENERP_DATABASE=yy nosetests tests/test_xmlrpc.py
# > OPENERP_ADDONS_PATH='../../../addons/trunk' OPENERP_PORT=8069 \
# OPENERP_DATABASE=yy PYTHONPATH=../:. unit2 test_xmlrpc
import time
import unittest2
import xmlrpclib
import common
DB = None
ADMIN_USER = common.ADMIN_USER
ADMIN_USER_ID = common.ADMIN_USER_ID
ADMIN_PASSWORD = common.ADMIN_PASSWORD
def setUpModule():
common.start_openerp()
global DB
DB = common.RpcCase.generate_database_name()
tearDownModule = common.stop_openerp
class test_xmlrpc(common.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 = self.proxy.db_60.create(ADMIN_PASSWORD,DB, True, False,
ADMIN_PASSWORD)
while True:
time.sleep(1)
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 = 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. """
o = self.proxy.object_60
ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [])
assert ids
ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [], {})
assert ids
def test_xmlrpc_8_ir_model_search(self):
""" Try a search on the object service. """
o = self.proxy.object_8
ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [])
assert ids
ids = o.execute(DB, ADMIN_USER_ID, ADMIN_PASSWORD, 'ir.model', 'search', [], {})
assert ids
# This test was written to test the creation of a new RPC endpoint, not
# really for the EDI itself.
#def test_xmlrpc_import_edi_document(self):
# """ Try to call an EDI method. """
# msg_re = 'EDI Document is empty!'
# with self.assertRaisesRegexp(Exception, msg_re):
# self.proxy.edi_60.import_edi_document(DB, ADMIN_USER_ID, ADMIN_PASSWORD, {})
def test_zz_xmlrpc_drop_database(self):
"""
Simulate a OpenERP client requesting the deletion of a database.
"""
assert self.proxy.db_60.drop(ADMIN_PASSWORD, DB) is True
if __name__ == '__main__':
unittest2.main()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -321,7 +321,6 @@ class YamlInterpreter(object):
view_info = model.fields_view_get(self.cr, SUPERUSER_ID, varg, 'form', context) view_info = model.fields_view_get(self.cr, SUPERUSER_ID, varg, 'form', context)
record_dict = self._create_record(model, fields, view_info, default=default) record_dict = self._create_record(model, fields, view_info, default=default)
_logger.debug("RECORD_DICT %s" % record_dict)
id = self.pool['ir.model.data']._update(self.cr, SUPERUSER_ID, record.model, \ id = self.pool['ir.model.data']._update(self.cr, SUPERUSER_ID, record.model, \
self.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context) self.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context)
self.id_map[record.id] = int(id) self.id_map[record.id] = int(id)
@ -931,7 +930,7 @@ class YamlInterpreter(object):
def yaml_import(cr, module, yamlfile, kind, idref=None, mode='init', noupdate=False, report=None): def yaml_import(cr, module, yamlfile, kind, idref=None, mode='init', noupdate=False, report=None):
if idref is None: if idref is None:
idref = {} idref = {}
loglevel = logging.INFO if kind == 'test' else logging.DEBUG loglevel = logging.DEBUG
yaml_string = yamlfile.read() yaml_string = yamlfile.read()
yaml_interpreter = YamlInterpreter(cr, module, idref, mode, filename=yamlfile.name, report=report, noupdate=noupdate, loglevel=loglevel) yaml_interpreter = YamlInterpreter(cr, module, idref, mode, filename=yamlfile.name, report=report, noupdate=noupdate, loglevel=loglevel)
yaml_interpreter.process(yaml_string) yaml_interpreter.process(yaml_string)