73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
"""F1 测试:项目骨架 + 配置体系"""
|
|
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
from src.main import app, config, load_config
|
|
|
|
|
|
@pytest.fixture
|
|
def client():
|
|
return TestClient(app)
|
|
|
|
|
|
class TestHealthEndpoint:
|
|
"""健康端点"""
|
|
|
|
def test_status_returns_200(self, client):
|
|
resp = client.get("/api/daemon/status")
|
|
assert resp.status_code == 200
|
|
|
|
def test_status_has_required_fields(self, client):
|
|
data = client.get("/api/daemon/status").json()
|
|
assert data["status"] == "running"
|
|
assert data["version"] == "3.0.0"
|
|
assert "ticker_running" in data
|
|
assert "config" in data
|
|
|
|
def test_status_config_values(self, client):
|
|
data = client.get("/api/daemon/status").json()
|
|
assert data["config"]["tick_interval"] == 30
|
|
assert data["config"]["max_global_agents"] == 5
|
|
|
|
|
|
class TestProjectsEndpoint:
|
|
"""项目列表端点(占位)"""
|
|
|
|
def test_list_projects_returns_200(self, client):
|
|
resp = client.get("/api/projects")
|
|
assert resp.status_code == 200
|
|
assert "projects" in resp.json()
|
|
|
|
|
|
class TestConfig:
|
|
"""配置加载"""
|
|
|
|
def test_config_loaded(self):
|
|
assert isinstance(config, dict)
|
|
|
|
def test_config_has_daemon_section(self):
|
|
assert "daemon" in config
|
|
assert config["daemon"]["tick_interval"] == 30
|
|
|
|
def test_config_has_inbox_section(self):
|
|
assert "inbox" in config
|
|
|
|
def test_load_config_returns_dict(self):
|
|
cfg = load_config()
|
|
assert isinstance(cfg, dict)
|
|
|
|
|
|
class TestOpenAPI:
|
|
"""Swagger 文档"""
|
|
|
|
def test_openapi_json_accessible(self, client):
|
|
resp = client.get("/openapi.json")
|
|
assert resp.status_code == 200
|
|
data = resp.json()
|
|
assert data["info"]["title"] == "Sanguo MoziPlus v2"
|
|
|
|
def test_docs_endpoint_accessible(self, client):
|
|
resp = client.get("/docs")
|
|
assert resp.status_code == 200
|