addons-cm/l10n_es_partner_ccpae/tests/test_res_partner_ccpae.py
2026-08-07 16:34:38 +02:00

67 lines
2.7 KiB
Python

# 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)