Initial upload: ConfDoc v0.1.0 - Config validation and documentation generator
This commit is contained in:
124
tests/test_profiles.py
Normal file
124
tests/test_profiles.py
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
import pytest
|
||||||
|
from unittest.mock import patch, MagicMock
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from confdoc.profiles.manager import ProfileManager
|
||||||
|
|
||||||
|
|
||||||
|
class TestProfileManager:
|
||||||
|
def test_list_profiles(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
profiles = manager.list_profiles()
|
||||||
|
assert "development" in profiles
|
||||||
|
assert "staging" in profiles
|
||||||
|
assert "production" in profiles
|
||||||
|
|
||||||
|
def test_get_profile_info(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
info = manager.get_profile_info("development")
|
||||||
|
assert info is not None
|
||||||
|
assert info["name"] == "Development"
|
||||||
|
assert "validation" in info
|
||||||
|
|
||||||
|
def test_load_profile(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
profile = manager.load_profile("production")
|
||||||
|
assert profile is not None
|
||||||
|
assert profile["name"] == "Production"
|
||||||
|
|
||||||
|
def test_load_nonexistent_profile(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
profile = manager.load_profile("nonexistent")
|
||||||
|
assert profile is None
|
||||||
|
|
||||||
|
def test_save_and_load_custom_profile(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
custom_profile = {
|
||||||
|
"name": "Custom",
|
||||||
|
"description": "A custom profile",
|
||||||
|
"validation": {"strict": True},
|
||||||
|
"overrides": {"custom_key": "custom_value"}
|
||||||
|
}
|
||||||
|
manager.save_profile("custom_test", custom_profile)
|
||||||
|
|
||||||
|
loaded = manager.load_profile("custom_test")
|
||||||
|
assert loaded is not None
|
||||||
|
assert loaded["name"] == "Custom"
|
||||||
|
|
||||||
|
def test_apply_profile_modifies_schema(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
profile = manager.load_profile("development")
|
||||||
|
schema = {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {}
|
||||||
|
}
|
||||||
|
|
||||||
|
result = manager.apply_profile(schema, profile)
|
||||||
|
assert result is not None
|
||||||
|
|
||||||
|
def test_create_profile_from_config(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
config = {
|
||||||
|
"debug": True,
|
||||||
|
"log_level": "DEBUG",
|
||||||
|
"nested": {"key": "value"}
|
||||||
|
}
|
||||||
|
|
||||||
|
profile = manager.create_profile_from_config(config, "test_profile", "Test description")
|
||||||
|
assert profile["name"] == "test_profile"
|
||||||
|
assert profile["description"] == "Test description"
|
||||||
|
assert "debug" in profile["overrides"]
|
||||||
|
assert "log_level" in profile["overrides"]
|
||||||
|
|
||||||
|
def test_merge_profiles(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
base = {
|
||||||
|
"name": "Base",
|
||||||
|
"validation": {"strict": False},
|
||||||
|
"overrides": {"key1": "value1"}
|
||||||
|
}
|
||||||
|
override = {
|
||||||
|
"name": "Override",
|
||||||
|
"validation": {"strict": True},
|
||||||
|
"overrides": {"key2": "value2"}
|
||||||
|
}
|
||||||
|
|
||||||
|
merged = manager.merge_profiles(base, override)
|
||||||
|
assert merged["name"] == "Override"
|
||||||
|
assert merged["validation"]["strict"] is True
|
||||||
|
assert "key1" in merged["overrides"]
|
||||||
|
assert "key2" in merged["overrides"]
|
||||||
|
|
||||||
|
def test_get_environment_overrides(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
env_vars = {
|
||||||
|
"CONFDOC_DEBUG": "true",
|
||||||
|
"CONFDOC_LOG_LEVEL": "INFO",
|
||||||
|
"OTHER_VAR": "ignored"
|
||||||
|
}
|
||||||
|
|
||||||
|
overrides = manager.get_environment_overrides(env_vars)
|
||||||
|
assert "debug" in overrides
|
||||||
|
assert overrides["debug"] is True
|
||||||
|
assert "log_level" in overrides
|
||||||
|
assert overrides["log_level"] == "INFO"
|
||||||
|
assert "OTHER_VAR" not in overrides
|
||||||
|
|
||||||
|
def test_parse_env_value_boolean(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
assert manager._parse_env_value("true") is True
|
||||||
|
assert manager._parse_env_value("True") is True
|
||||||
|
assert manager._parse_env_value("false") is False
|
||||||
|
|
||||||
|
def test_parse_env_value_integer(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
assert manager._parse_env_value("123") == 123
|
||||||
|
assert manager._parse_env_value("0") == 0
|
||||||
|
|
||||||
|
def test_parse_env_value_float(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
assert manager._parse_env_value("3.14") == 3.14
|
||||||
|
|
||||||
|
def test_parse_env_value_string(self):
|
||||||
|
manager = ProfileManager()
|
||||||
|
assert manager._parse_env_value("hello") == "hello"
|
||||||
Reference in New Issue
Block a user