bemade-addons/bemade_sports_clinic/tests/test_treatment_notes.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

150 lines
5.8 KiB
Python

from odoo.tests.common import TransactionCase, tagged
from odoo.exceptions import ValidationError
from datetime import date
@tagged('post_install', '-at_install')
class TestTreatmentNotes(TransactionCase):
"""Test the behavior of treatment notes after refactoring to be patient-centric."""
@classmethod
def setUpClass(cls):
super().setUpClass()
# Get treatment professional group
cls.treatment_prof_group = cls.env.ref('bemade_sports_clinic.group_sports_clinic_treatment_professional')
cls.portal_treatment_prof_group = cls.env.ref('bemade_sports_clinic.group_portal_treatment_professional')
# Create test users
cls.user_therapist = cls.env['res.users'].create({
'name': 'Test Therapist',
'login': 'test_therapist',
'email': 'therapist@example.com',
'groups_id': [(6, 0, [cls.treatment_prof_group.id])],
})
# Create test patient
cls.patient = cls.env['sports.patient'].create({
'first_name': 'Test',
'last_name': 'Patient',
'email': 'test@example.com',
})
# Create test injury
cls.injury = cls.env['sports.patient.injury'].create({
'patient_id': cls.patient.id,
'diagnosis': 'Test Injury',
'injury_date': date.today(),
})
def test_injury_note_creation(self):
"""Test creating a treatment note linked to an injury."""
# Create note linked to an injury
note = self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'injury_id': self.injury.id,
'note': 'Test note for injury',
'date': date.today(),
'user_id': self.user_therapist.id,
})
# Verify note is correctly linked to both patient and injury
self.assertEqual(note.patient_id, self.patient)
self.assertEqual(note.injury_id, self.injury)
self.assertEqual(note.note_type, 'injury')
def test_general_note_creation(self):
"""Test creating a general treatment note (not linked to an injury)."""
# Create note linked only to patient
note = self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'note': 'General patient note',
'date': date.today(),
'user_id': self.user_therapist.id,
})
# Verify note is correctly linked to patient only
self.assertEqual(note.patient_id, self.patient)
self.assertFalse(note.injury_id)
self.assertEqual(note.note_type, 'general')
def test_note_constraint(self):
"""Test constraint that ensures injury belongs to patient."""
# Create another patient
other_patient = self.env['sports.patient'].create({
'first_name': 'Other',
'last_name': 'Patient',
'email': 'other@example.com',
})
# Create injury for other patient
other_injury = self.env['sports.patient.injury'].create({
'patient_id': other_patient.id,
'diagnosis': 'Other Injury',
'injury_date': date.today(),
})
# Attempt to create note with mismatched patient and injury
with self.assertRaises(ValidationError):
self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'injury_id': other_injury.id, # This injury belongs to other_patient
'note': 'This should fail',
'date': date.today(),
'user_id': self.user_therapist.id,
})
def test_patient_treatment_note_count(self):
"""Test the computed field treatment_note_count on patient."""
# Initial count should be zero
self.assertEqual(self.patient.treatment_note_count, 0)
# Create 3 notes (2 general, 1 injury-specific)
for i in range(2):
self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'note': f'General note {i+1}',
'date': date.today(),
'user_id': self.user_therapist.id,
})
self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'injury_id': self.injury.id,
'note': 'Injury note',
'date': date.today(),
'user_id': self.user_therapist.id,
})
# Refresh patient record to ensure computed fields are up-to-date
self.patient.invalidate_model(['treatment_note_count'])
# Verify count
self.assertEqual(self.patient.treatment_note_count, 3)
def test_injury_treatment_note_count(self):
"""Test that injury only counts notes that are linked to it."""
# Initial count should be zero
self.assertEqual(len(self.injury.treatment_note_ids), 0)
# Create a general patient note (not linked to injury)
self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'note': 'General patient note',
'date': date.today(),
'user_id': self.user_therapist.id,
})
# Create an injury-specific note
self.env['sports.treatment.note'].create({
'patient_id': self.patient.id,
'injury_id': self.injury.id,
'note': 'Injury note',
'date': date.today(),
'user_id': self.user_therapist.id,
})
# Refresh injury record
self.injury.invalidate_model(['treatment_note_ids'])
# Verify that only the injury-specific note is counted
self.assertEqual(len(self.injury.treatment_note_ids), 1)