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