Add test suite (68 tests)
This commit is contained in:
202
tests/test_models.py
Normal file
202
tests/test_models.py
Normal file
@@ -0,0 +1,202 @@
|
||||
"""Tests for models module."""
|
||||
|
||||
import pytest
|
||||
|
||||
from codexchange.models import (
|
||||
Language,
|
||||
ConversionRequest,
|
||||
ConversionResult,
|
||||
ModelInfo,
|
||||
FileConversionResult,
|
||||
VALID_CONVERSIONS,
|
||||
)
|
||||
|
||||
|
||||
class TestLanguage:
|
||||
"""Tests for Language enum."""
|
||||
|
||||
def test_language_values(self):
|
||||
"""Test that Language enum has correct values."""
|
||||
assert Language.JAVASCRIPT.value == "javascript"
|
||||
assert Language.TYPESCRIPT.value == "typescript"
|
||||
assert Language.PYTHON.value == "python"
|
||||
assert Language.JAVA.value == "java"
|
||||
|
||||
def test_from_extension(self):
|
||||
"""Test getting language from file extension."""
|
||||
assert Language.from_extension(".js") == Language.JAVASCRIPT
|
||||
assert Language.from_extension(".jsx") == Language.JAVASCRIPT
|
||||
assert Language.from_extension(".ts") == Language.TYPESCRIPT
|
||||
assert Language.from_extension(".tsx") == Language.TYPESCRIPT
|
||||
assert Language.from_extension(".py") == Language.PYTHON
|
||||
assert Language.from_extension(".java") == Language.JAVA
|
||||
assert Language.from_extension(".unknown") is None
|
||||
|
||||
def test_extension_property(self):
|
||||
"""Test getting file extension from language."""
|
||||
assert Language.JAVASCRIPT.extension == ".js"
|
||||
assert Language.TYPESCRIPT.extension == ".ts"
|
||||
assert Language.PYTHON.extension == ".py"
|
||||
assert Language.JAVA.extension == ".java"
|
||||
|
||||
def test_syntax_check_command(self):
|
||||
"""Test syntax check command property."""
|
||||
assert Language.PYTHON.syntax_check_command == "python"
|
||||
assert Language.TYPESCRIPT.syntax_check_command is not None
|
||||
assert Language.JAVASCRIPT.syntax_check_command is not None
|
||||
assert Language.JAVA.syntax_check_command is None
|
||||
|
||||
|
||||
class TestValidConversions:
|
||||
"""Tests for valid conversion pairs."""
|
||||
|
||||
def test_js_ts_conversion(self):
|
||||
"""Test JavaScript to TypeScript conversion is valid."""
|
||||
assert (Language.JAVASCRIPT, Language.TYPESCRIPT) in VALID_CONVERSIONS
|
||||
assert (Language.TYPESCRIPT, Language.JAVASCRIPT) in VALID_CONVERSIONS
|
||||
|
||||
def test_js_python_conversion(self):
|
||||
"""Test JavaScript to Python conversion is valid."""
|
||||
assert (Language.JAVASCRIPT, Language.PYTHON) in VALID_CONVERSIONS
|
||||
assert (Language.PYTHON, Language.JAVASCRIPT) in VALID_CONVERSIONS
|
||||
|
||||
def test_ts_python_conversion(self):
|
||||
"""Test TypeScript to Python conversion is valid."""
|
||||
assert (Language.TYPESCRIPT, Language.PYTHON) in VALID_CONVERSIONS
|
||||
assert (Language.PYTHON, Language.TYPESCRIPT) in VALID_CONVERSIONS
|
||||
|
||||
def test_js_java_conversion(self):
|
||||
"""Test JavaScript to Java conversion is valid."""
|
||||
assert (Language.JAVASCRIPT, Language.JAVA) in VALID_CONVERSIONS
|
||||
assert (Language.JAVA, Language.JAVASCRIPT) in VALID_CONVERSIONS
|
||||
|
||||
def test_ts_java_conversion(self):
|
||||
"""Test TypeScript to Java conversion is valid."""
|
||||
assert (Language.TYPESCRIPT, Language.JAVA) in VALID_CONVERSIONS
|
||||
assert (Language.JAVA, Language.TYPESCRIPT) in VALID_CONVERSIONS
|
||||
|
||||
def test_python_java_conversion(self):
|
||||
"""Test Python to Java conversion is valid."""
|
||||
assert (Language.PYTHON, Language.JAVA) in VALID_CONVERSIONS
|
||||
assert (Language.JAVA, Language.PYTHON) in VALID_CONVERSIONS
|
||||
|
||||
|
||||
class TestConversionRequest:
|
||||
"""Tests for ConversionRequest model."""
|
||||
|
||||
def test_valid_request(self, sample_python_code):
|
||||
"""Test creating a valid conversion request."""
|
||||
request = ConversionRequest(
|
||||
source_code=sample_python_code,
|
||||
source_language=Language.PYTHON,
|
||||
target_language=Language.JAVASCRIPT,
|
||||
model="codellama"
|
||||
)
|
||||
|
||||
assert request.source_code == sample_python_code
|
||||
assert request.source_language == Language.PYTHON
|
||||
assert request.target_language == Language.JAVASCRIPT
|
||||
assert request.model == "codellama"
|
||||
|
||||
def test_invalid_conversion_pair(self, sample_python_code):
|
||||
"""Test that invalid conversion pair raises error."""
|
||||
with pytest.raises(ValueError):
|
||||
ConversionRequest(
|
||||
source_code=sample_python_code,
|
||||
source_language=Language.PYTHON,
|
||||
target_language=Language.PYTHON,
|
||||
model="codellama"
|
||||
)
|
||||
|
||||
def test_default_model(self, sample_python_code):
|
||||
"""Test default model value."""
|
||||
request = ConversionRequest(
|
||||
source_code=sample_python_code,
|
||||
source_language=Language.PYTHON,
|
||||
target_language=Language.JAVASCRIPT
|
||||
)
|
||||
|
||||
assert request.model == "codellama"
|
||||
|
||||
|
||||
class TestConversionResult:
|
||||
"""Tests for ConversionResult model."""
|
||||
|
||||
def test_successful_result(self, successful_conversion_result):
|
||||
"""Test successful conversion result."""
|
||||
assert successful_conversion_result.success is True
|
||||
assert successful_conversion_result.converted_code is not None
|
||||
assert successful_conversion_result.error_message is None
|
||||
assert successful_conversion_result.syntax_verified is True
|
||||
|
||||
def test_failed_result(self, failed_conversion_result):
|
||||
"""Test failed conversion result."""
|
||||
assert failed_conversion_result.success is False
|
||||
assert failed_conversion_result.converted_code is None
|
||||
assert failed_conversion_result.error_message is not None
|
||||
|
||||
def test_default_values(self, sample_python_code):
|
||||
"""Test default values for ConversionResult."""
|
||||
result = ConversionResult(
|
||||
success=True,
|
||||
converted_code="test",
|
||||
original_code=sample_python_code,
|
||||
source_language=Language.PYTHON,
|
||||
target_language=Language.JAVASCRIPT,
|
||||
model="codellama"
|
||||
)
|
||||
|
||||
assert result.syntax_verified is False
|
||||
assert result.syntax_warnings == []
|
||||
|
||||
|
||||
class TestModelInfo:
|
||||
"""Tests for ModelInfo model."""
|
||||
|
||||
def test_model_info_creation(self):
|
||||
"""Test creating ModelInfo."""
|
||||
info = ModelInfo(
|
||||
name="codellama",
|
||||
size="4GB",
|
||||
modified_at="2024-01-01"
|
||||
)
|
||||
|
||||
assert info.name == "codellama"
|
||||
assert info.size == "4GB"
|
||||
assert info.modified_at == "2024-01-01"
|
||||
|
||||
def test_model_info_optional_fields(self):
|
||||
"""Test ModelInfo with optional fields."""
|
||||
info = ModelInfo(name="test-model")
|
||||
|
||||
assert info.name == "test-model"
|
||||
assert info.size is None
|
||||
assert info.modified_at is None
|
||||
|
||||
|
||||
class TestFileConversionResult:
|
||||
"""Tests for FileConversionResult model."""
|
||||
|
||||
def test_successful_file_conversion(self):
|
||||
"""Test successful file conversion result."""
|
||||
result = FileConversionResult(
|
||||
input_path="/input/file.py",
|
||||
output_path="/output/file.js",
|
||||
success=True
|
||||
)
|
||||
|
||||
assert result.input_path == "/input/file.py"
|
||||
assert result.output_path == "/output/file.js"
|
||||
assert result.success is True
|
||||
assert result.error_message is None
|
||||
|
||||
def test_failed_file_conversion(self):
|
||||
"""Test failed file conversion result."""
|
||||
result = FileConversionResult(
|
||||
input_path="/input/file.py",
|
||||
success=False,
|
||||
error_message="Connection failed"
|
||||
)
|
||||
|
||||
assert result.success is False
|
||||
assert result.error_message == "Connection failed"
|
||||
Reference in New Issue
Block a user