Files
upstream-zulip/zerver/tests/test_topic_link_util.py
upstream-mirror 64898b2c79
Some checks failed
Code scanning / CodeQL (push) Failing after 15s
Zulip production suite / Ubuntu 22.04 production build (push) Failing after 26s
Zulip production suite / Debian 12 production install with custom db name and user (push) Has been skipped
Zulip production suite / Ubuntu 22.04 production install and PostgreSQL upgrade with pgroonga (push) Has been skipped
Zulip production suite / Ubuntu 24.04 production install (push) Has been skipped
Zulip production suite / Ubuntu 26.04 production install (push) Has been skipped
Zulip production suite / Debian 13 production install (push) Has been skipped
Zulip production suite / 7.0 Version Upgrade (push) Has been skipped
Zulip production suite / 8.0 Version Upgrade (push) Has been skipped
Zulip production suite / 6.0 Version Upgrade (push) Has been skipped
Zulip production suite / 10.0 Version Upgrade (push) Has been skipped
Zulip production suite / 9.0 Version Upgrade (push) Has been skipped
Zulip production suite / 12.0 Version Upgrade (push) Has been skipped
Zulip production suite / 11.0 Version Upgrade (push) Has been skipped
GitHub Actions Security Analysis with zizmor / zizmor (push) Failing after 3s
Zulip CI / Debian 12 (Python 3.11, backend + documentation) (push) Failing after 26s
Zulip CI / Ubuntu 22.04 (Python 3.10, backend + frontend) (push) Failing after 3s
Zulip CI / Ubuntu 24.04 (Python 3.12, backend) (push) Failing after 25s
Zulip CI / Ubuntu 26.04 (Python 3.14, backend) (push) Failing after 25s
Zulip CI / Debian 13 (Python 3.13, backend) (push) Failing after 28s
Zulip production suite / Required jobs (push) Has been cancelled
Zulip CI / Required jobs (push) Has been cancelled
API Documentation Update Check / check-feature-level-updated (push) Has been cancelled
API Documentation Update Check / notify-if-api-docs-changed (push) Has been cancelled
snapshot of https://github.com/zulip/zulip.git @ 48c69911c7dd4e03b20552eb3bd77ad8151c1357 (2026-09-15)
2026-09-15 15:05:30 +05:00

102 lines
4.4 KiB
Python

from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.topic_link_util import (
get_message_link_syntax,
get_stream_link_syntax,
get_stream_topic_link_syntax,
)
class TestTopicLinkUtil(ZulipTestCase):
def test_stream_link_syntax(self) -> None:
sweden_id = self.make_stream("Sweden").id
money_id = self.make_stream("$$MONEY$$").id
md_id = self.make_stream("Markdown [md]").id
self.assertEqual(get_stream_link_syntax(sweden_id, "Sweden"), "#**Sweden**")
self.assertEqual(
get_stream_link_syntax(money_id, "$$MONEY$$"),
f"[#$$MONEY$$](#narrow/channel/{money_id}-.24.24MONEY.24.24)",
)
self.assertEqual(
get_stream_link_syntax(md_id, "Markdown [md]"),
f"[#Markdown [md]](#narrow/channel/{md_id}-Markdown-.5Bmd.5D)",
)
def test_stream_topic_link_syntax(self) -> None:
sweden_id = self.make_stream("Sweden").id
money_id = self.make_stream("$$MONEY$$").id
denmark_id = self.get_stream_id("Denmark")
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "topic"), "#**Sweden>topic**"
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "test `test` test"),
f"[#Sweden > test `test` test](#narrow/channel/{sweden_id}-Sweden/topic/test.20.60test.60.20test)",
)
self.assertEqual(
get_stream_topic_link_syntax(denmark_id, "Denmark", "test `test` test`s"),
f"[#Denmark > test `test` test`s](#narrow/channel/{denmark_id}-Denmark/topic/test.20.60test.60.20test.60s)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "error due to *"),
f"[#Sweden > error due to *](#narrow/channel/{sweden_id}-Sweden/topic/error.20due.20to.20.2A)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "*asterisk"),
f"[#Sweden > *asterisk](#narrow/channel/{sweden_id}-Sweden/topic/.2Aasterisk)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "greaterthan>"),
f"[#Sweden > greaterthan>](#narrow/channel/{sweden_id}-Sweden/topic/greaterthan.3E)",
)
self.assertEqual(
get_stream_topic_link_syntax(money_id, "$$MONEY$$", "dollar"),
f"[#$$MONEY$$ > dollar](#narrow/channel/{money_id}-.24.24MONEY.24.24/topic/dollar)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "swe$$dish"),
f"[#Sweden > swe$$dish](#narrow/channel/{sweden_id}-Sweden/topic/swe.24.24dish)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "&ab"),
f"[#Sweden > &ab](#narrow/channel/{sweden_id}-Sweden/topic/.26ab)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "&ab]"),
f"[#Sweden > &ab]](#narrow/channel/{sweden_id}-Sweden/topic/.26ab.5D)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", "&a[b"),
f"[#Sweden > &a[b](#narrow/channel/{sweden_id}-Sweden/topic/.26a.5Bb)",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sweden", ""),
"#**Sweden>**",
)
self.assertEqual(
get_stream_topic_link_syntax(sweden_id, "Sw*den", ""),
f"[#Sw*den > general chat](#narrow/channel/{sweden_id}-Sw.2Aden/topic/)",
)
def test_message_link_syntax(self) -> None:
sweden_id = self.make_stream("Sweden").id
self.assertEqual(
get_message_link_syntax(sweden_id, "Sweden", "topic", 123),
"#**Sweden>topic@123**",
)
self.assertEqual(
get_message_link_syntax(sweden_id, "Sweden", "", 123),
"#**Sweden>@123**",
)
self.assertEqual(
get_message_link_syntax(sweden_id, "Sw*den", "topic", 123),
f"[#Sw*den > topic @ 💬](#narrow/channel/{sweden_id}-Sw.2Aden/topic/topic/near/123)",
)
self.assertEqual(
get_message_link_syntax(sweden_id, "Sw*den", "", 123),
f"[#Sw*den > general chat @ 💬](#narrow/channel/{sweden_id}-Sw.2Aden/topic//near/123)",
)