# Copyright 2026 Ecocentral, Criptomart # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). from odoo.tests.common import TransactionCase from odoo.tests.common import tagged from odoo.addons.l10n_es_partner_ccpae.models.res_partner import DEFAULT_CCPAE_ORGANISMO @tagged("post_install", "-at_install") class TestResPartnerCcpae(TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() cls.partner = cls.env["res.partner"].create( { "name": "Productor Ecològic Test", "is_company": True, } ) # `create` crida `_track_discard()`, que apunta `None` com a valors # inicials del registre per no traçar la pròpia creació. Mentre aquest # `None` hi sigui, cap `write` posterior deixa rastre. Buidant el # precommit aquí es descarta i els tests ja poden traçar. cls._flush_tracking(cls.env) @staticmethod def _flush_tracking(env): env.flush_all() env.cr.precommit.run() def _tracked_fields(self): """Camps amb rastre al xatter del contacte, després d'un `write`. `mail.thread.write()` no crea el `mail.message` de seguiment al moment: el deixa encuat com a callback de precommit (és el que desencalla `MailCommon.flush_tracking` del core). I un cop creat cal invalidar el contacte, perquè `message_ids` ja s'havia llegit i el one2many es queda amb el valor antic a la memòria cau. """ self._flush_tracking(self.env) self.partner.invalidate_recordset() return self.partner.message_ids.tracking_value_ids.mapped("field_id.name") def test_organismo_default(self): """Un contacte nou porta el codi del CCPAE per defecte.""" self.assertEqual(self.partner.ccpae_organismo, DEFAULT_CCPAE_ORGANISMO) self.assertFalse(self.partner.ccpae_operador) def test_campos_con_seguimiento(self): """Escriure als camps CCPAE deixa rastre al xatter.""" self.partner.write({"ccpae_operador": "CT-12345"}) self.assertIn( "ccpae_operador", self._tracked_fields(), "El canvi de ccpae_operador ha de quedar registrat al xatter", ) self.partner.write({"ccpae_organismo": "ES-ECO-020-CT"}) self.assertIn("ccpae_organismo", self._tracked_fields()) def test_vista_heredada_valida(self): """La vista heretada s'ancora bé al formulari de `base` de la 18.0.""" view = self.env.ref("l10n_es_partner_ccpae.res_partner_view_form_ccpae") arch = self.env["res.partner"].get_view(view.id, "form")["arch"] self.assertIn("ccpae_operador", arch) self.assertIn("ccpae_organismo", arch)