generated from kgod/ai-review-template
66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
"""Shared helpers for Builder conversation tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from test_api import BASE, active_component, event, start_manual_profile # noqa: F401
|
|
|
|
|
|
EDUCATION_IDENTITY = {
|
|
"school": "Example University",
|
|
"major": "Computer Science",
|
|
"degree": "Bachelor",
|
|
"start_date": "2021-09",
|
|
"end_date_or_present": "2025-06",
|
|
}
|
|
|
|
|
|
def create_builder_session(client: TestClient, *, job_type: str = "campus") -> tuple[str, dict[str, Any]]:
|
|
session_id, _ = start_manual_profile(client, job_type=job_type)
|
|
created = client.post(f"{BASE}/sessions/{session_id}/create", json={})
|
|
assert created.status_code == 200, created.text
|
|
body = created.json()
|
|
assert body["stage"] == "BUILDER_CONVERSATION"
|
|
return session_id, body
|
|
|
|
|
|
def select_section(client: TestClient, session_id: str, body: dict[str, Any], section: str) -> dict[str, Any]:
|
|
response = event(client, session_id, body, "select", {"value": section})
|
|
assert response.status_code == 200, response.text
|
|
return response.json()
|
|
|
|
|
|
def submit_identity(client: TestClient, session_id: str, body: dict[str, Any], values: dict[str, str]) -> dict[str, Any]:
|
|
response = event(client, session_id, body, "submit", values)
|
|
assert response.status_code == 200, response.text
|
|
return response.json()
|
|
|
|
|
|
def send_message(client: TestClient, session_id: str, content: str) -> dict[str, Any]:
|
|
response = client.post(f"{BASE}/sessions/{session_id}/messages", json={"content": content})
|
|
assert response.status_code == 200, response.text
|
|
return response.json()
|
|
|
|
|
|
def confirm_card(client: TestClient, session_id: str, body: dict[str, Any], *, use_optimized: bool = False) -> dict[str, Any]:
|
|
response = event(client, session_id, body, "confirm", {"use_optimized": use_optimized})
|
|
assert response.status_code == 200, response.text
|
|
return response.json()
|
|
|
|
|
|
def start_education(client: TestClient, session_id: str, body: dict[str, Any], *, school: str = "Example University") -> dict[str, Any]:
|
|
card = select_section(client, session_id, body, "education")
|
|
identity = {**EDUCATION_IDENTITY, "school": school}
|
|
prompt = submit_identity(client, session_id, card, identity)
|
|
assert "没有也可以直接说没有" in prompt["turn"]["content"]
|
|
return prompt
|
|
|
|
|
|
def finish_education(client: TestClient, session_id: str, body: dict[str, Any], detail: str) -> dict[str, Any]:
|
|
proposal = send_message(client, session_id, detail)
|
|
assert active_component(proposal)["data"]["component"] == "experience_confirm_card"
|
|
return proposal
|