打通 T+ 快照、业务、发货、回款和核算准备链路,保留来源差异并提供待补状态。 新增业务自动接入任务、跨平台读取服务托管、权限复核、来源关联和前端核对页面。 补充迁移、隔离集成测试、浏览器模拟验收及角色授权边界修复。
95 lines
2.8 KiB
Python
95 lines
2.8 KiB
Python
"""显式连接文件不应污染应用配置,也不能启用未授权的数据源。"""
|
|
|
|
import json
|
|
|
|
import pytest
|
|
|
|
from app.core.config import Settings
|
|
from app.core.tplus_db import resolve_tplus_settings
|
|
|
|
|
|
def test_未开启连接时不读取配置文件(tmp_path):
|
|
settings = Settings(
|
|
_env_file=None,
|
|
app_secret_key="x" * 32,
|
|
t_plus_connection_file=str(tmp_path / "missing.json"),
|
|
)
|
|
with pytest.raises(RuntimeError, match="未启用"):
|
|
resolve_tplus_settings(settings)
|
|
|
|
|
|
def test_文件连接只覆盖源字段且原Settings不变(tmp_path):
|
|
path = tmp_path / "reader.json"
|
|
path.write_text(
|
|
json.dumps(
|
|
{
|
|
"host": "127.0.0.1",
|
|
"port": 1433,
|
|
"database": "UFTData",
|
|
"user": "reader",
|
|
"password": "test-only-value",
|
|
"driver": "SQL Server",
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
settings = Settings(
|
|
_env_file=None,
|
|
app_secret_key="x" * 32,
|
|
t_plus_enabled=True,
|
|
t_plus_connection_file=str(path),
|
|
)
|
|
resolved = resolve_tplus_settings(settings)
|
|
assert resolved.t_plus_database == "UFTData"
|
|
assert resolved.mysql_database == settings.mysql_database
|
|
assert settings.t_plus_password == ""
|
|
assert "test-only-value" not in str(resolved.t_plus_database_url)
|
|
|
|
|
|
def test_连接文件不接受sa或应用配置覆盖(tmp_path):
|
|
path = tmp_path / "bad.json"
|
|
path.write_text(
|
|
json.dumps(
|
|
{
|
|
"host": "127.0.0.1",
|
|
"port": 1433,
|
|
"database": "UFTData",
|
|
"user": "sa",
|
|
"password": "test-only-value",
|
|
"driver": "SQL Server",
|
|
"app_secret_key": "bad",
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
settings = Settings(
|
|
_env_file=None,
|
|
app_secret_key="x" * 32,
|
|
t_plus_enabled=True,
|
|
t_plus_connection_file=str(path),
|
|
)
|
|
with pytest.raises(RuntimeError):
|
|
resolve_tplus_settings(settings)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("environment", "allowed", "accepted"),
|
|
[("dev", False, False), ("prod", True, False), ("dev", True, True)],
|
|
)
|
|
def test_sa仅允许显式启用的开发环境(environment, allowed, accepted):
|
|
settings = Settings(
|
|
_env_file=None,
|
|
app_secret_key="x" * 32,
|
|
app_env=environment,
|
|
t_plus_enabled=True,
|
|
t_plus_user="sa",
|
|
t_plus_database="test_source",
|
|
t_plus_odbc_driver="test_driver",
|
|
t_plus_allow_dev_sa=allowed,
|
|
)
|
|
if accepted:
|
|
assert resolve_tplus_settings(settings).t_plus_user == "sa"
|
|
else:
|
|
with pytest.raises(RuntimeError, match="不能使用 sa"):
|
|
resolve_tplus_settings(settings)
|