Spaces:
Runtime error
Runtime error
| """ | |
| 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.""" | |
| 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.""" | |
| 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 | |
| ) | |