changeset 172461253744 in modules/company:default
details: https://hg.tryton.org/modules/company?cmd=changeset;node=172461253744
description:
Add test on context of company multivalue target fields
issue10067
review333851026
diffstat:
CHANGELOG | 1 +
company.py | 4 ++++
party.py | 8 ++++++++
tests/__init__.py | 6 +++---
tests/test_company.py | 41 +++++++++++++++++++++++++++++++++++++++--
5 files changed, 55 insertions(+), 5 deletions(-)
diffs (128 lines):
diff -r c4a453db686a -r 172461253744 CHANGELOG
--- a/CHANGELOG Sat Feb 27 18:16:28 2021 +0100
+++ b/CHANGELOG Fri Mar 05 15:49:19 2021 +0100
@@ -1,3 +1,4 @@
+* Add test on context of company multivalue target fields
* Use report header for CompanyReport
Version 5.8.0 - 2020-11-02
diff -r c4a453db686a -r 172461253744 company.py
--- a/company.py Sat Feb 27 18:16:28 2021 +0100
+++ b/company.py Fri Mar 05 15:49:19 2021 +0100
@@ -55,6 +55,10 @@
'Employee'
__name__ = 'company.employee'
party = fields.Many2One('party.party', 'Party', required=True,
+ context={
+ 'company': Eval('company', -1),
+ },
+ depends=['company'],
help="The party which represents the employee.")
company = fields.Many2One('company.company', 'Company', required=True,
help="The company to which the employee belongs.")
diff -r c4a453db686a -r 172461253744 party.py
--- a/party.py Sat Feb 27 18:16:28 2021 +0100
+++ b/party.py Fri Mar 05 15:49:19 2021 +0100
@@ -2,6 +2,7 @@
# this repository contains the full copyright notices and license terms.
from trytond import backend
from trytond.pool import PoolMeta, Pool
+from trytond.pyson import Eval
from trytond.tools.multivalue import migrate_property
from trytond.transaction import Transaction
@@ -40,6 +41,13 @@
__name__ = 'party.party.lang'
@classmethod
+ def __setup__(cls):
+ super().__setup__()
+ cls.party.context['company'] = Eval('company', -1)
+ if 'company' not in cls.party.depends:
+ cls.party.depends.append('company')
+
+ @classmethod
def __register__(cls, module_name):
exist = backend.TableHandler.table_exist(cls._table)
if exist:
diff -r c4a453db686a -r 172461253744 tests/__init__.py
--- a/tests/__init__.py Sat Feb 27 18:16:28 2021 +0100
+++ b/tests/__init__.py Fri Mar 05 15:49:19 2021 +0100
@@ -4,12 +4,12 @@
try:
from trytond.modules.company.tests.test_company import (
suite, create_company, set_company, create_employee,
- PartyCompanyCheckEraseMixin)
+ PartyCompanyCheckEraseMixin, CompanyMultiValueTestMixin)
except ImportError:
from .test_company import (
suite, create_company, set_company, create_employee,
- PartyCompanyCheckEraseMixin)
+ PartyCompanyCheckEraseMixin, CompanyMultiValueTestMixin)
__all__ = [
'suite', 'create_company', 'set_company', 'create_employee',
- 'PartyCompanyCheckEraseMixin']
+ 'PartyCompanyCheckEraseMixin', 'CompanyMultiValueTestMixin']
diff -r c4a453db686a -r 172461253744 tests/test_company.py
--- a/tests/test_company.py Sat Feb 27 18:16:28 2021 +0100
+++ b/tests/test_company.py Fri Mar 05 15:49:19 2021 +0100
@@ -6,11 +6,13 @@
import trytond.tests.test_tryton
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
from trytond.transaction import Transaction
-from trytond.pool import Pool
+from trytond.pool import Pool, isregisteredby
from trytond.modules.currency.tests import create_currency, add_currency_rate
from trytond.modules.party.tests import PartyCheckEraseMixin
+from ..model import CompanyMultiValueMixin
+
def create_company(name='Dunder Mifflin', currency=None):
pool = Pool()
@@ -63,7 +65,42 @@
return super().setup_check_erase_party()
-class CompanyTestCase(PartyCompanyCheckEraseMixin, ModuleTestCase):
+class CompanyMultiValueTestMixin:
+
+ @with_transaction()
+ def test_company_multivalue_context(self):
+ "Test context of company multivalue target"
+ pool = Pool()
+ Company = pool.get('company.company')
+ for mname, model in pool.iterobject():
+ if (not isregisteredby(model, self.module)
+ or issubclass(model, Company)):
+ continue
+ company = None
+ for fname, field in model._fields.items():
+ if (field._type == 'many2one'
+ and issubclass(field.get_target(), Company)):
+ company = fname
+ break
+ else:
+ continue
+ for fname, field in model._fields.items():
+ if not hasattr(field, 'get_target'):
+ continue
+ Target = field.get_target()
+ if not issubclass(Target, CompanyMultiValueMixin):
+ continue
+ if company in model._fields:
+ self.assertIn(
+ 'company', list(field.context.keys()),
+ msg="Missing '%s' value as company "
+ 'in "%s"."%s" context' % (
+ company, mname, fname))
+
+
+class CompanyTestCase(
+ PartyCompanyCheckEraseMixin, CompanyMultiValueTestMixin,
+ ModuleTestCase):
'Test Company module'
module = 'company'