kink-discovery / tests /test_partner_link_api.py
Perplexed7675's picture
Sync from kink_cli (Docker Space)
6ff91d6 verified
Raw
History Blame Contribute Delete
1.89 kB
"""HTTP contract for partner link accept: profile payload matches list endpoint (UI cache sync)."""
from __future__ import annotations
import shutil
import sys
from pathlib import Path
import pytest
from fastapi.testclient import TestClient
_SEED = Path(__file__).resolve().parent.parent / "deploy/hf/seed/hf_bundled_store.db"
@pytest.fixture()
def api_client(tmp_path, monkeypatch):
assert _SEED.is_file(), f"Missing seed DB: {_SEED}"
dest = tmp_path / "partner_link_store.db"
shutil.copyfile(_SEED, dest)
monkeypatch.setenv("KINK_STORE_PATH", str(dest))
monkeypatch.setenv("KINK_SKIP_HEAVY_WARM", "1")
monkeypatch.setenv("KINK_HF_REQUIRE_FULL_CATALOG", "0")
sys.modules.pop("api", None)
import api as api_mod
api_mod._backend_impl = None
api_mod._get_backend()
return api_mod
def _headers(token: str) -> dict[str, str]:
return {"x-private-token": token}
def test_accept_partner_request_user_payload_matches_partner_groups_get(api_client) -> None:
"""Accept response embeds the same partner_groups as GET /partner-groups (requester refetch UX)."""
client = TestClient(api_client.app)
a = client.post("/users", json={}).json()
b = client.post("/users", json={}).json()
assert client.post(
f"/users/{a['id']}/partners",
headers=_headers(a["private_token"]),
json={"partner_id": b["id"]},
).status_code == 200
accept = client.post(
f"/users/{b['id']}/partner-requests/accept",
headers=_headers(b["private_token"]),
json={"from_user_id": a["id"]},
)
assert accept.status_code == 200
body = accept.json()
assert a["id"] in body.get("partners", [])
listed = client.get(
f"/users/{b['id']}/partner-groups",
headers=_headers(b["private_token"]),
).json()
assert body.get("partner_groups") == listed.get("items")