diff options
| author | Marc Gibbons <1726961+marcgibbons@users.noreply.github.com> | 2025-12-08 09:42:43 -0500 |
|---|---|---|
| committer | Natalia <124304+nessita@users.noreply.github.com> | 2025-12-15 19:00:08 -0300 |
| commit | be26ac85fdf06a7a8a655f6e7000b1263890717d (patch) | |
| tree | 6e980533be257c369347ec335c35e74f195f45e2 /tests/template_tests/syntax_tests | |
| parent | 6d4ccca48bd399e2e4a440b03d8d85ba5f2ea1ba (diff) | |
[6.0.x] Fixed #36783 -- Ensured proper handling of multi-value QueryDicts in querystring template tag.
Co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com>
Co-authored-by: Natalia <124304+nessita@users.noreply.github.com>
Backport of 922c4cf972e04b1ce7ecee592231106724dcfd09 from main.
Diffstat (limited to 'tests/template_tests/syntax_tests')
| -rw-r--r-- | tests/template_tests/syntax_tests/test_querystring.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/template_tests/syntax_tests/test_querystring.py b/tests/template_tests/syntax_tests/test_querystring.py index af8dbde955..8e0722f0fa 100644 --- a/tests/template_tests/syntax_tests/test_querystring.py +++ b/tests/template_tests/syntax_tests/test_querystring.py @@ -58,6 +58,22 @@ class QueryStringTagTests(SimpleTestCase): context = RequestContext(request) self.assertRenderEqual("querystring_multiple", context, expected="?x=y&a=b") + @setup({"querystring_multiple_lists": "{% querystring %}"}) + def test_querystring_multiple_lists(self): + request = self.request_factory.get("/", {"x": ["y", "z"], "a": ["b", "c"]}) + context = RequestContext(request) + expected = "?x=y&x=z&a=b&a=c" + self.assertRenderEqual("querystring_multiple_lists", context, expected=expected) + + @setup({"querystring_lists_with_replacement": "{% querystring a=1 %}"}) + def test_querystring_lists_with_replacement(self): + request = self.request_factory.get("/", {"x": ["y", "z"], "a": ["b", "c"]}) + context = RequestContext(request) + expected = "?x=y&x=z&a=1" + self.assertRenderEqual( + "querystring_lists_with_replacement", context, expected=expected + ) + @setup({"querystring_empty_params": "{% querystring qd %}"}) def test_querystring_empty_params(self): cases = [{}, QueryDict()] @@ -111,6 +127,44 @@ class QueryStringTagTests(SimpleTestCase): context = RequestContext(request, {"my_dict": {"test": None}}) self.assertRenderEqual("querystring_remove_dict", context, expected="?a=1") + @setup({"querystring_remove_querydict": "{% querystring request my_query_dict %}"}) + def test_querystring_remove_querydict(self): + request = self.request_factory.get("/", {"x": "1"}) + my_qd = QueryDict(mutable=True) + my_qd["x"] = None + context = RequestContext( + request, {"request": request.GET, "my_query_dict": my_qd} + ) + self.assertRenderEqual("querystring_remove_querydict", context, expected="?") + + @setup( + {"querystring_remove_querydict_many": "{% querystring request my_query_dict %}"} + ) + def test_querystring_remove_querydict_many(self): + request = self.request_factory.get( + "/", {"test": ["value1", "value2"], "a": [1, 2]} + ) + + qd_none = QueryDict(mutable=True) + qd_none["test"] = None + + qd_list_none = QueryDict(mutable=True) + qd_list_none.setlist("test", [None, None]) + + qd_empty_list = QueryDict(mutable=True) + qd_empty_list.setlist("test", []) + + for qd in (qd_none, qd_list_none, qd_empty_list): + with self.subTest(my_query_dict=qd): + context = RequestContext( + request, {"request": request.GET, "my_query_dict": qd} + ) + self.assertRenderEqual( + "querystring_remove_querydict_many", + context, + expected="?a=1&a=2", + ) + @setup({"querystring_variable": "{% querystring a=a %}"}) def test_querystring_variable(self): request = self.request_factory.get("/") |
