| from app.mentions import extract_recipients |
|
|
|
|
| REG = {"agent-1", "agent-2", "agent-3"} |
|
|
|
|
| def extract(body="", refs=None, author="author", registered=REG, cap=10): |
| return extract_recipients( |
| body=body, refs=refs, author=author, registered=registered, cap=cap |
| ) |
|
|
|
|
| def test_mentions_in_order_of_appearance(): |
| assert extract("ping @agent-2 then @agent-1") == ["agent-2", "agent-1"] |
|
|
|
|
| def test_email_addresses_mention_nobody(): |
| assert extract("mail me at carlos@agent-1 or x.y@agent-2") == [] |
|
|
|
|
| def test_punctuation_boundaries(): |
| assert extract("(@agent-1), @agent-2. and\n@agent-3!") == [ |
| "agent-1", |
| "agent-2", |
| "agent-3", |
| ] |
|
|
|
|
| def test_author_never_a_recipient(): |
| assert extract("@agent-1 talking to myself", author="agent-1") == [] |
|
|
|
|
| def test_unregistered_dropped(): |
| assert extract("@nobody @all @here @agent-1") == ["agent-1"] |
|
|
|
|
| def test_deduped(): |
| assert extract("@agent-1 again @agent-1") == ["agent-1"] |
|
|
|
|
| def test_cap_first_in_appearance_order(): |
| assert extract("@agent-1 @agent-2 @agent-3", cap=2) == ["agent-1", "agent-2"] |
|
|
|
|
| def test_uppercase_is_not_a_mention(): |
| assert extract("@Agent-1 looks wrong") == [] |
|
|
|
|
| def test_human_handles_deliver_without_registration(): |
| assert extract("thanks @human-cmpatino!", registered=set()) == ["human-cmpatino"] |
|
|
|
|
| def test_bare_human_routes_nowhere(): |
| assert extract("any @human around?", registered=set()) == [] |
|
|
|
|
| def test_refs_single_string(): |
| assert extract(refs="20260601-120000-000_agent-2.md") == ["agent-2"] |
|
|
|
|
| def test_refs_comma_separated_and_list(): |
| assert extract(refs="20260601-120000-000_agent-2.md, 20260602-000000-000_agent-1.md") == [ |
| "agent-2", |
| "agent-1", |
| ] |
| assert extract(refs=["20260601-120000-000_agent-3.md"]) == ["agent-3"] |
|
|
|
|
| def test_refs_non_filename_tokens_ignored(): |
| assert extract(refs="agent-2") == [] |
| assert extract(refs=42) == [] |
|
|
|
|
| def test_refs_author_with_invalid_charset_is_dropped(): |
| |
| |
| |
| assert extract(refs="20260608-212040_human-osanseviero_bae622f2.md", registered=set()) == [] |
|
|
|
|
| def test_valid_human_handle_from_refs_delivers(): |
| assert extract( |
| refs="20260101-000000-000_human-osanseviero.md", registered=set() |
| ) == ["human-osanseviero"] |
|
|
|
|
| def test_mentions_then_refs_union(): |
| assert extract("@agent-3 builds on this", refs="20260601-120000-000_agent-1.md") == [ |
| "agent-3", |
| "agent-1", |
| ] |
|
|