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

203 lines
7.3 KiB
Python

"""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"