62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
"""The group generator has one deterministic auto-15 path."""
|
|
from __future__ import annotations
|
|
|
|
from scripts.mock_llm import MockLLM
|
|
|
|
|
|
def _headers(token: str) -> dict[str, str]:
|
|
return {"Authorization": f"Bearer {token}"}
|
|
|
|
|
|
def _setup(user_store, login):
|
|
user_store.complete_setup(
|
|
"admin",
|
|
"admin@example.com",
|
|
"admin-ready-password",
|
|
accepted_terms=True,
|
|
accepted_terms_at="2026-08-13T00:00:00Z",
|
|
)
|
|
return login("admin", "admin-ready-password")["token"]
|
|
|
|
|
|
def test_append_generation_is_rejected_and_does_not_mutate_group(client, user_store, login):
|
|
token = _setup(user_store, login)
|
|
client.application.extensions["llm"] = MockLLM()
|
|
created = client.post(
|
|
"/api/groups", json={"product": "CRM"}, headers=_headers(token)
|
|
)
|
|
gid = created.get_json()["group"]["id"]
|
|
first = client.post(f"/api/groups/{gid}/analyze", headers=_headers(token))
|
|
assert first.status_code == 200, first.get_json()
|
|
before = client.application.extensions["group_store"].get(gid)
|
|
|
|
response = client.post(
|
|
f"/api/groups/{gid}/analyze?append=true", headers=_headers(token)
|
|
)
|
|
|
|
assert response.status_code == 400
|
|
assert response.get_json() == {"error": "append mode is no longer supported"}
|
|
after = client.application.extensions["group_store"].get(gid)
|
|
assert after["personas"] == before["personas"]
|
|
assert len(after["personas"]) == 15
|
|
|
|
|
|
def test_reanalyze_replaces_with_exactly_fifteen_personas(client, user_store, login):
|
|
token = _setup(user_store, login)
|
|
client.application.extensions["llm"] = MockLLM()
|
|
created = client.post(
|
|
"/api/groups", json={"product": "CRM"}, headers=_headers(token)
|
|
)
|
|
gid = created.get_json()["group"]["id"]
|
|
assert client.post(f"/api/groups/{gid}/analyze", headers=_headers(token)).status_code == 200
|
|
first_ids = {p["id"] for p in client.application.extensions["group_store"].get(gid)["personas"]}
|
|
|
|
response = client.post(f"/api/groups/{gid}/reanalyze", headers=_headers(token))
|
|
|
|
assert response.status_code == 200, response.get_json()
|
|
personas = response.get_json()["personas"]
|
|
assert len(personas) == 15
|
|
assert len({p["id"] for p in personas}) == 15
|
|
assert {p["tier"] for p in personas} == {"A", "B", "C"}
|
|
assert {p["id"] for p in personas} == first_ids
|