From 7a2ed9f8a119e220b66d67c7b9e07cbab47b1196 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 2 Feb 2021 13:20:53 -0800 Subject: [PATCH] Fixed bug with ?_sort= and ?_search=, closes #1214 --- datasette/views/table.py | 2 +- tests/test_html.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/datasette/views/table.py b/datasette/views/table.py index 0a3504b3..48792284 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -815,7 +815,7 @@ class TableView(RowTableShared): form_hidden_args = [] for key in request.args: - if key.startswith("_"): + if key.startswith("_") and key not in ("_sort", "_search"): for value in request.args.getlist(key): form_hidden_args.append((key, value)) diff --git a/tests/test_html.py b/tests/test_html.py index 9f7a987d..e21bd64d 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1272,6 +1272,23 @@ def test_other_hidden_form_fields(app_client, path, expected_hidden): assert [(hidden["name"], hidden["value"]) for hidden in hiddens] == expected_hidden +@pytest.mark.parametrize( + "path,expected_hidden", + [ + ("/fixtures/searchable?_search=terry", []), + ("/fixtures/searchable?_sort=text2", []), + ("/fixtures/searchable?_sort=text2&_where=1", [("_where", "1")]), + ], +) +def test_search_and_sort_fields_not_duplicated(app_client, path, expected_hidden): + # https://github.com/simonw/datasette/issues/1214 + response = app_client.get(path) + soup = Soup(response.body, "html.parser") + inputs = soup.find("form").findAll("input") + hiddens = [i for i in inputs if i["type"] == "hidden"] + assert [(hidden["name"], hidden["value"]) for hidden in hiddens] == expected_hidden + + def test_binary_data_display_in_table(app_client): response = app_client.get("/fixtures/binary_data") assert response.status == 200