bemade-addons/bemade_sports_clinic/tests/test_portal_access.py
Denis Durepos ca57ec8f16 [IMP] bemade_sports_clinic: Refactor portal views and enhance treatment notes
- Refactor portal templates to eliminate intra-module template inheritance
- Integrate emergency contacts section into player injuries template
- Add full internal admin views for treatment notes with chatter support
- Fix ORM warning in test_rights by using proper ORM commands
- Update manifest to reflect new functionality (v18.0.1.9.0)

This refactoring improves template stability by removing XPath errors and
provides treatment professionals with better access to emergency contacts
and treatment notes both in portal and backend interfaces.
2025-07-11 21:47:50 -04:00

89 lines
3.8 KiB
Python

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