Files
codexchange-cli/tests/test_conversion.py
7000pctAUTO 10e5583ad0
Some checks failed
CI / test (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / typecheck (push) Has been cancelled
Add test suite (68 tests)
2026-01-30 19:00:45 +00:00

158 lines
5.2 KiB
Python

"""Tests for conversion service module."""
import pytest
from unittest.mock import MagicMock, patch
from codexchange.models import Language, ConversionRequest, ConversionResult
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