scratch_chat / tests /integration /test_language_context_integration.py
WebashalarForML's picture
Upload 178 files
330b6e4 verified
"""
Integration tests for Language Context Manager
Tests the integration of language context management with the overall system
to verify requirements are met.
"""
import unittest
from chat_agent.services import LanguageContextManager
class TestLanguageContextIntegration(unittest.TestCase):
"""Integration tests for LanguageContextManager."""
def setUp(self):
"""Set up test fixtures."""
self.manager = LanguageContextManager()
def test_requirement_1_1_default_python(self):
"""
Test Requirement 1.1: WHEN a user starts a new chat session
THEN the system SHALL default to Python as the programming language
"""
session_id = "new-user-session"
# New session should default to Python
language = self.manager.get_language(session_id)
self.assertEqual(language, 'python')
# Context should also default to Python
context = self.manager.get_session_context(session_id)
self.assertEqual(context['language'], 'python')
self.assertIn('Python', context['prompt_template'])
def test_requirement_1_2_language_switching(self):
"""
Test Requirement 1.2: WHEN a user explicitly selects a different programming language
THEN the system SHALL switch context to that language for subsequent interactions
"""
session_id = "language-switch-session"
# Start with default Python
self.assertEqual(self.manager.get_language(session_id), 'python')
# Switch to JavaScript
result = self.manager.set_language(session_id, 'javascript')
self.assertTrue(result)
# Verify language switched
language = self.manager.get_language(session_id)
self.assertEqual(language, 'javascript')
# Verify context updated for subsequent interactions
template = self.manager.get_language_prompt_template(session_id=session_id)
self.assertIn('JavaScript', template)
self.assertNotIn('Python', template)
def test_requirement_1_3_language_specific_responses(self):
"""
Test Requirement 1.3: WHEN a user asks language-specific questions
THEN the system SHALL provide responses tailored to the selected programming language
"""
session_id = "language-specific-session"
# Test different languages have different prompt templates
languages_to_test = ['python', 'java', 'javascript', 'cpp']
for language in languages_to_test:
with self.subTest(language=language):
self.manager.set_language(session_id, language)
template = self.manager.get_language_prompt_template(session_id=session_id)
# Each language should have its specific template
display_name = self.manager.get_language_display_name(language)
self.assertIn(display_name, template)
self.assertIn('programming assistant', template)
def test_requirement_1_5_language_switching_preserves_session(self):
"""
Test Requirement 1.5: WHEN a user switches languages mid-conversation
THEN the system SHALL maintain the chat history while updating the language context
"""
session_id = "preserve-session-test"
# Set initial language
self.manager.set_language(session_id, 'python')
initial_context = self.manager.get_session_context(session_id)
# Switch language
self.manager.set_language(session_id, 'java')
updated_context = self.manager.get_session_context(session_id)
# Language should be updated
self.assertEqual(updated_context['language'], 'java')
self.assertIn('Java', updated_context['prompt_template'])
# Session should be preserved (same session_id context exists)
self.assertIsNotNone(updated_context['updated_at'])
# Can still get context for the same session
final_language = self.manager.get_language(session_id)
self.assertEqual(final_language, 'java')
def test_supported_languages_comprehensive(self):
"""Test that all major programming languages are supported."""
supported = self.manager.get_supported_languages()
# Verify major languages are supported
expected_languages = {
'python', 'javascript', 'java', 'cpp', 'csharp',
'go', 'rust', 'typescript', 'c', 'php', 'ruby', 'swift'
}
self.assertTrue(expected_languages.issubset(supported))
# Test that each supported language has a prompt template
for language in supported:
template = self.manager.get_language_prompt_template(language=language)
self.assertIsInstance(template, str)
self.assertGreater(len(template), 0)
def test_multiple_concurrent_sessions(self):
"""Test that multiple sessions can have different language contexts simultaneously."""
sessions = {
'session-1': 'python',
'session-2': 'javascript',
'session-3': 'java',
'session-4': 'cpp'
}
# Set different languages for each session
for session_id, language in sessions.items():
result = self.manager.set_language(session_id, language)
self.assertTrue(result)
# Verify each session maintains its own context
for session_id, expected_language in sessions.items():
actual_language = self.manager.get_language(session_id)
self.assertEqual(actual_language, expected_language)
template = self.manager.get_language_prompt_template(session_id=session_id)
display_name = self.manager.get_language_display_name(expected_language)
self.assertIn(display_name, template)
if __name__ == '__main__':
unittest.main()