添加 agentation 成功
This commit is contained in:
+1
-1
@@ -66,7 +66,7 @@
|
||||
| 参数名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| page | number | 否 | 页码,从 1 开始,默认 1 |
|
||||
| pageSize | number | 否 | 每页条数,默认 20 |
|
||||
| pageSize | number | 否 | 每页条数,默认 50 |
|
||||
| searchType | string | 否 | 搜索维度:`name`(项目名称)、`code`(项目编号) |
|
||||
| keyword | string | 否 | 搜索关键词,与 searchType 配合使用 |
|
||||
| progress | string | 否 | 项目进度筛选,取值与业务枚举一致 |
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ class LoginBody(BaseModel):
|
||||
|
||||
class ProjectListBody(BaseModel):
|
||||
page: Optional[int] = 1
|
||||
pageSize: Optional[int] = 20
|
||||
pageSize: Optional[int] = 50
|
||||
searchType: Optional[str] = None
|
||||
keyword: Optional[str] = None
|
||||
progress: Optional[str] = None
|
||||
@@ -110,7 +110,7 @@ def login(body: LoginBody):
|
||||
def project_list(body: ProjectListBody, authorization: Optional[str] = Header(None)):
|
||||
_get_current_user(authorization)
|
||||
page = body.page or 1
|
||||
page_size = body.pageSize or 20
|
||||
page_size = body.pageSize or 50
|
||||
list_, total = projects_repo.list_projects(
|
||||
page=page,
|
||||
page_size=page_size,
|
||||
|
||||
@@ -160,7 +160,7 @@ DATE_FILTER_COLUMNS = {
|
||||
|
||||
def list_projects(
|
||||
page: int = 1,
|
||||
page_size: int = 20,
|
||||
page_size: int = 50,
|
||||
search_type: Optional[str] = None,
|
||||
keyword: Optional[str] = None,
|
||||
progress: Optional[str] = None,
|
||||
|
||||
@@ -42,3 +42,12 @@ TEST_BASE_URL=http://localhost:8000 pytest tests/ -v
|
||||
| POST /api/projects/create | 无 token 401、非市场部 403、市场部且必填齐全 201、缺合同编号/项目名称 400、校验失败可含 errors 数组 |
|
||||
| POST /api/projects/update | 无 token 401、缺 id 400/422、存在项目 200 保存成功、不存在 404 |
|
||||
| POST /api/projects/logs | 无 token 401、缺 id 400/422、有 token 返回 list/total/page/pageSize、不存在项目 404、更新后有一条含 summary 的日志、列表项含 id/operatorId/operatorName/operatedAt/summary |
|
||||
|
||||
### E2E 流程(登录成功后 → 列表 → 创建 → 修改 → 日志)
|
||||
|
||||
| 用例 | 说明 |
|
||||
|------|------|
|
||||
| test_e2e_login_then_get_project_list | 登录成功后获取项目列表,返回 200 且含 list/total/page/pageSize |
|
||||
| test_e2e_login_then_create_project_then_list_includes_it | 登录(市场部)→ 创建项目 → 获取列表,列表中包含新建项目 |
|
||||
| test_e2e_login_then_create_then_detail_then_update_then_detail_reflects | 登录 → 创建 → 查详情 → 修改 → 再查详情,详情反映修改 |
|
||||
| test_e2e_login_then_create_and_update_then_logs_contain_record | 登录 → 创建 → 修改 → 获取操作日志,日志中含记录且含 summary |
|
||||
|
||||
@@ -464,3 +464,116 @@ def test_logs_list_items_contain_required_fields(client, auth_token, market_toke
|
||||
assert "operatorName" in item
|
||||
assert "operatedAt" in item
|
||||
assert "summary" in item
|
||||
|
||||
|
||||
# ---------- E2E:登录成功后 → 获取列表 → 创建项目 → 修改项目(完整流程)----------
|
||||
|
||||
|
||||
def _login_and_get_token(client, username: str = "admin", password: str = "123456") -> str:
|
||||
"""在用例内登录并返回 token,用于 E2E 流程。"""
|
||||
r = client.post("/api/auth/login", json={"username": username, "password": password})
|
||||
assert r.status_code == 200, f"登录失败: {r.status_code} {r.text}"
|
||||
body = r.json()
|
||||
assert "token" in body
|
||||
return body["token"]
|
||||
|
||||
|
||||
def test_e2e_login_then_get_project_list(client):
|
||||
"""E2E:登录成功后获取项目列表,返回 200 且含 list、total、page、pageSize"""
|
||||
token = _login_and_get_token(client, "admin", "123456")
|
||||
r = client.post(
|
||||
"/api/projects/list",
|
||||
headers=_auth_header(token),
|
||||
json={"page": 1, "pageSize": 20},
|
||||
)
|
||||
assert r.status_code == 200
|
||||
body = r.json()
|
||||
assert "list" in body and isinstance(body["list"], list)
|
||||
assert "total" in body and isinstance(body["total"], int)
|
||||
assert body.get("page") == 1
|
||||
assert body.get("pageSize") == 20
|
||||
|
||||
|
||||
def test_e2e_login_then_create_project_then_list_includes_it(client):
|
||||
"""E2E:登录(市场部)→ 创建项目 → 获取列表,列表中包含新建项目"""
|
||||
token = _login_and_get_token(client, "market", "123456")
|
||||
project_name = "E2E流程新建项目"
|
||||
contract_code = "HT-E2E-001"
|
||||
create_r = client.post(
|
||||
"/api/projects/create",
|
||||
headers=_auth_header(token),
|
||||
json={"contract": {"contractCode": contract_code, "projectName": project_name}},
|
||||
)
|
||||
assert create_r.status_code == 201
|
||||
pid = create_r.json()["id"]
|
||||
list_r = client.post(
|
||||
"/api/projects/list",
|
||||
headers=_auth_header(token),
|
||||
json={"page": 1, "pageSize": 100},
|
||||
)
|
||||
assert list_r.status_code == 200
|
||||
items = list_r.json().get("list", [])
|
||||
ids = [p["id"] for p in items]
|
||||
assert pid in ids
|
||||
names = [p.get("projectName") for p in items if p.get("id") == pid]
|
||||
assert project_name in names or len(names) >= 1
|
||||
|
||||
|
||||
def test_e2e_login_then_create_then_detail_then_update_then_detail_reflects(client):
|
||||
"""E2E:登录 → 创建项目 → 查详情 → 修改项目 → 再查详情,详情反映修改"""
|
||||
market_token = _login_and_get_token(client, "market", "123456")
|
||||
admin_token = _login_and_get_token(client, "admin", "123456")
|
||||
create_r = client.post(
|
||||
"/api/projects/create",
|
||||
headers=_auth_header(market_token),
|
||||
json={"contract": {"contractCode": "HT-E2E-002", "projectName": "E2E修改前"}},
|
||||
)
|
||||
assert create_r.status_code == 201
|
||||
pid = create_r.json()["id"]
|
||||
detail_r = client.post(
|
||||
"/api/projects/detail",
|
||||
headers=_auth_header(admin_token),
|
||||
json={"id": pid},
|
||||
)
|
||||
assert detail_r.status_code == 200
|
||||
assert detail_r.json().get("contract", {}).get("projectName") == "E2E修改前"
|
||||
update_r = client.post(
|
||||
"/api/projects/update",
|
||||
headers=_auth_header(admin_token),
|
||||
json={"id": pid, "contract": {"projectName": "E2E修改后"}},
|
||||
)
|
||||
assert update_r.status_code == 200
|
||||
detail_r2 = client.post(
|
||||
"/api/projects/detail",
|
||||
headers=_auth_header(admin_token),
|
||||
json={"id": pid},
|
||||
)
|
||||
assert detail_r2.status_code == 200
|
||||
assert detail_r2.json().get("contract", {}).get("projectName") == "E2E修改后"
|
||||
|
||||
|
||||
def test_e2e_login_then_create_and_update_then_logs_contain_record(client):
|
||||
"""E2E:登录 → 创建项目 → 修改项目 → 获取操作日志,日志中含一条记录且含 summary"""
|
||||
market_token = _login_and_get_token(client, "market", "123456")
|
||||
admin_token = _login_and_get_token(client, "admin", "123456")
|
||||
create_r = client.post(
|
||||
"/api/projects/create",
|
||||
headers=_auth_header(market_token),
|
||||
json={"contract": {"contractCode": "HT-E2E-003", "projectName": "E2E日志测试"}},
|
||||
)
|
||||
assert create_r.status_code == 201
|
||||
pid = create_r.json()["id"]
|
||||
client.post(
|
||||
"/api/projects/update",
|
||||
headers=_auth_header(admin_token),
|
||||
json={"id": pid, "contract": {"projectName": "E2E日志已更新"}},
|
||||
)
|
||||
logs_r = client.post(
|
||||
"/api/projects/logs",
|
||||
headers=_auth_header(admin_token),
|
||||
json={"id": pid},
|
||||
)
|
||||
assert logs_r.status_code == 200
|
||||
body = logs_r.json()
|
||||
assert "list" in body and len(body["list"]) >= 1
|
||||
assert "summary" in body["list"][0]
|
||||
|
||||
Reference in New Issue
Block a user