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'
 

Reply via email to