From fd25cd6434be384875370752d109c58a4dd4b621 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 7 Mar 2014 20:02:07 +0100 Subject: [PATCH] Add copy test for Many2Many Thanks to Laurent Defert issue3506 review3221002 --- trytond/tests/__init__.py | 6 ++++ trytond/tests/copy_.py | 56 ++++++++++++++++++++++++++++++++++++++ trytond/tests/test_copy.py | 32 ++++++++++++++++++++-- 3 files changed, 92 insertions(+), 2 deletions(-) diff --git a/trytond/tests/__init__.py b/trytond/tests/__init__.py index 92ecf154f7..951ec179ce 100644 --- a/trytond/tests/__init__.py +++ b/trytond/tests/__init__.py @@ -130,6 +130,12 @@ def register(): CopyOne2ManyTarget, CopyOne2ManyReference, CopyOne2ManyReferenceTarget, + CopyMany2Many, + CopyMany2ManyTarget, + CopyMany2ManyRelation, + CopyMany2ManyReference, + CopyMany2ManyReferenceTarget, + CopyMany2ManyReferenceRelation, Many2OneTarget, Many2OneDomainValidation, module='tests', type_='model') diff --git a/trytond/tests/copy_.py b/trytond/tests/copy_.py index c2eb91648d..7422e89c92 100644 --- a/trytond/tests/copy_.py +++ b/trytond/tests/copy_.py @@ -6,6 +6,9 @@ from trytond.model import ModelSQL, fields __all__ = [ 'CopyOne2Many', 'CopyOne2ManyTarget', 'CopyOne2ManyReference', 'CopyOne2ManyReferenceTarget', + 'CopyMany2Many', 'CopyMany2ManyTarget', 'CopyMany2ManyRelation', + 'CopyMany2ManyReference', 'CopyMany2ManyReferenceTarget', + 'CopyMany2ManyReferenceRelation', ] @@ -40,3 +43,56 @@ class CopyOne2ManyReferenceTarget(ModelSQL): (None, ''), ('test.copy.one2many_reference', 'One2Many'), ]) + + +class CopyMany2Many(ModelSQL): + "Copy Many2Many" + __name__ = 'test.copy.many2many' + name = fields.Char('Name') + many2many = fields.Many2Many('test.copy.many2many.rel', 'many2many', + 'many2many_target', 'Many2Many') + + +class CopyMany2ManyTarget(ModelSQL): + "Copy Many2Many Target" + __name__ = 'test.copy.many2many.target' + name = fields.Char('Name') + many2one = fields.Many2One('test.copy.many2many.rel', 'many2many_target', + 'Many2Many') + + +class CopyMany2ManyRelation(ModelSQL): + "Copy Many2Many Relation" + __name__ = 'test.copy.many2many.rel' + name = fields.Char('Name') + many2many = fields.Many2One('test.copy.many2many', 'Many2Many') + many2many_target = fields.Many2One('test.copy.many2many.target', + 'Many2Many Target') + + +class CopyMany2ManyReference(ModelSQL): + "Copy Many2ManyReference" + __name__ = 'test.copy.many2many_reference' + name = fields.Char('Name') + many2many = fields.Many2Many('test.copy.many2many_reference.rel', + 'many2many', 'many2many_target', 'Many2Many') + + +class CopyMany2ManyReferenceTarget(ModelSQL): + "Copy Many2ManyReference Target" + __name__ = 'test.copy.many2many_reference.target' + name = fields.Char('Name') + many2many = fields.Many2One('test.copy.many2many_reference.rel', + 'many2many_target', 'Many2Many') + + +class CopyMany2ManyReferenceRelation(ModelSQL): + "Copy Many2ManyReference Relation" + __name__ = 'test.copy.many2many_reference.rel' + name = fields.Char('Name') + many2many = fields.Reference('Many2Many', [ + (None, ''), + ('test.copy.many2many_reference', 'Many2Many'), + ]) + many2many_target = fields.Many2One('test.copy.many2many_reference.target', + 'Many2ManyReference Target') diff --git a/trytond/tests/test_copy.py b/trytond/tests/test_copy.py index 93b8465648..d6c3156c47 100644 --- a/trytond/tests/test_copy.py +++ b/trytond/tests/test_copy.py @@ -17,11 +17,16 @@ class CopyTestCase(unittest.TestCase): self.one2many_reference = POOL.get('test.copy.one2many_reference') self.one2many_reference_target = \ POOL.get('test.copy.one2many_reference.target') + self.many2many = POOL.get('test.copy.many2many') + self.many2many_target = POOL.get('test.copy.many2many.target') + self.many2many_reference = POOL.get('test.copy.many2many_reference') + self.many2many_reference_target = \ + POOL.get('test.copy.many2many_reference.target') def test0130one2many(self): 'Test one2many' with Transaction().start(DB_NAME, USER, - context=CONTEXT) as transaction: + context=CONTEXT): for One2many, Target in ( (self.one2many, self.one2many_target), (self.one2many_reference, self.one2many_reference_target), @@ -42,7 +47,30 @@ class CopyTestCase(unittest.TestCase): self.assertEqual([x.name for x in one2many.one2many], [x.name for x in one2many_copy.one2many]) - transaction.cursor.rollback() + def test0140many2many(self): + 'Test many2many' + with Transaction().start(DB_NAME, USER, + context=CONTEXT): + for Many2many, Target in ( + (self.many2many, self.many2many_target), + (self.many2many_reference, + self.many2many_reference_target), + ): + many2many = Many2many(name='Test') + many2many.many2many = [ + Target(name='Target 1'), + Target(name='Target 2'), + ] + many2many.save() + + many2many_copy, = Many2many.copy([many2many]) + + self.assertNotEqual(many2many, many2many_copy) + self.assertEqual(len(many2many.many2many), + len(many2many_copy.many2many)) + self.assertEqual(many2many.many2many, many2many_copy.many2many) + self.assertEqual([x.name for x in many2many.many2many], + [x.name for x in many2many_copy.many2many]) def suite():