54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""配置管理测试"""
|
||
import pytest
|
||
from config.settings import AppConfig
|
||
from config.defaults import DEFAULTS
|
||
|
||
def test_config_load():
|
||
"""测试配置加载"""
|
||
config = AppConfig.load({"app": {"store_id": 1}})
|
||
assert config.get("app.timezone") == DEFAULTS["app"]["timezone"]
|
||
|
||
def test_config_override():
|
||
"""测试配置覆盖"""
|
||
overrides = {
|
||
"app": {"store_id": 12345}
|
||
}
|
||
config = AppConfig.load(overrides)
|
||
assert config.get("app.store_id") == 12345
|
||
|
||
def test_config_get_nested():
|
||
"""测试嵌套配置获取"""
|
||
config = AppConfig.load({"app": {"store_id": 1}})
|
||
assert config.get("db.batch_size") == 1000
|
||
assert config.get("nonexistent.key", "default") == "default"
|
||
|
||
|
||
def test_business_day_start_hour_default():
|
||
"""默认值 8 应正常加载"""
|
||
config = AppConfig.load({"app": {"store_id": 1}})
|
||
assert config.get("app.business_day_start_hour") == 8
|
||
|
||
|
||
def test_business_day_start_hour_valid_range():
|
||
"""0–23 范围内的整数应正常加载"""
|
||
for h in (0, 12, 23):
|
||
config = AppConfig.load({"app": {"store_id": 1, "business_day_start_hour": h}})
|
||
assert config.get("app.business_day_start_hour") == h
|
||
|
||
|
||
def test_business_day_start_hour_out_of_range():
|
||
"""超出 0–23 范围应抛出 SystemExit"""
|
||
with pytest.raises(SystemExit, match="business_day_start_hour"):
|
||
AppConfig.load({"app": {"store_id": 1, "business_day_start_hour": 24}})
|
||
with pytest.raises(SystemExit, match="business_day_start_hour"):
|
||
AppConfig.load({"app": {"store_id": 1, "business_day_start_hour": -1}})
|
||
|
||
|
||
def test_business_day_start_hour_non_int():
|
||
"""非整数类型应抛出 SystemExit"""
|
||
with pytest.raises(SystemExit, match="business_day_start_hour"):
|
||
AppConfig.load({"app": {"store_id": 1, "business_day_start_hour": "8"}})
|
||
with pytest.raises(SystemExit, match="business_day_start_hour"):
|
||
AppConfig.load({"app": {"store_id": 1, "business_day_start_hour": 8.0}})
|