# -*- coding: utf-8 -*- import io import odoo.tests from odoo.tools.translate import TranslationImporter @odoo.tests.tagged('post_install', '-at_install') class TestRelatedTranslation(odoo.tests.TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.env['res.lang']._activate_lang('fr_FR') cls.test1 = cls.env['test_new_api.related_translation_1'].with_context(lang='en_US').create({ 'name': 'Knife', 'html': '

Knife

Fork

Spoon

', }) cls.test1.with_context(lang='fr_FR').write({ 'name': 'Couteau', }) cls.test1.update_field_translations('html', {'fr_FR': { 'Knife': 'Couteau', 'Fork': 'Fourchette', 'Spoon': 'Cuiller', }}) cls.test12 = cls.env['test_new_api.related_translation_1'].with_context(lang='en_US').create({ 'name': 'Knife 2', 'html': '

Knife 2

Fork 2

Spoon 2

', }) cls.test12.with_context(lang='fr_FR').write({ 'name': 'Couteau 2', }) cls.test12.update_field_translations('html', {'fr_FR': { 'Knife 2': 'Couteau 2', 'Fork 2': 'Fourchette 2', 'Spoon 2': 'Cuiller 2', }}) cls.test2 = cls.env['test_new_api.related_translation_2'].with_context(lang='en_US').create({ 'related_id': cls.test1.id, }) cls.test3 = cls.env['test_new_api.related_translation_3'].with_context(lang='en_US').create({ 'related_id': cls.test2.id, }) def test_read(self): self.assertEqual(self.test1.with_context(lang='en_US').name, 'Knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'Knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'Knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Couteau') def test_write_from_ori(self): self.test1.with_context(lang='en_US').name = 'New knife' self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Couteau') self.test1.with_context(lang='fr_FR').name = 'Nouveau couteau' self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Nouveau couteau') def test_write_from_related(self): self.test2.with_context(lang='en_US').name = 'New knife' self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Couteau') self.test3.with_context(lang='fr_FR').name = 'Nouveau couteau' self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Nouveau couteau') def test_translate_from_ori(self): self.test1.update_field_translations('name', {'en_US': 'New knife'}) self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').computed_name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_name, 'Couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Couteau') self.test1.update_field_translations('name', {'fr_FR': 'Nouveau couteau'}) self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test2.with_context(lang='en_US').computed_name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_name, 'Nouveau couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Nouveau couteau') def test_translate_from_related(self): self.test2.update_field_translations('name', {'en_US': 'New knife'}) self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') self.assertEqual(self.test2.with_context(lang='en_US').computed_name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_name, 'Couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Couteau') self.test3.update_field_translations('name', {'fr_FR': 'Nouveau couteau'}) self.assertEqual(self.test1.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test1.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test2.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Nouveau couteau') self.assertEqual(self.test2.with_context(lang='en_US').computed_name, 'New knife') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_name, 'Nouveau couteau') self.assertEqual(self.test3.with_context(lang='en_US').name, 'New knife') self.assertEqual(self.test3.with_context(lang='fr_FR').name, 'Nouveau couteau') def test_import_from_po(self): self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') test1_xml_id = self.test1.export_data(['id']).get('datas')[0][0] po_string = ''' #. module: test_new_api #: model:test_new_api.related_translation_1,name:%s msgid "Knife" msgstr "Nouveau couteau" ''' % test1_xml_id with io.BytesIO(bytes(po_string, encoding='utf-8')) as f: f.name = 'dummy' translation_importer = TranslationImporter(self.env.cr, verbose=True) translation_importer.load(f, 'po', 'fr_FR') translation_importer.save(overwrite=True) self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Nouveau couteau') def test_write_from_ori_term(self): self.test1.with_context(lang='fr_FR').html = '

Nouveau couteau

Fourchette

Cuiller

' self.assertEqual(self.test1.with_context(lang='en_US').html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') def test_delay_write_from_ori_term(self): self.test1.with_context(lang='fr_FR', delay_translations=True).html = '

Nouveau couteau

Fourchette

Cuiller

' self.assertEqual(self.test1.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test1.with_context(lang='en_US', check_translations=True).html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR', check_translations=True).html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US', check_translations=True).html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR', check_translations=True).html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US', check_translations=True).html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR', check_translations=True).html, '

Nouveau couteau

Fourchette

Cuiller

') def test_translate_from_ori_term(self): self.assertEqual(self.test1.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').computed_html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_html, '

Couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Couteau

Fourchette

Cuiller

') self.test1.update_field_translations('html', {'fr_FR': {'Knife': 'Nouveau couteau'}}) self.assertEqual(self.test1.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').computed_html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') def test_write_from_related_term(self): self.test3.with_context(lang='fr_FR').html = '

Nouveau couteau

Fourchette

Cuiller

' self.assertEqual(self.test1.with_context(lang='en_US').html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') def test_delay_write_from_related_term(self): self.test3.with_context(lang='fr_FR', delay_translations=True).html = '

Nouveau couteau

Fourchette

Cuiller

' self.assertEqual(self.test1.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test1.with_context(lang='en_US', check_translations=True).html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR', check_translations=True).html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US', check_translations=True).html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR', check_translations=True).html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US', check_translations=True).html, '

Nouveau couteau

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR', check_translations=True).html, '

Nouveau couteau

Fourchette

Cuiller

') def test_translate_from_related_term(self): self.assertEqual(self.test1.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').computed_html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_html, '

Couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Couteau

Fourchette

Cuiller

') self.test3.update_field_translations('html', {'fr_FR': {'Knife': 'Nouveau couteau'}}) self.assertEqual(self.test1.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test1.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test2.with_context(lang='en_US').computed_html, '

Knife

Fork

Spoon

') self.assertEqual(self.test2.with_context(lang='fr_FR').computed_html, '

Nouveau couteau

Fourchette

Cuiller

') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife

Fork

Spoon

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Nouveau couteau

Fourchette

Cuiller

') def test_translate_change_many2one(self): self.assertEqual(self.test2.with_context(lang='en_US').name, 'Knife') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau') self.test2.with_context(lang='fr_FR').related_id = self.test12 self.assertEqual(self.test2.with_context(lang='en_US').name, 'Knife 2') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau 2') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife 2

Fork 2

Spoon 2

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Couteau 2

Fourchette 2

Cuiller 2

') self.test2.invalidate_recordset() self.assertEqual(self.test2.with_context(lang='en_US').name, 'Knife 2') self.assertEqual(self.test2.with_context(lang='fr_FR').name, 'Couteau 2') self.assertEqual(self.test3.with_context(lang='en_US').html, '

Knife 2

Fork 2

Spoon 2

') self.assertEqual(self.test3.with_context(lang='fr_FR').html, '

Couteau 2

Fourchette 2

Cuiller 2

') def test_translate_mapped(self): self.assertEqual(self.test2.with_context(lang='en_US').mapped('name'), ['Knife']) self.test1.with_context(lang='en_US').name = 'New knife' self.assertEqual(self.test1.with_context(lang='en_US').mapped('name'), ['New knife']) self.assertEqual(self.test1.with_context(lang='fr_FR').mapped('name'), ['Couteau']) self.assertEqual(self.test2.with_context(lang='en_US').mapped('name'), ['New knife']) self.assertEqual(self.test2.with_context(lang='en_US').mapped('related_id.name'), ['New knife']) self.assertEqual(self.test2.with_context(lang='fr_FR').mapped('name'), ['Couteau']) self.assertEqual(self.test2.with_context(lang='fr_FR').mapped('related_id.name'), ['Couteau']) self.assertEqual(self.test3.with_context(lang='en_US').mapped('name'), ['New knife']) self.assertEqual(self.test3.with_context(lang='fr_FR').mapped('related_id.name'), ['Couteau']) self.assertEqual(self.test3.with_context(lang='fr_FR').mapped('name'), ['Couteau']) self.assertEqual(self.test3.with_context(lang='fr_FR').mapped('related_id.name'), ['Couteau']) self.test1.with_context(lang='fr_FR').name = 'Nouveau couteau' self.assertEqual(self.test1.with_context(lang='en_US').mapped('name'), ['New knife']) self.assertEqual(self.test1.with_context(lang='fr_FR').mapped('name'), ['Nouveau couteau']) self.assertEqual(self.test2.with_context(lang='en_US').mapped('name'), ['New knife']) self.assertEqual(self.test2.with_context(lang='en_US').mapped('related_id.name'), ['New knife']) self.assertEqual(self.test2.with_context(lang='fr_FR').mapped('name'), ['Nouveau couteau']) self.assertEqual(self.test2.with_context(lang='fr_FR').mapped('related_id.name'), ['Nouveau couteau']) self.assertEqual(self.test3.with_context(lang='en_US').mapped('name'), ['New knife']) self.assertEqual(self.test3.with_context(lang='en_US').mapped('related_id.name'), ['New knife']) self.assertEqual(self.test3.with_context(lang='fr_FR').mapped('name'), ['Nouveau couteau']) self.assertEqual(self.test3.with_context(lang='fr_FR').mapped('related_id.name'), ['Nouveau couteau'])