large-bucket-sync / tests /test_inbox_api.py
lvwerra's picture
lvwerra HF Staff
Upload folder using huggingface_hub
2592ab2 verified
Raw
History Blame Contribute Delete
4.39 kB
from fakes import seed_agent, seed_message
def test_raw_post_fans_out_to_mentions_and_humans(env):
seed_agent(env.hub, "agent-1")
seed_agent(env.hub, "agent-2")
r = env.client.post(
"/v1/messages",
json={"agent_id": "agent-1", "body": "hi @agent-2, @human-cmpatino and @nobody"},
)
assert r.status_code == 201
data = r.json()
assert data["mentions_delivered"] == ["agent-2", "human-cmpatino"]
central = env.hub.buckets[env.settings.central_bucket]
filename = data["filename"]
board = central[f"message_board/{filename}"]
assert central[f"inbox/agent-2/{filename}"] == board # byte-identical
assert central[f"inbox/human-cmpatino/{filename}"] == board
assert f"inbox/nobody/{filename}" not in central
# board + both copies landed in ONE batch write
assert env.hub.batch_writes[-1] == [
f"message_board/{filename}",
f"inbox/agent-2/{filename}",
f"inbox/human-cmpatino/{filename}",
]
def test_inbox_read_after_write_and_expand(env):
seed_agent(env.hub, "agent-1")
seed_agent(env.hub, "agent-2")
r = env.client.post(
"/v1/messages", json={"agent_id": "agent-1", "body": "ping @agent-2"}
)
filename = r.json()["filename"]
data = env.client.get("/v1/inbox/agent-2?expand=true").json()
assert data["count"] == 1 and data["matched"] == 1
assert data["items"][0]["filename"] == filename
assert data["items"][0]["frontmatter"]["agent"] == "agent-1"
# author filter uses the copied message's author
assert env.client.get("/v1/inbox/agent-2?agent=agent-1").json()["matched"] == 1
assert env.client.get("/v1/inbox/agent-2?agent=agent-2").json()["matched"] == 0
def test_refs_authors_get_a_copy(env):
seed_agent(env.hub, "agent-1")
seed_agent(env.hub, "agent-2")
seed_message(env.hub, "20260601-100000-000", "agent-2", "earlier work")
r = env.client.post(
"/v1/messages",
json={
"agent_id": "agent-1",
"body": "building on this",
"refs": "20260601-100000-000_agent-2.md",
},
)
assert r.json()["mentions_delivered"] == ["agent-2"]
assert env.client.get("/v1/inbox/agent-2").json()["count"] == 1
def test_self_mention_is_not_delivered(env):
seed_agent(env.hub, "agent-1")
r = env.client.post(
"/v1/messages", json={"agent_id": "agent-1", "body": "note to @agent-1"}
)
assert r.json()["mentions_delivered"] == []
def test_fanout_cap(make_env):
env = make_env(MENTION_FANOUT_CAP=2)
seed_agent(env.hub, "agent-1")
for i in range(2, 6):
seed_agent(env.hub, f"agent-{i}")
r = env.client.post(
"/v1/messages",
json={"agent_id": "agent-1", "body": "@agent-2 @agent-3 @agent-4 @agent-5"},
)
assert r.json()["mentions_delivered"] == ["agent-2", "agent-3"]
def test_bucket_source_variant_fans_out(env):
seed_agent(env.hub, "agent-1")
seed_agent(env.hub, "agent-2")
env.hub.seed(
"drafts/plan.md",
"---\ntype: agent\n---\nlong-form plan, cc @agent-2\n",
bucket="test-org/test-agent-1",
)
r = env.client.post(
"/v1/messages",
json={"source": "hf://buckets/test-org/test-agent-1/drafts/plan.md"},
)
assert r.status_code == 201
assert r.json()["via"] == "bucket"
assert r.json()["mentions_delivered"] == ["agent-2"]
def test_human_inbox_is_readable_without_registration(env):
assert env.client.get("/v1/inbox/human-cmpatino").json()["count"] == 0
def test_unregistered_agent_inbox_404s(env):
r = env.client.get("/v1/inbox/ghost")
assert r.status_code == 404
assert r.json()["error"]["code"] == "NOT_REGISTERED"
def test_inbox_since_high_water_mark_polling(env):
seed_agent(env.hub, "agent-1")
seed_agent(env.hub, "agent-2")
env.client.post("/v1/messages", json={"agent_id": "agent-1", "body": "old @agent-2"})
first = env.client.get("/v1/inbox/agent-2?limit=1").json()
high_water = first["items"][0]
env.client.post("/v1/messages", json={"agent_id": "agent-1", "body": "new @agent-2"})
fresh = env.client.get(
f"/v1/inbox/agent-2?expand=true&after={high_water}"
).json()
assert [m["body"].strip() for m in fresh["items"]] == ["new @agent-2"]
# `matched` counts filter matches; the cursor only trims the page
assert fresh["matched"] == 2