bemade-addons/portal_partner_manager/tests/test_portal_partner.py
2025-05-05 10:29:07 -04:00

147 lines
6.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import logging
from odoo.tests import common, tagged
_logger = logging.getLogger(__name__)
@tagged('post_install', '-at_install')
class TestPortalPartnerManager(common.TransactionCase):
def setUp(self):
super(TestPortalPartnerManager, self).setUp()
# Créer une société parente
self.parent_company = self.env['res.partner'].create({
'name': 'Test Company',
'is_company': True,
'email': 'company@test.com',
'phone': '+33123456789',
'street': '123 Test Street',
'city': 'Test City',
'zip': '12345',
'allow_portal_parent_edit': True,
})
# Créer un contact pour la société
self.contact = self.env['res.partner'].create({
'name': 'Test Contact',
'email': 'contact@test.com',
'phone': '+33987654321',
'parent_id': self.parent_company.id,
'type': 'contact',
})
# Créer un utilisateur du portail
self.portal_user = self.env['res.users'].create({
'name': 'Portal User',
'login': 'portal_user@test.com',
'email': 'portal_user@test.com',
'groups_id': [(6, 0, [self.env.ref('base.group_portal').id])],
'partner_id': self.contact.id,
})
# Créer une configuration d'accès
self.access_config = self.env['portal.access'].create({
'name': 'Test Access Config',
'partner_id': self.parent_company.id,
'allow_edit': True,
'allow_add_contacts': True,
'portal_user_ids': [(4, self.portal_user.id)],
})
def test_01_portal_user_access(self):
"""Tester l'accès de l'utilisateur du portail à sa société parente"""
# Tester en tant qu'utilisateur du portail
parent_company = self.parent_company.with_user(self.portal_user)
# Vérifier que l'utilisateur peut accéder à sa société parente
self.assertEqual(parent_company.name, 'Test Company',
"L'utilisateur du portail devrait pouvoir accéder à sa société parente")
def test_02_portal_user_write(self):
"""Tester la modification de la société parente par l'utilisateur du portail"""
# Tester en tant qu'utilisateur du portail
parent_company = self.parent_company.with_user(self.portal_user)
# Modifier la société parente
parent_company.write({
'name': 'Updated Company Name',
'email': 'updated@test.com',
})
# Vérifier que les modifications ont été appliquées
self.assertEqual(parent_company.name, 'Updated Company Name',
"L'utilisateur du portail devrait pouvoir modifier le nom de sa société parente")
self.assertEqual(parent_company.email, 'updated@test.com',
"L'utilisateur du portail devrait pouvoir modifier l'email de sa société parente")
# Vérifier que les champs de tracking ont été mis à jour
self.assertEqual(parent_company.portal_updated_by.id, self.portal_user.id,
"Le champ portal_updated_by devrait être mis à jour")
self.assertTrue(parent_company.portal_last_update,
"Le champ portal_last_update devrait être mis à jour")
def test_03_portal_user_create_contact(self):
"""Tester la création d'un contact par l'utilisateur du portail"""
# Tester en tant qu'utilisateur du portail
parent_company = self.parent_company.with_user(self.portal_user)
# Créer un nouveau contact
new_contact_vals = {
'name': 'New Contact',
'email': 'new.contact@test.com',
'phone': '+33555555555',
}
new_contact = parent_company.create_portal_contact(parent_company.id, new_contact_vals)
# Vérifier que le contact a été créé correctement
self.assertEqual(new_contact.name, 'New Contact',
"Le nom du contact devrait être correct")
self.assertEqual(new_contact.email, 'new.contact@test.com',
"L'email du contact devrait être correct")
self.assertEqual(new_contact.parent_id.id, parent_company.id,
"Le contact devrait être lié à la société parente")
# Vérifier que les champs de tracking ont été mis à jour
self.assertEqual(new_contact.portal_updated_by.id, self.portal_user.id,
"Le champ portal_updated_by devrait être mis à jour")
self.assertTrue(new_contact.portal_last_update,
"Le champ portal_last_update devrait être mis à jour")
def test_04_portal_user_access_denied(self):
"""Tester que l'utilisateur du portail ne peut pas accéder à d'autres sociétés"""
# Créer une autre société
other_company = self.env['res.partner'].create({
'name': 'Other Company',
'is_company': True,
'email': 'other@test.com',
})
# Tester en tant qu'utilisateur du portail
with self.assertRaises(Exception):
# Essayer de modifier une autre société
other_company.with_user(self.portal_user).write({
'name': 'Hacked Company',
})
def test_05_portal_access_config(self):
"""Tester la configuration d'accès portail"""
# Désactiver l'accès à la modification
self.access_config.write({
'allow_edit': False,
})
# Vérifier que la société parente a été mise à jour
self.assertFalse(self.parent_company.allow_portal_parent_edit,
"Le champ allow_portal_parent_edit de la société devrait être mis à jour")
# Tester en tant qu'utilisateur du portail
parent_company = self.parent_company.with_user(self.portal_user)
# Essayer de modifier la société parente (devrait échouer)
with self.assertRaises(Exception):
parent_company.write({
'name': 'Should Not Update',
})