Files
zulip/zerver/tests/test_url_decoding.py
PieterCK 3773ba10e1 url_decoding: Add parse_narrow_url.
This adds the Python copy of `hash_util.parse_narrow`. In the web app,
it will mainly be used in the import process later on. So, although it
has the same purpose as its frontend twin, there are differences:

- This doesn't convert a user-id-slug into a list of user emails. It
will instead parse it into a list of user IDs, as that is the preferred
form for those kinds of operators. It will also help in later operations
to remap the object IDs during import.

- To the same effect as the first point, operands can be an actual list
or int instead of a list or int as a string (e.g., "12,14,15" or "93").

- It has fewer validations than its frontend counterpart. It doesn't
look up the parsed object IDs for validity. This is partly because of
its main use case in import.
2025-02-24 15:37:40 -08:00

34 lines
1.3 KiB
Python

import orjson
from zerver.lib.narrow_helpers import NarrowTerm
from zerver.lib.test_classes import ZulipTestCase
from zerver.lib.url_decoding import is_same_server_message_link, parse_narrow_url
class URLDecodeTest(ZulipTestCase):
def test_is_same_server_message_link(self) -> None:
tests = orjson.loads(self.fixture_data("message_link_test_cases.json"))
for test in tests:
self.assertEqual(
is_same_server_message_link(test["message_link"]), test["expected_output"]
)
class NarrowURLDecodeTest(ZulipTestCase):
def test_decode_narrow_url(self) -> None:
tests = orjson.loads(self.fixture_data("narrow_url_to_narrow_terms.json"))
for test_case in tests:
with self.subTest(name=test_case["name"]):
parsed_terms = parse_narrow_url(test_case["near_link"])
expected_output = test_case.get("expected_output")
if expected_output is None:
self.assertEqual(parsed_terms, expected_output)
else:
assert parsed_terms is not None
expected_narrow_terms: list[NarrowTerm] = [
NarrowTerm(**term) for term in expected_output
]
self.assertListEqual(parsed_terms, expected_narrow_terms)