Files
data-format-converter/tests/test_validators.py
7000pctAUTO 069a281a47
Some checks failed
CI / test (push) Has been cancelled
Add unit tests for converters, validators, and CLI
2026-02-01 19:04:07 +00:00

212 lines
6.0 KiB
Python

"""Tests for validator modules."""
import pytest
import tempfile
import os
from pathlib import Path
class TestJSONValidator:
"""Tests for JSON validator."""
def test_validate_valid_json(self):
from src.validators import JSONValidator
validator = JSONValidator()
result = validator.validate('{"name": "test"}')
assert result.valid
assert result.format_type == "json"
assert result.data == {"name": "test"}
def test_validate_invalid_json(self):
from src.validators import JSONValidator
validator = JSONValidator()
result = validator.validate('{invalid json}')
assert not result.valid
assert len(result.errors) > 0
def test_validate_empty(self):
from src.validators import JSONValidator
validator = JSONValidator()
result = validator.validate('')
assert not result.valid
def test_validate_file(self):
from src.validators import JSONValidator
validator = JSONValidator()
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
f.write('{"test": true}')
temp_path = f.name
try:
result = validator.validate_file(temp_path)
assert result.valid
finally:
os.unlink(temp_path)
class TestYAMLValidator:
"""Tests for YAML validator."""
def test_validate_valid_yaml(self):
from src.validators import YAMLValidator
validator = YAMLValidator()
result = validator.validate('name: test\nvalue: 123')
assert result.valid
assert result.format_type == "yaml"
def test_validate_invalid_yaml(self):
from src.validators import YAMLValidator
validator = YAMLValidator()
result = validator.validate('invalid: yaml: content:')
assert not result.valid
def test_validate_file(self):
from src.validators import YAMLValidator
validator = YAMLValidator()
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f:
f.write('key: value')
temp_path = f.name
try:
result = validator.validate_file(temp_path)
assert result.valid
finally:
os.unlink(temp_path)
class TestTOMLValidator:
"""Tests for TOML validator."""
def test_validate_valid_toml(self):
from src.validators import TOMLValidator
validator = TOMLValidator()
result = validator.validate('name = "test"\nvalue = 123')
assert result.valid
assert result.format_type == "toml"
def test_validate_invalid_toml(self):
from src.validators import TOMLValidator
validator = TOMLValidator()
result = validator.validate('invalid = toml = content')
assert not result.valid
class TestCSVValidator:
"""Tests for CSV validator."""
def test_validate_valid_csv(self):
from src.validators import CSVValidator
validator = CSVValidator()
result = validator.validate("name,age\nAlice,30\nBob,25")
assert result.valid
assert result.format_type == "csv"
def test_validate_empty_csv(self):
from src.validators import CSVValidator
validator = CSVValidator()
result = validator.validate("")
assert not result.valid
def test_validate_malformed_csv(self):
from src.validators import CSVValidator
validator = CSVValidator()
result = validator.validate("name,age\nAlice")
assert result.valid
assert len(result.data) == 1
class TestValidatorFactory:
"""Tests for validator factory function."""
def test_get_validator_json(self):
from src.validators import get_validator
validator = get_validator("json")
assert validator.format_name == "json"
def test_get_validator_yaml(self):
from src.validators import get_validator
validator = get_validator("yaml")
assert validator.format_name == "yaml"
def test_get_validator_toml(self):
from src.validators import get_validator
validator = get_validator("toml")
assert validator.format_name == "toml"
def test_get_validator_csv(self):
from src.validators import get_validator
validator = get_validator("csv")
assert validator.format_name == "csv"
def test_get_validator_invalid(self):
from src.validators import get_validator
with pytest.raises(ValueError):
get_validator("invalid")
class TestValidateData:
"""Tests for validate_data function."""
def test_validate_json_data(self):
from src.validators import validate_data
result = validate_data('{"key": "value"}', "json")
assert result.valid
def test_validate_yaml_data(self):
from src.validators import validate_data
result = validate_data("key: value", "yaml")
assert result.valid
class TestDetectFormat:
"""Tests for detect_format function."""
def test_detect_json_format(self):
from src.validators import detect_format
fmt = detect_format("test.json")
assert fmt == "json"
def test_detect_yaml_format(self):
from src.validators import detect_format
fmt = detect_format("test.yaml")
assert fmt == "yaml"
def test_detect_toml_format(self):
from src.validators import detect_format
fmt = detect_format("test.toml")
assert fmt == "toml"
def test_detect_csv_format(self):
from src.validators import detect_format
fmt = detect_format("test.csv")
assert fmt == "csv"
def test_detect_unknown_format(self):
from src.validators import detect_format
fmt = detect_format("test.xyz")
assert fmt is None