147 lines
6.3 KiB
Python
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',
|
|
})
|