# Copyright 2025 Criptomart # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) from odoo.tests.common import TransactionCase class TestResPartnerExtension(TransactionCase): """Test suite para la extensión res.partner (user-group relationship).""" def setUp(self): super().setUp() # Crear grupos (res.partner with is_company=True) self.group1 = self.env["res.partner"].create( { "name": "Grupo 1", "is_company": True, "email": "grupo1@test.com", } ) self.group2 = self.env["res.partner"].create( { "name": "Grupo 2", "is_company": True, "email": "grupo2@test.com", } ) # Crear usuario self.user = self.env["res.users"].create( { "name": "Test User", "login": "testuser@test.com", "email": "testuser@test.com", } ) def test_partner_can_belong_to_groups(self): """Test que un partner (usuario) puede pertenecer a múltiples grupos.""" partner = self.user.partner_id # Agregar partner a grupos (usar campo member_ids) partner.member_ids = [(6, 0, [self.group1.id, self.group2.id])] # Verificar que pertenece a ambos grupos self.assertIn(self.group1, partner.member_ids) self.assertIn(self.group2, partner.member_ids) self.assertEqual(len(partner.member_ids), 2) def test_group_can_have_multiple_users(self): """Test que un grupo puede tener múltiples usuarios.""" user2 = self.env["res.users"].create( { "name": "Test User 2", "login": "testuser2@test.com", "email": "testuser2@test.com", } ) # Agregar usuarios al grupo self.group1.user_ids = [(6, 0, [self.user.id, user2.id])] # Verificar que el grupo tiene ambos usuarios self.assertIn(self.user, self.group1.user_ids) self.assertIn(user2, self.group1.user_ids) self.assertEqual(len(self.group1.user_ids), 2) def test_user_group_relationship_is_bidirectional(self): """Test que se puede modificar la relación desde el lado del partner o el grupo.""" partner = self.user.partner_id # Opción 1: Agregar grupo al usuario (desde el lado del usuario/partner) partner.member_ids = [(6, 0, [self.group1.id])] self.assertIn(self.group1, partner.member_ids) # Opción 2: Agregar usuario al grupo (desde el lado del grupo) # Nota: Esto es una relación Many2many independiente user2 = self.env["res.users"].create( { "name": "Test User 2", "login": "testuser2@test.com", "email": "testuser2@test.com", } ) self.group2.user_ids = [(6, 0, [user2.id])] self.assertIn(user2, self.group2.user_ids) def test_empty_group_ids(self): """Test que un partner sin grupos tiene group_ids vacío.""" partner = self.user.partner_id # Sin agregar a ningún grupo self.assertEqual(len(partner.member_ids), 0)