"""Tests for conversion service module.""" from unittest.mock import MagicMock from codexchange.models import Language from codexchange.services.conversion_service import ConversionService class TestConversionService: """Tests for ConversionService.""" def test_build_conversion_prompt( self, mock_ollama_service, sample_python_code ): """Test building conversion prompt.""" service = ConversionService(ollama_service=mock_ollama_service) prompt = service.build_conversion_prompt( sample_python_code, Language.PYTHON, Language.JAVASCRIPT ) assert "python" in prompt assert "javascript" in prompt assert "IMPORTANT REQUIREMENTS" in prompt assert "Preserve ALL comments" in prompt assert sample_python_code in prompt def test_convert_success( self, mock_ollama_service, conversion_request ): """Test successful conversion.""" mock_ollama_service.generate.return_value = "converted code" service = ConversionService(ollama_service=mock_ollama_service) result = service.convert(conversion_request) assert result.success is True assert result.converted_code == "converted code" assert result.error_message is None def test_convert_failure( self, mock_ollama_service, conversion_request ): """Test failed conversion.""" mock_ollama_service.generate.side_effect = Exception("Connection failed") service = ConversionService(ollama_service=mock_ollama_service) result = service.convert(conversion_request) assert result.success is False assert result.error_message is not None def test_convert_with_retry( self, mock_ollama_service, conversion_request ): """Test conversion with retry on failure.""" mock_ollama_service.generate.side_effect = [ Exception("fail 1"), Exception("fail 2"), "success on third try" ] service = ConversionService(ollama_service=mock_ollama_service) result = service.convert(conversion_request) assert result.success is True assert result.converted_code == "success on third try" def test_clean_conversion_output_with_code_blocks(self): """Test cleaning conversion output with code blocks.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) output = """Here is the converted code: ```javascript console.log("Hello"); ``` """ cleaned = service._clean_conversion_output(output) assert cleaned == 'console.log("Hello");' def test_clean_conversion_output_without_code_blocks(self): """Test cleaning conversion output without code blocks.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) output = "console.log('Hello');" cleaned = service._clean_conversion_output(output) assert cleaned == "console.log('Hello');" def test_count_comments_python(self): """Test counting Python comments.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) code = "# This is a comment\nprint('hello')" count = service.count_comments(code) assert count == 1 def test_count_comments_javascript(self): """Test counting JavaScript comments.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) code = """ // This is a comment function hello() { /* Block comment */ return 1; // inline comment } """ count = service.count_comments(code) assert count == 3 def test_verify_comment_preservation(self): """Test comment preservation verification.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) original = "# Comment\nprint('hello')" converted = "// Comment\nconsole.log('hello')" result = service.verify_comment_preservation(original, converted) assert result is True def test_verify_comment_preservation_no_comments(self): """Test comment preservation with no comments.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) original = "print('hello')" converted = "console.log('hello')" result = service.verify_comment_preservation(original, converted) assert result is True def test_verify_comment_preservation_missing_comments(self): """Test comment preservation when comments are missing.""" mock_service = MagicMock() service = ConversionService(ollama_service=mock_service) original = "# Comment\nprint('hello')" converted = "console.log('hello')" result = service.verify_comment_preservation(original, converted) assert result is False