aps-agent/tests/golden/test_session_titles.py

46 lines
2.4 KiB
Python

import pytest
from fastapi.testclient import TestClient
from tests.golden.test_auth_tenant_isolation import login
from tests.golden.test_auth_tenant_isolation import secure_app as secure_app_fixture
secure_app = secure_app_fixture
@pytest.mark.parametrize("placeholder", ["新话题", "新任务", "新会话", " 新话题 "])
def test_automatic_title_persists_once_without_reordering_history(secure_app, placeholder):
client = TestClient(secure_app)
login(client, "planner")
created = client.post("/api/sessions", json={
"projectId": "__personal__", "title": placeholder,
}).json()["session"]
url = f"/api/sessions/{created['id']}"
response = client.patch(url, json={"title": "检查新工厂排产数据", "onlyIfUntitled": True})
assert response.status_code == 200
assert response.json()["title"] == "检查新工厂排产数据"
# Repeated effects and delayed requests must not rename an already named task.
assert client.patch(url, json={"title": "另一条请求", "onlyIfUntitled": True}).json()["title"] == "检查新工厂排产数据"
saved = next(row for row in client.get("/api/workspace").json()["sessions"] if row["id"] == created["id"])
assert saved["title"] == "检查新工厂排产数据"
assert saved["updatedAt"] == created["updatedAt"]
def test_delayed_automatic_title_preserves_manual_rename(secure_app):
client = TestClient(secure_app)
login(client, "planner")
created = client.post("/api/projects", json={"name": "标题测试"}).json()["session"]
url = f"/api/sessions/{created['id']}"
assert client.patch(url, json={"title": "我的排产复核"}).status_code == 200
assert client.patch(url, json={"title": "首条问题摘要", "onlyIfUntitled": True}).json()["title"] == "我的排产复核"
def test_automatic_title_respects_project_and_personal_permissions(secure_app):
owner, viewer = TestClient(secure_app), TestClient(secure_app)
login(owner, "planner")
login(viewer, "viewer")
project = owner.post("/api/projects", json={"name": "只读标题测试"}).json()
owner.post(f"/api/projects/{project['project']['id']}/members", json={"userId": 1003, "role": "viewer"})
personal = owner.post("/api/sessions", json={"projectId": "__personal__"}).json()["session"]
for sid in [project["session"]["id"], personal["id"]]:
assert viewer.patch(f"/api/sessions/{sid}", json={"title": "越权标题", "onlyIfUntitled": True}).status_code == 403