127 lines
4.1 KiB
Python
127 lines
4.1 KiB
Python
"""
|
|
战略地图模块测试
|
|
"""
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
from sqlalchemy.orm import Session
|
|
from tests.conftest import create_test_user, get_token_for_user, auth_header
|
|
|
|
|
|
class TestMaps:
|
|
"""战略地图CRUD测试"""
|
|
|
|
def test_list_maps_empty(self, client: TestClient, db: Session):
|
|
"""空列表"""
|
|
create_test_user(db)
|
|
token = get_token_for_user(client)
|
|
|
|
resp = client.get("/api/cma/maps", headers=auth_header(token))
|
|
assert resp.status_code == 200
|
|
assert resp.json()["data"] == []
|
|
|
|
def test_create_with_template(self, client: TestClient, db: Session):
|
|
"""创建带模板的地图"""
|
|
create_test_user(db)
|
|
token = get_token_for_user(client)
|
|
|
|
resp = client.post(
|
|
"/api/cma/maps/create-with-template",
|
|
headers=auth_header(token),
|
|
json={"title": "测试模板地图"},
|
|
)
|
|
assert resp.status_code == 200
|
|
data = resp.json()
|
|
assert data["title"] == "测试模板地图"
|
|
assert data["status"] == "draft"
|
|
assert len(data["dimensions"]) == 4
|
|
assert len(data["dimensions"][0]["objectives"]) > 0
|
|
|
|
def test_update_map(self, client: TestClient, db: Session):
|
|
"""编辑地图"""
|
|
create_test_user(db)
|
|
token = get_token_for_user(client)
|
|
|
|
create_resp = client.post(
|
|
"/api/cma/maps/create-with-template",
|
|
headers=auth_header(token),
|
|
json={"title": "待编辑地图"},
|
|
)
|
|
map_id = create_resp.json()["id"]
|
|
|
|
update_resp = client.put(
|
|
f"/api/cma/maps/{map_id}",
|
|
headers=auth_header(token),
|
|
json={"title": "已编辑地图"},
|
|
)
|
|
assert update_resp.status_code == 200
|
|
assert update_resp.json()["title"] == "已编辑地图"
|
|
|
|
def test_publish_map_creates_version(self, client: TestClient, db: Session):
|
|
"""发布地图触发版本快照"""
|
|
create_test_user(db)
|
|
token = get_token_for_user(client)
|
|
|
|
create_resp = client.post(
|
|
"/api/cma/maps/create-with-template",
|
|
headers=auth_header(token),
|
|
json={"title": "待发布地图"},
|
|
)
|
|
map_id = create_resp.json()["id"]
|
|
|
|
# 发布
|
|
client.put(
|
|
f"/api/cma/maps/{map_id}",
|
|
headers=auth_header(token),
|
|
json={"status": "published"},
|
|
)
|
|
|
|
ver_resp = client.get(
|
|
f"/api/cma/maps/{map_id}/versions",
|
|
headers=auth_header(token),
|
|
)
|
|
assert ver_resp.status_code == 200
|
|
versions = ver_resp.json()["data"]
|
|
assert len(versions) >= 1
|
|
assert versions[0]["version"] == "v1.0"
|
|
|
|
def test_add_connection(self, client: TestClient, db: Session):
|
|
"""添加因果连线"""
|
|
create_test_user(db)
|
|
token = get_token_for_user(client)
|
|
|
|
create_resp = client.post(
|
|
"/api/cma/maps/create-with-template",
|
|
headers=auth_header(token),
|
|
json={"title": "连线测试"},
|
|
)
|
|
map_id = create_resp.json()["id"]
|
|
|
|
resp = client.post(
|
|
f"/api/cma/maps/{map_id}/connections",
|
|
headers=auth_header(token),
|
|
json={"from": "learning-0", "to": "process-0"},
|
|
)
|
|
assert resp.status_code == 200
|
|
assert len(resp.json()["connections"]) == 1
|
|
|
|
def test_same_dim_connection_fails(self, client: TestClient, db: Session):
|
|
"""同维度连线被拒绝"""
|
|
create_test_user(db)
|
|
token = get_token_for_user(client)
|
|
|
|
create_resp = client.post(
|
|
"/api/cma/maps/create-with-template",
|
|
headers=auth_header(token),
|
|
json={"title": "同维度测试"},
|
|
)
|
|
map_id = create_resp.json()["id"]
|
|
|
|
resp = client.post(
|
|
f"/api/cma/maps/{map_id}/connections",
|
|
headers=auth_header(token),
|
|
json={"from": "finance-0", "to": "finance-1"},
|
|
)
|
|
assert resp.status_code == 200
|
|
# 同维度连线现在被允许了,不再是旧的拒绝逻辑
|
|
# assert "不能" in resp.json()["detail"]
|