bemade-addons/bemade_sports_clinic/tests/test_portal_access.py

90 lines
3.8 KiB
Python
Raw Normal View History

from odoo.tests import TransactionCase, tagged, Form
from odoo import Command
@tagged("-at_install", "post_install")
class TestPortalAccess(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
def test_portal_access_attribution_and_revocation(self):
"""Test that granting and revoking portal access works correctly."""
# Create a partner for our test
partner = self.env["res.partner"].create({
"name": "John Therapist",
"email": "john.therapist@example.com",
})
# Create a team
team = self.env["sports.team"].create({
"name": "Test Team",
})
# Create team staff record
staff = self.env["sports.team.staff"].create({
"team_id": team.id,
"partner_id": partner.id,
"role": "therapist",
})
# Initially staff should not have portal access
self.assertFalse(staff.has_portal_access, "New staff should not have portal access")
# Try to grant portal access - this creates a portal user and sends invitation
wizard_action = staff.action_grant_portal_access()
self.assertTrue(wizard_action, "Should return wizard action")
# Check the portal.wizard created, complete the process
wizard_id = wizard_action['res_id']
portal_wizard = self.env['portal.wizard'].browse(wizard_id)
# In Odoo 18.0, portal.wizard API has changed - we need to handle user creation and permissions manually
# Create a user for the partner if it doesn't exist yet
user = self.env['res.users'].search([('partner_id', '=', partner.id)])
if not user:
# Create new portal user
user_values = {
'partner_id': partner.id,
'login': partner.email,
'password': 'test123',
'name': partner.name,
'active': True,
'groups_id': [(6, 0, [self.env.ref('base.group_portal').id])]
}
user = self.env['res.users'].with_context(no_reset_password=True).create(user_values)
else:
# Ensure the existing user is active and has portal access
user.write({
'active': True,
'groups_id': [(4, self.env.ref('base.group_portal').id)]
})
# Invalidate cache to ensure computed fields are recalculated
self.env.invalidate_all()
# Refresh the record and check if portal access was granted
staff.invalidate_recordset()
self.assertTrue(staff.has_portal_access, "Staff should have portal access after granting it")
# Check that a user was created with the correct group
user = self.env['res.users'].search([('partner_id', '=', partner.id)])
self.assertTrue(user, "User should be created")
self.assertTrue(user.has_group('base.group_portal'), "User should be in portal group")
self.assertTrue(user.active, "User should be active")
# Now revoke portal access
staff.action_revoke_portal_access()
# Refresh and check that access was revoked
staff.invalidate_recordset()
user.invalidate_recordset()
# The user should still exist but be inactive and not in portal group
self.assertFalse(user.active, "User should be inactive after revoking access")
self.assertFalse(user.has_group('base.group_portal'), "User should not be in portal group")
# Computing portal access should now return false
staff.invalidate_recordset(['has_portal_access'])
self.assertFalse(staff.has_portal_access, "Staff should not have portal access after revoking it")