From 2aee5380eb9d40c6851116e3f8c97937977ff22f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Wed, 31 Oct 2012 11:30:27 +0100 Subject: [PATCH 1/3] [IMP] ref and browse_ref helpers on openerp.tests.common.BaseCase bzr revid: stephane.bidoul@acsone.eu-20121031103027-2sozmbi3z7bkr22q --- openerp/tests/common.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/openerp/tests/common.py b/openerp/tests/common.py index b3ee4ac53f2..488e4bd8bd8 100644 --- a/openerp/tests/common.py +++ b/openerp/tests/common.py @@ -44,6 +44,8 @@ def stop_openerp(): class BaseCase(unittest2.TestCase): """ Subclass of TestCase for common OpenERP-specific code. + + This class is abstract and expects self.cr and self.uid to be initialized by subclasses. """ @classmethod @@ -53,7 +55,19 @@ class BaseCase(unittest2.TestCase): @classmethod def registry(self, model): return openerp.modules.registry.RegistryManager.get(DB)[model] - + + def ref(self, xmlid): + """Returns res_id corresponding to a given module_name.xml_id (cached) or raise ValueError if not found""" + assert "." in xmlid, "this method required a fully qualified xml_id" + module, xmlid = xmlid.split('.') + model, id = self.registry('ir.model.data').get_object_reference(self.cr, self.uid, module, xmlid) + return id + + def browse_ref(self, xmlid): + """Returns a browsable record for the given module_name.xml_id or raise ValueError if not found""" + assert "." in xmlid, "this method required a fully qualified xml_id" + module, xmlid = xmlid.split('.') + return self.registry('ir.model.data').get_object(self.cr, self.uid, module, xmlid) class TransactionCase(BaseCase): """ From 43513d7ccc0888d7357d00180c903b0a1a97997c Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 31 Oct 2012 16:20:11 +0100 Subject: [PATCH 2/3] [ADD] tests.common: added testcase for ref() and browse_ref(), renaming existing test file to make it more generic bzr revid: odo@openerp.com-20121031152011-gyih3j9itbgfauwv --- openerp/tests/__init__.py | 4 +-- ...per_class_teardown.py => test_basecase.py} | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) rename openerp/tests/{test_per_class_teardown.py => test_basecase.py} (60%) diff --git a/openerp/tests/__init__.py b/openerp/tests/__init__.py index d06e1030d6f..aa39b777c0f 100644 --- a/openerp/tests/__init__.py +++ b/openerp/tests/__init__.py @@ -9,7 +9,7 @@ See the :ref:`test-framework` section in the :ref:`features` list. """ from . import test_expression, test_html_sanitize, test_ir_sequence, test_orm,\ - test_per_class_teardown, \ + test_basecase, \ test_view_validation, test_uninstall, test_misc, test_db_cursor fast_suite = [ @@ -21,7 +21,7 @@ checks = [ test_html_sanitize, test_db_cursor, test_orm, - test_per_class_teardown, + test_basecase, test_view_validation, test_misc, ] diff --git a/openerp/tests/test_per_class_teardown.py b/openerp/tests/test_basecase.py similarity index 60% rename from openerp/tests/test_per_class_teardown.py rename to openerp/tests/test_basecase.py index a1890095c09..55125b6d7c2 100644 --- a/openerp/tests/test_per_class_teardown.py +++ b/openerp/tests/test_basecase.py @@ -1,10 +1,9 @@ # -*- coding: utf-8 -*- import unittest2 -import openerp import common -class test_per_class_teardown(common.SingleTransactionCase): +class test_single_transaction_case(common.SingleTransactionCase): """ Check the whole-class transaction behavior of SingleTransactionCase. """ @@ -22,7 +21,30 @@ class test_per_class_teardown(common.SingleTransactionCase): ids = self.registry('res.partner').search(cr, uid, [('name', '=', 'test_per_class_teardown_partner')]) self.assertEqual(1, len(ids), "Test partner not found.") -class test_per_method_teardown(common.TransactionCase): + def test_20a(self): + """ Create a partner with a XML ID """ + cr, uid = self.cr, self.uid + res_partner = self.registry('res.partner') + ir_model_data = self.registry('ir.model.data') + pid, _ = res_partner.name_create(cr, uid, 'Mr Blue') + ir_model_data.create(cr, uid, {'name': 'test_partner_blue', + 'module': 'base', + 'model': 'res.partner', + 'res_id': pid}) + def test_20b(self): + """ Resolve xml id with ref() and browse_ref() """ + cr, uid = self.cr, self.uid + res_partner = self.registry('res.partner') + xid = 'base.test_partner_blue' + p_ref = self.ref(xid) + self.assertTrue(p_ref, "ref() should resolve xid to database ID") + partner = res_partner.browse(cr, uid, p_ref) + p_browse_ref = self.browse_ref(xid) + self.assertEqual(partner, p_browse_ref, "browse_ref() should resolve xid to browse records") + + + +class test_transaction_case(common.TransactionCase): """ Check the per-method transaction behavior of TransactionCase. """ From 51f2422b41e9640ee6b981ada9d126d34a0c3e85 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 31 Oct 2012 16:21:49 +0100 Subject: [PATCH 3/3] [IMP] tests.common: improved docstring for ref() and browse_ref() bzr revid: odo@openerp.com-20121031152149-73pxpymjf1yz5xqi --- openerp/tests/common.py | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/openerp/tests/common.py b/openerp/tests/common.py index 488e4bd8bd8..f05be10f098 100644 --- a/openerp/tests/common.py +++ b/openerp/tests/common.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import os import threading import time import unittest2 @@ -40,7 +39,6 @@ def stop_openerp(): """ openerp.service.stop_services() - class BaseCase(unittest2.TestCase): """ Subclass of TestCase for common OpenERP-specific code. @@ -55,19 +53,30 @@ class BaseCase(unittest2.TestCase): @classmethod def registry(self, model): return openerp.modules.registry.RegistryManager.get(DB)[model] - - def ref(self, xmlid): - """Returns res_id corresponding to a given module_name.xml_id (cached) or raise ValueError if not found""" - assert "." in xmlid, "this method required a fully qualified xml_id" - module, xmlid = xmlid.split('.') - model, id = self.registry('ir.model.data').get_object_reference(self.cr, self.uid, module, xmlid) + + @classmethod + def ref(self, xid): + """ Returns database ID corresponding to a given identifier. + + :param xid: fully-qualified record identifier, in the form ``module.identifier`` + :raise: ValueError if not found + """ + assert "." in xid, "this method requires a fully qualified parameter, in the following form: 'module.identifier'" + module, xid = xid.split('.') + _, id = self.registry('ir.model.data').get_object_reference(self.cr, self.uid, module, xid) return id - - def browse_ref(self, xmlid): - """Returns a browsable record for the given module_name.xml_id or raise ValueError if not found""" - assert "." in xmlid, "this method required a fully qualified xml_id" - module, xmlid = xmlid.split('.') - return self.registry('ir.model.data').get_object(self.cr, self.uid, module, xmlid) + + @classmethod + def browse_ref(self, xid): + """ Returns a browsable record for the given identifier. + + :param xid: fully-qualified record identifier, in the form ``module.identifier`` + :raise: ValueError if not found + """ + assert "." in xid, "this method requires a fully qualified parameter, in the following form: 'module.identifier'" + module, xid = xid.split('.') + return self.registry('ir.model.data').get_object(self.cr, self.uid, module, xid) + class TransactionCase(BaseCase): """