80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
"""Tests for validation module."""
|
|
|
|
import pytest
|
|
from pathlib import Path
|
|
import tempfile
|
|
|
|
|
|
class TestValidator:
|
|
"""Test cases for schema validation."""
|
|
|
|
def test_validate_missing_required(self):
|
|
"""Test validation catches missing required variables."""
|
|
from env_pro.core.validator import Validator, Schema, VarSchema
|
|
|
|
schema = Schema(variables={
|
|
"DATABASE_URL": VarSchema(required=True),
|
|
"API_KEY": VarSchema(required=True),
|
|
})
|
|
|
|
validator = Validator(schema)
|
|
errors = validator.validate({"DATABASE_URL": "some-url"})
|
|
|
|
error_keys = [e.key for e in errors]
|
|
assert "API_KEY" in error_keys
|
|
|
|
def test_validate_pattern_mismatch(self):
|
|
"""Test validation catches pattern mismatches."""
|
|
from env_pro.core.validator import Validator, Schema, VarSchema
|
|
|
|
schema = Schema(variables={
|
|
"PORT": VarSchema(type="int", pattern=r"^\d+$"),
|
|
})
|
|
|
|
validator = Validator(schema)
|
|
errors = validator.validate({"PORT": "abc"})
|
|
|
|
assert len(errors) > 0
|
|
assert errors[0].key == "PORT"
|
|
|
|
def test_validate_min_length(self):
|
|
"""Test validation checks minimum length."""
|
|
from env_pro.core.validator import Validator, Schema, VarSchema
|
|
|
|
schema = Schema(variables={
|
|
"PASSWORD": VarSchema(min_length=8),
|
|
})
|
|
|
|
validator = Validator(schema)
|
|
errors = validator.validate({"PASSWORD": "short"})
|
|
|
|
assert len(errors) > 0
|
|
assert "PASSWORD" in [e.key for e in errors]
|
|
|
|
def test_from_file_no_schema(self, temp_dir):
|
|
"""Test loading validator when no schema file exists."""
|
|
from env_pro.core.validator import Validator
|
|
|
|
import os
|
|
os.chdir(temp_dir)
|
|
|
|
validator = Validator.from_file()
|
|
assert validator.schema is None
|
|
|
|
def test_from_file_with_schema(self, temp_dir):
|
|
"""Test loading validator with schema file."""
|
|
from env_pro.core.validator import Validator
|
|
|
|
schema_content = """variables:
|
|
DATABASE_URL:
|
|
type: url
|
|
required: true
|
|
"""
|
|
(temp_dir / ".env.schema.yaml").write_text(schema_content)
|
|
|
|
import os
|
|
os.chdir(temp_dir)
|
|
|
|
validator = Validator.from_file()
|
|
assert validator.schema is not None
|