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