Add test suite (68 tests)
This commit is contained in:
157
tests/test_conversion.py
Normal file
157
tests/test_conversion.py
Normal file
@@ -0,0 +1,157 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user