EduMentorAI / src /rag_app /tests /test_base.py
ziadtarek12's picture
Frontend Finished
a9366ba
Raw
History Blame Contribute Delete
3.88 kB
"""
Base test classes and utilities for RAG app tests.
"""
import uuid
from django.test import TestCase, TransactionTestCase
from django.contrib.auth.models import User
from django.db import transaction
from rag_app.models import Subject, Document, ChatSession
class BaseTestCase(TestCase):
"""Base test case with common setup and utilities."""
@classmethod
def setUpClass(cls):
"""Set up test class."""
super().setUpClass()
cls._test_counter = 0
def setUp(self):
"""Set up test data with unique identifiers."""
# Generate unique identifiers for this test
test_id = str(uuid.uuid4())[:8]
self.__class__._test_counter += 1
# Create test user with unique username
self.user = User.objects.create_user(
username=f'testuser_{test_id}_{self._test_counter}',
email=f'test_{test_id}@example.com',
password='testpass123'
)
# Store unique identifiers for use in tests
self.test_id = test_id
self.test_counter = self._test_counter
def create_subject(self, name=None, code=None, created_by=None):
"""Create a subject with unique code."""
if name is None:
name = f'Test Subject {self.test_id}'
if code is None:
code = f'TEST{self.test_counter}{self.test_id[:4].upper()}'
if created_by is None:
created_by = self.user
return Subject.objects.create(
name=name,
code=code,
created_by=created_by
)
def create_document(self, subject=None, title=None, uploaded_by=None):
"""Create a document with unique title."""
if subject is None:
subject = self.create_subject()
if title is None:
title = f'Test Document {self.test_id}'
if uploaded_by is None:
uploaded_by = self.user
return Document.objects.create(
title=title,
subject=subject,
uploaded_by=uploaded_by,
file_size=1024
)
def create_chat_session(self, subject=None, document=None, created_by=None):
"""Create a chat session."""
if created_by is None:
created_by = self.user
return ChatSession.objects.create(
subject=subject,
document=document,
user=created_by
)
class BaseTransactionTestCase(TransactionTestCase):
"""Base transaction test case for tests requiring database transactions."""
@classmethod
def setUpClass(cls):
"""Set up test class."""
super().setUpClass()
cls._test_counter = 0
def setUp(self):
"""Set up test data with unique identifiers."""
# Generate unique identifiers for this test
test_id = str(uuid.uuid4())[:8]
self.__class__._test_counter += 1
# Create test user with unique username
self.user = User.objects.create_user(
username=f'testuser_{test_id}_{self._test_counter}',
email=f'test_{test_id}@example.com',
password='testpass123'
)
# Store unique identifiers for use in tests
self.test_id = test_id
self.test_counter = self._test_counter
def create_subject(self, name=None, code=None, created_by=None):
"""Create a subject with unique code."""
if name is None:
name = f'Test Subject {self.test_id}'
if code is None:
code = f'TEST{self.test_counter}{self.test_id[:4].upper()}'
if created_by is None:
created_by = self.user
return Subject.objects.create(
name=name,
code=code,
created_by=created_by
)