mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
url_encoding: Refactor a encode_user_full_name_and_id
.
This refactors out a function that encode user name and user id into URL compatible format.
This commit is contained in:
@@ -74,11 +74,30 @@ def encode_user_ids(
|
||||
return direct_message_slug
|
||||
|
||||
|
||||
def encode_user_full_name_and_id(full_name: str, user_id: int, with_operator: bool = False) -> str:
|
||||
"""
|
||||
This encodes the given `full_name` and `user_id` into a
|
||||
recipient slug string that can be used to construct a
|
||||
narrow URL.
|
||||
|
||||
e.g., 9, "King Hamlet" -> "9-King-Hamlet"
|
||||
|
||||
The `with_operator` parameter decides whether to append
|
||||
the "dm" operator to the recipient slug or not.
|
||||
|
||||
e.g., "dm/9-King-Hamlet"
|
||||
"""
|
||||
encoded_user_name = re2.sub(r'[ "%\/<>`\p{C}]+', "-", full_name.strip())
|
||||
direct_message_slug = str(user_id) + "-" + encoded_user_name
|
||||
if with_operator:
|
||||
return f"dm/{direct_message_slug}"
|
||||
return direct_message_slug
|
||||
|
||||
|
||||
def personal_narrow_url(*, realm: Realm, sender: UserProfile) -> str:
|
||||
base_url = f"{realm.url}/#narrow/dm/"
|
||||
encoded_user_name = re2.sub(r'[ "%\/<>`\p{C}]+', "-", sender.full_name)
|
||||
pm_slug = str(sender.id) + "-" + encoded_user_name
|
||||
return base_url + pm_slug
|
||||
direct_message_slug = encode_user_full_name_and_id(sender.full_name, sender.id)
|
||||
return base_url + direct_message_slug
|
||||
|
||||
|
||||
def direct_message_group_narrow_url(
|
||||
|
@@ -1,5 +1,5 @@
|
||||
from zerver.lib.test_classes import ZulipTestCase
|
||||
from zerver.lib.url_encoding import encode_channel, encode_user_ids
|
||||
from zerver.lib.url_encoding import encode_channel, encode_user_full_name_and_id, encode_user_ids
|
||||
|
||||
|
||||
class URLEncodeTest(ZulipTestCase):
|
||||
@@ -24,3 +24,20 @@ class URLEncodeTest(ZulipTestCase):
|
||||
self.assertEqual(encode_user_ids([1, 2, 3], with_operator=True), "dm/1,2,3-group")
|
||||
with self.assertRaises(AssertionError):
|
||||
encode_user_ids([])
|
||||
|
||||
def test_encode_user_full_name_and_id(self) -> None:
|
||||
self.assertEqual(encode_user_full_name_and_id("King Hamlet", 9), "9-King-Hamlet")
|
||||
self.assertEqual(
|
||||
encode_user_full_name_and_id("King Hamlet", 9, with_operator=True), "dm/9-King-Hamlet"
|
||||
)
|
||||
self.assertEqual(encode_user_full_name_and_id("ZOE", 1), "1-ZOE")
|
||||
self.assertEqual(encode_user_full_name_and_id(" User Name ", 100), "100-User-Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User Name", 101), "101-User-Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User/Name", 200), "200-User-Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User%Name", 201), "201-User-Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User<Name>", 202), "202-User-Name-")
|
||||
self.assertEqual(encode_user_full_name_and_id('User"Name`', 203), "203-User-Name-")
|
||||
self.assertEqual(encode_user_full_name_and_id('User/ % < > ` " Name', 204), "204-User-Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User--Name", 205), "205-User--Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User%%Name", 206), "206-User-Name")
|
||||
self.assertEqual(encode_user_full_name_and_id("User_Name", 5), "5-User_Name")
|
||||
|
Reference in New Issue
Block a user