Add Handbook.md benchmark tasks
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from slack_mock.server import get_channel_history, list_workspaces, post_message, search_messages
|
||||
from slack_mock.state import get_active_workspace_id, state_from_json, state_to_json
|
||||
|
||||
|
||||
def _workspace_state(message_text: str) -> dict:
|
||||
return {
|
||||
"bot_user_id": "U_MOCK_BOT",
|
||||
"users": {
|
||||
"U_MOCK_BOT": {
|
||||
"id": "U_MOCK_BOT",
|
||||
"name": "bot",
|
||||
"real_name": "Mock Bot",
|
||||
"profile": {"display_name": "bot", "status_text": "", "status_emoji": ""},
|
||||
"deleted": False,
|
||||
}
|
||||
},
|
||||
"channels": {"C1": {"id": "C1", "name": "general", "context_team_id": "T_MOCK"}},
|
||||
"messages": {"C1": [{"ts": "1700000001.000", "text": message_text, "user": "U_MOCK_BOT", "type": "message"}]},
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_workspace_selector_routes_reads_and_writes_independently() -> None:
|
||||
state_from_json(
|
||||
{
|
||||
"workspaces": {
|
||||
"default": _workspace_state("default workspace"),
|
||||
"acme": _workspace_state("acme workspace"),
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
listed = await list_workspaces()
|
||||
assert listed["ok"] is True
|
||||
assert listed["total"] == 2
|
||||
assert {workspace["workspace_id"] for workspace in listed["workspaces"]} == {"default", "acme"}
|
||||
|
||||
default_history = await get_channel_history("C1")
|
||||
acme_history = await get_channel_history("C1", workspace_id="acme")
|
||||
assert default_history["messages"][0]["text"] == "default workspace"
|
||||
assert acme_history["messages"][0]["text"] == "acme workspace"
|
||||
|
||||
posted = await post_message("C1", "acme follow-up", workspace_id="acme")
|
||||
assert posted["ok"] is True
|
||||
|
||||
exported = state_to_json()
|
||||
assert len(exported["workspaces"]["default"]["messages"]["C1"]) == 1
|
||||
assert len(exported["workspaces"]["acme"]["messages"]["C1"]) == 2
|
||||
|
||||
assert (await search_messages("acme", workspace_id="acme"))["messages"]["total"] == 2
|
||||
assert (await search_messages("acme", workspace_id="default"))["messages"]["total"] == 0
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_failed_workspace_write_does_not_mutate_other_workspaces() -> None:
|
||||
state_from_json(
|
||||
{
|
||||
"workspaces": {
|
||||
"default": _workspace_state("default workspace"),
|
||||
"acme": _workspace_state("acme workspace"),
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
before = state_to_json()
|
||||
failed = await post_message("C_DOES_NOT_EXIST", "should not post", workspace_id="acme")
|
||||
|
||||
assert failed["ok"] is False
|
||||
assert failed["error"] == "channel_not_found"
|
||||
assert state_to_json() == before
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_state_import_resets_active_workspace() -> None:
|
||||
state_from_json(
|
||||
{
|
||||
"workspaces": {
|
||||
"default": _workspace_state("default workspace"),
|
||||
"acme": _workspace_state("acme workspace"),
|
||||
}
|
||||
}
|
||||
)
|
||||
await get_channel_history("C1", workspace_id="acme")
|
||||
assert get_active_workspace_id() == "acme"
|
||||
|
||||
state_from_json({"workspaces": {"default": _workspace_state("reset default workspace")}})
|
||||
|
||||
assert get_active_workspace_id() == "default"
|
||||
assert (await get_channel_history("C1"))["messages"][0]["text"] == "reset default workspace"
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_omitted_workspace_uses_active_non_default_workspace() -> None:
|
||||
state_from_json({"workspaces": {"acme": _workspace_state("acme only workspace")}})
|
||||
|
||||
assert get_active_workspace_id() == "acme"
|
||||
assert (await get_channel_history("C1"))["messages"][0]["text"] == "acme only workspace"
|
||||
|
||||
posted = await post_message("C1", "acme follow-up")
|
||||
|
||||
assert posted["ok"] is True
|
||||
assert state_to_json()["workspaces"]["acme"]["messages"]["C1"][-1]["text"] == "acme follow-up"
|
||||
Reference in New Issue
Block a user