mirror of
https://github.com/block/buzz.git
synced 2026-11-05 00:41:28 +00:00
🤖 ## Summary The mobile app's @mention chooser now follows the same rules as the desktop app (buzz-app). The same typed text finds the same people in the same order on both apps, and sending works the same way. - **Same matching and order.** Mobile uses the shared mention rules and runs their shared test cases. A multi-word search such as `@Mary J` still searches the community directory, so it can find "Mary Jane" even when she is not in the channel. - **DMs can mention people outside the DM.** The chooser marks them "not in DM". Nobody can be added to a DM, so the message sends without a prompt. Outside people go out as references, so they are not notified. This matches buzz-app #510. - **Channels still ask.** In a stream or forum, mentioning someone outside the channel asks "Invite" or "Do nothing" before the message sends. A channel with no type tag counts as a stream. - **Sessions do not search the directory.** Only session members appear. - **A failed directory search stays visible.** The chooser shows the error and a Retry button. Before, it closed. - **Search results stay in their community.** If you switch communities while a search runs, its people and its error do not show in the new community. The search starts again there. - **A failed send check keeps the draft.** Before a message with a mention sends, the app checks who is in the channel. If that check fails, the message stays in the compose bar and a notice offers Retry. Before, nothing was sent and nothing was shown. - **Invite stays in its community.** If you switch communities while the "Invite" question is open, Invite adds nobody. ### Screenshots The real compose bar widget, rendered by Flutter's test renderer with the app's fonts and theme. The data is sample data. These are not device captures. | DM: outside person is "not in DM" | Stream: outside person is "not in channel" | |---|---| | <img width="320" alt="DM chooser" src="https://github.com/user-attachments/assets/0e884518-2386-4cd1-9f19-16661aaa194e" /> | <img width="320" alt="Stream chooser" src="https://github.com/user-attachments/assets/5395e4e1-032e-459b-98c6-0126c060c4d9" /> | | Stream: send asks first | Session: members only | Search failed: Retry | |---|---|---| | <img width="260" alt="Stream ask on send" src="https://github.com/user-attachments/assets/2b988257-3c6a-445d-acfa-fca47b9752fe" /> | <img width="260" alt="Session chooser" src="https://github.com/user-attachments/assets/e193551f-f5bf-41d9-aa29-bc8665c643f9" /> | <img width="260" alt="Search failed with Retry" src="https://github.com/user-attachments/assets/e8c4b9bb-067e-4fe9-9fdd-4e5691bc66be" /> | ### Details - `mobile/lib/shared/mentions/mention_rules.dart` holds the rules: query syntax, match tiers, sort order, Space selection of an exact unique name, stable rows while results arrive, and `p` and `mention` tags. A `p` tag notifies the person. A `mention` tag is a reference and does not notify. - `mobile/test/shared/mentions/mention-rules.fixtures.json` is an exact copy of the buzz-app fixture file. `mention_rules_test.dart` runs every case. - Known difference: desktop gives the directory to a channel with an unknown explicit type (not stream, forum, DM or session). Mobile does not. No such type exists today. ### Related issue None found. Desktop counterpart: block/buzz-app#510. #7513 also edits `send_message_provider.dart` and may conflict. ### Testing `just mobile-install mobile-check mobile-test` passes: analyze clean, 2998 tests pass on `49c44653` (before rebase). The pre-push hook ran `just mobile-check && just mobile-test` again on the rebased head `de1ca080` and passed. Each review fix was mutation-checked: removing the fix makes its new test fail. --------- Signed-off-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz> Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
1259 lines
38 KiB
JSON
1259 lines
38 KiB
JSON
{
|
||
"$comment": "Mention rules v1: semantic inputs, no signed events. Spec: README.md. Keys are lowercase 64-hex. Choice defaults: label = name, aliases = [name], agent/owned/managed = false. history maps key to recency (higher is more recent); presence maps key to online/away (missing is unknown). ranking.expected is the full ordered key list; space.expected is a key or null. Expected outputs are literal, not generated by the code under test.",
|
||
"version": 1,
|
||
"ranking": [
|
||
{
|
||
"name": "match_tiers_within_members",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "A Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey Bee",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||
"name": "Honey",
|
||
"member": false,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||
"name": "A Honeybee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
|
||
]
|
||
},
|
||
{
|
||
"name": "no_substring_inside_a_word",
|
||
"query": "oney",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "A Honey",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": []
|
||
},
|
||
{
|
||
"name": "members_before_better_matching_outsiders",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": false
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey Bee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "empty_query_lists_all_by_group_then_label",
|
||
"query": "",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Zoe",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "adam",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Bob",
|
||
"member": false
|
||
}
|
||
],
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
]
|
||
},
|
||
{
|
||
"name": "query_is_trimmed_and_case_insensitive",
|
||
"query": " HONEY ",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey Bee",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "honey",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "public_keys_are_not_searchable",
|
||
"query": "abcdef12",
|
||
"choices": [
|
||
{
|
||
"pubkey": "abcdef12abcdef12abcdef12abcdef12abcdef12abcdef12abcdef12abcdef12",
|
||
"name": "One",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": []
|
||
},
|
||
{
|
||
"name": "unnamed_identity_matches_only_the_empty_query",
|
||
"query": "aaaa",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "aaaaaaaaaaaa",
|
||
"aliases": [],
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": []
|
||
},
|
||
{
|
||
"name": "unnamed_identity_is_listed_for_the_empty_query",
|
||
"query": "",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "aaaaaaaaaaaa",
|
||
"aliases": [],
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "visible_label_before_alias_match",
|
||
"query": "Legacy",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"aliases": ["Honey", "Legacy Bee"],
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Another name",
|
||
"label": "Visible Legacy Bee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "alias_matches_when_visible_label_does_not",
|
||
"query": "Legacy Bee",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"aliases": ["Honey", "Legacy Bee"],
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Another name",
|
||
"label": "Visible Legacy Bee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "owner_qualified_label_is_searchable",
|
||
"query": "Wes’s",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"aliases": ["Honey"],
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "owned_agent_first_on_equal_match_before_history_managed_presence",
|
||
"query": "riz",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Rizz",
|
||
"member": true,
|
||
"agent": true,
|
||
"managed": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Rizz",
|
||
"member": true,
|
||
"agent": true,
|
||
"owned": true
|
||
}
|
||
],
|
||
"history": {
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": 10
|
||
},
|
||
"presence": {
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": "online"
|
||
},
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "owned_agent_before_people_and_other_agents",
|
||
"query": "",
|
||
"choices": [
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Mary",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Alpha",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Zed",
|
||
"member": true,
|
||
"agent": true,
|
||
"owned": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
]
|
||
},
|
||
{
|
||
"name": "same_name_agents_stay_one_block_at_its_first_label",
|
||
"query": "",
|
||
"choices": [
|
||
{
|
||
"pubkey": "1111111111111111111111111111111111111111111111111111111111111111",
|
||
"name": "Honey · b",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "2222222222222222222222222222222222222222222222222222222222222222",
|
||
"name": "Honey Bee",
|
||
"label": "Honey · c",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||
"name": "Honey",
|
||
"label": "Honey · aa",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"member": true,
|
||
"agent": true,
|
||
"managed": true
|
||
},
|
||
{
|
||
"pubkey": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||
"name": "Honey",
|
||
"label": "Honey · zz",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"history": {
|
||
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd": 2
|
||
},
|
||
"presence": {
|
||
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff": "online"
|
||
},
|
||
"expected": [
|
||
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||
"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||
"1111111111111111111111111111111111111111111111111111111111111111",
|
||
"2222222222222222222222222222222222222222222222222222222222222222"
|
||
]
|
||
},
|
||
{
|
||
"name": "person_before_agent_block_on_equal_label",
|
||
"query": "",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Sam",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Sam",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "ownership_does_not_override_membership",
|
||
"query": "riz",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Rizz",
|
||
"member": true,
|
||
"agent": true,
|
||
"managed": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Rizz",
|
||
"member": false,
|
||
"agent": true,
|
||
"owned": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
},
|
||
{
|
||
"name": "ownership_does_not_override_match_quality",
|
||
"query": "Rizz",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Rizz",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Rizz Helper",
|
||
"member": true,
|
||
"agent": true,
|
||
"owned": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
},
|
||
{
|
||
"name": "visible_prefix_beats_owned_word_prefix",
|
||
"query": "riz",
|
||
"choices": [
|
||
{
|
||
"pubkey": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||
"name": "Rizz",
|
||
"label": "tho’s Rizz",
|
||
"member": true,
|
||
"agent": true,
|
||
"owned": true
|
||
},
|
||
{
|
||
"pubkey": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||
"name": "Rizz",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"
|
||
]
|
||
},
|
||
{
|
||
"name": "history_breaks_same_name_agent_ties",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Honey · aaaa",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"label": "Honey · bbbb",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"history": {
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": 5
|
||
},
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "managed_then_presence_for_same_name_agents",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Honey · aaaa",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"label": "Honey · bbbb",
|
||
"member": true,
|
||
"agent": true,
|
||
"managed": true
|
||
},
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Honey",
|
||
"label": "Honey · cccc",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"presence": {
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc": "online",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": "away"
|
||
},
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "away_before_unknown_presence",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Honey · aaaa",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"label": "Honey · bbbb",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"presence": {
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": "away"
|
||
},
|
||
"expected": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
},
|
||
{
|
||
"name": "history_ignored_for_different_names",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey Ant",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey Bee",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"history": {
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": 9
|
||
},
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
},
|
||
{
|
||
"name": "history_ignored_for_humans",
|
||
"query": "honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Honey · aaaa",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"label": "Honey · bbbb",
|
||
"member": true
|
||
}
|
||
],
|
||
"history": {
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb": 9
|
||
},
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
},
|
||
{
|
||
"name": "base_name_quality_then_full_displayed_label",
|
||
"query": "fizz",
|
||
"choices": [
|
||
{
|
||
"pubkey": "3333333333333333333333333333333333333333333333333333333333333333",
|
||
"name": "Fast Fizz",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
|
||
"name": "Fizz",
|
||
"label": "baxen’s Fizz · oncp",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "4444444444444444444444444444444444444444444444444444444444444444",
|
||
"name": "Fizz",
|
||
"label": "baxen’s Fizz · s03j",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "5555555555555555555555555555555555555555555555555555555555555555",
|
||
"name": "Fizz",
|
||
"label": "Kenny Lopez’s Fizz",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Fizz",
|
||
"label": "baxen’s Fizz · 4prr",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"name": "Fizz",
|
||
"label": "baxen’s Fizz · 06pl",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"0000000000000000000000000000000000000000000000000000000000000000",
|
||
"4444444444444444444444444444444444444444444444444444444444444444",
|
||
"5555555555555555555555555555555555555555555555555555555555555555",
|
||
"3333333333333333333333333333333333333333333333333333333333333333"
|
||
]
|
||
},
|
||
{
|
||
"name": "alias_base_quality_breaks_visible_tie",
|
||
"query": "fizz",
|
||
"choices": [
|
||
{
|
||
"pubkey": "3333333333333333333333333333333333333333333333333333333333333333",
|
||
"name": "Fast Fizz",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||
"name": "Another name",
|
||
"label": "Other Fizz",
|
||
"aliases": ["Another name", "Fizz"],
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
||
"3333333333333333333333333333333333333333333333333333333333333333"
|
||
]
|
||
},
|
||
{
|
||
"name": "key_is_the_final_tie_break",
|
||
"query": "sam",
|
||
"choices": [
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Sam",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Sam",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
}
|
||
],
|
||
"space": [
|
||
{
|
||
"name": "unique_exact_name",
|
||
"query": "Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honeybee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
},
|
||
{
|
||
"name": "case_insensitive_and_trimmed",
|
||
"query": " honey ",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
},
|
||
{
|
||
"name": "namesakes_do_not_select",
|
||
"query": "Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "longer_name_with_space_blocks",
|
||
"query": "Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey Bee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "longer_label_with_space_blocks",
|
||
"query": "Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Other",
|
||
"label": "Honey Bee",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "partial_name_does_not_select",
|
||
"query": "Hon",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "empty_query_does_not_select",
|
||
"query": "",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "qualified_label_selects_its_identity",
|
||
"query": "Wes’s Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
},
|
||
{
|
||
"name": "shared_base_name_is_ambiguous_even_with_distinct_labels",
|
||
"query": "Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true,
|
||
"agent": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "known_alias_selects",
|
||
"query": "legacy bee",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"label": "Wes’s Honey",
|
||
"aliases": ["Honey", "Legacy Bee"],
|
||
"member": true,
|
||
"agent": true
|
||
}
|
||
],
|
||
"expected": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
},
|
||
{
|
||
"name": "unnamed_fallback_label_does_not_select",
|
||
"query": "aaaaaaaaaaaa",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "aaaaaaaaaaaa",
|
||
"aliases": [],
|
||
"member": true
|
||
}
|
||
],
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "membership_does_not_break_ambiguity",
|
||
"query": "Honey",
|
||
"choices": [
|
||
{
|
||
"pubkey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"name": "Honey",
|
||
"member": true
|
||
},
|
||
{
|
||
"pubkey": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"name": "Honey",
|
||
"member": false
|
||
}
|
||
],
|
||
"expected": null
|
||
}
|
||
],
|
||
"query": [
|
||
{
|
||
"name": "at_start",
|
||
"text": "@Hon",
|
||
"caret": 4,
|
||
"expected": {
|
||
"start": 0,
|
||
"end": 4,
|
||
"query": "Hon"
|
||
}
|
||
},
|
||
{
|
||
"name": "after_space",
|
||
"text": "hi @Ho",
|
||
"caret": 6,
|
||
"expected": {
|
||
"start": 3,
|
||
"end": 6,
|
||
"query": "Ho"
|
||
}
|
||
},
|
||
{
|
||
"name": "after_open_paren",
|
||
"text": "(@Ho",
|
||
"caret": 4,
|
||
"expected": {
|
||
"start": 1,
|
||
"end": 4,
|
||
"query": "Ho"
|
||
}
|
||
},
|
||
{
|
||
"name": "after_newline",
|
||
"text": "@x\n@y",
|
||
"caret": 5,
|
||
"expected": {
|
||
"start": 3,
|
||
"end": 5,
|
||
"query": "y"
|
||
}
|
||
},
|
||
{
|
||
"name": "empty_query",
|
||
"text": "hi @",
|
||
"caret": 4,
|
||
"expected": {
|
||
"start": 3,
|
||
"end": 4,
|
||
"query": ""
|
||
}
|
||
},
|
||
{
|
||
"name": "spaces_allowed_in_query",
|
||
"text": "@Honey Bee",
|
||
"caret": 10,
|
||
"expected": {
|
||
"start": 0,
|
||
"end": 10,
|
||
"query": "Honey Bee"
|
||
}
|
||
},
|
||
{
|
||
"name": "inside_a_word_is_not_a_mention",
|
||
"text": "email@x",
|
||
"caret": 7,
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "second_at_without_boundary",
|
||
"text": "@a@b",
|
||
"caret": 4,
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "tab_ends_the_query",
|
||
"text": "@a\tb",
|
||
"caret": 4,
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "caret_before_text_start",
|
||
"text": "@a",
|
||
"caret": -1,
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "caret_after_text_end",
|
||
"text": "@a",
|
||
"caret": 3,
|
||
"expected": null
|
||
},
|
||
{
|
||
"name": "caret_before_the_at",
|
||
"text": "hi @Ho",
|
||
"caret": 2,
|
||
"expected": null
|
||
}
|
||
],
|
||
"admission": [
|
||
{
|
||
"name": "single_word_always_admitted",
|
||
"query": "Hon",
|
||
"names": [],
|
||
"expected": true
|
||
},
|
||
{
|
||
"name": "multi_word_prefix_of_a_name",
|
||
"query": "Honey B",
|
||
"names": ["Honey Bee"],
|
||
"expected": true
|
||
},
|
||
{
|
||
"name": "multi_word_case_insensitive",
|
||
"query": "honey b",
|
||
"names": ["Honey Bee"],
|
||
"expected": true
|
||
},
|
||
{
|
||
"name": "multi_word_without_a_name",
|
||
"query": "Foo bar",
|
||
"names": ["Honey"],
|
||
"expected": false
|
||
},
|
||
{
|
||
"name": "trailing_space_after_complete_name_ends",
|
||
"query": "Honey ",
|
||
"names": ["Honey"],
|
||
"expected": false
|
||
},
|
||
{
|
||
"name": "trailing_space_before_longer_name_continues",
|
||
"query": "Honey ",
|
||
"names": ["Honey Bee"],
|
||
"expected": true
|
||
}
|
||
],
|
||
"tags": {
|
||
"write": [
|
||
{
|
||
"name": "recipients_notify_references_do_not",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
],
|
||
"recipients": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"references": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
],
|
||
"expected": {
|
||
"tags": [
|
||
[
|
||
"p",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
[
|
||
"mention",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
]
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"name": "duplicates_are_removed",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"recipients": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"references": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
],
|
||
"expected": {
|
||
"tags": [
|
||
[
|
||
"p",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
[
|
||
"mention",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
]
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"name": "no_mentions",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"recipients": [],
|
||
"references": [],
|
||
"expected": {
|
||
"tags": []
|
||
}
|
||
},
|
||
{
|
||
"name": "recipient_must_be_a_member",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"recipients": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
],
|
||
"references": [],
|
||
"expected": {
|
||
"error": "not_member"
|
||
}
|
||
},
|
||
{
|
||
"name": "reference_must_be_a_valid_key",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"recipients": [],
|
||
"references": ["invalid"],
|
||
"expected": {
|
||
"error": "invalid"
|
||
}
|
||
},
|
||
{
|
||
"name": "uppercase_reference_key_is_invalid",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"recipients": [],
|
||
"references": [
|
||
"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
|
||
],
|
||
"expected": {
|
||
"error": "invalid"
|
||
}
|
||
},
|
||
{
|
||
"name": "at_most_32_references",
|
||
"members": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"recipients": [],
|
||
"references": [
|
||
"0000000000000000000000000000000000000000000000000000000000000001",
|
||
"0000000000000000000000000000000000000000000000000000000000000002",
|
||
"0000000000000000000000000000000000000000000000000000000000000003",
|
||
"0000000000000000000000000000000000000000000000000000000000000004",
|
||
"0000000000000000000000000000000000000000000000000000000000000005",
|
||
"0000000000000000000000000000000000000000000000000000000000000006",
|
||
"0000000000000000000000000000000000000000000000000000000000000007",
|
||
"0000000000000000000000000000000000000000000000000000000000000008",
|
||
"0000000000000000000000000000000000000000000000000000000000000009",
|
||
"000000000000000000000000000000000000000000000000000000000000000a",
|
||
"000000000000000000000000000000000000000000000000000000000000000b",
|
||
"000000000000000000000000000000000000000000000000000000000000000c",
|
||
"000000000000000000000000000000000000000000000000000000000000000d",
|
||
"000000000000000000000000000000000000000000000000000000000000000e",
|
||
"000000000000000000000000000000000000000000000000000000000000000f",
|
||
"0000000000000000000000000000000000000000000000000000000000000010",
|
||
"0000000000000000000000000000000000000000000000000000000000000011",
|
||
"0000000000000000000000000000000000000000000000000000000000000012",
|
||
"0000000000000000000000000000000000000000000000000000000000000013",
|
||
"0000000000000000000000000000000000000000000000000000000000000014",
|
||
"0000000000000000000000000000000000000000000000000000000000000015",
|
||
"0000000000000000000000000000000000000000000000000000000000000016",
|
||
"0000000000000000000000000000000000000000000000000000000000000017",
|
||
"0000000000000000000000000000000000000000000000000000000000000018",
|
||
"0000000000000000000000000000000000000000000000000000000000000019",
|
||
"000000000000000000000000000000000000000000000000000000000000001a",
|
||
"000000000000000000000000000000000000000000000000000000000000001b",
|
||
"000000000000000000000000000000000000000000000000000000000000001c",
|
||
"000000000000000000000000000000000000000000000000000000000000001d",
|
||
"000000000000000000000000000000000000000000000000000000000000001e",
|
||
"000000000000000000000000000000000000000000000000000000000000001f",
|
||
"0000000000000000000000000000000000000000000000000000000000000020",
|
||
"0000000000000000000000000000000000000000000000000000000000000021"
|
||
],
|
||
"expected": {
|
||
"error": "too_many"
|
||
}
|
||
}
|
||
],
|
||
"read": [
|
||
{
|
||
"name": "two_field_mention_is_a_reference",
|
||
"tags": [
|
||
[
|
||
"mention",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
],
|
||
"expected": {
|
||
"mentions": [],
|
||
"references": [
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"name": "p_is_an_addressed_mention",
|
||
"tags": [
|
||
[
|
||
"p",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
],
|
||
"expected": {
|
||
"mentions": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"references": []
|
||
}
|
||
},
|
||
{
|
||
"name": "references_are_deduplicated_in_order",
|
||
"tags": [
|
||
[
|
||
"mention",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
],
|
||
[
|
||
"mention",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
],
|
||
[
|
||
"mention",
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
||
]
|
||
],
|
||
"expected": {
|
||
"mentions": [],
|
||
"references": [
|
||
"cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"name": "three_field_mention_is_not_a_reference",
|
||
"tags": [
|
||
[
|
||
"mention",
|
||
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||
"agent-address"
|
||
]
|
||
],
|
||
"expected": {
|
||
"mentions": [],
|
||
"references": []
|
||
}
|
||
},
|
||
{
|
||
"name": "invalid_keys_are_ignored",
|
||
"tags": [
|
||
["mention", "invalid"],
|
||
[
|
||
"mention",
|
||
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
|
||
],
|
||
["p", "invalid"]
|
||
],
|
||
"expected": {
|
||
"mentions": [],
|
||
"references": []
|
||
}
|
||
},
|
||
{
|
||
"name": "same_key_in_both_lists",
|
||
"tags": [
|
||
[
|
||
"p",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
[
|
||
"mention",
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
],
|
||
"expected": {
|
||
"mentions": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
],
|
||
"references": [
|
||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
||
]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|