From 440a70428c624f6e27b630026acdba2032acc9a7 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 19 Nov 2019 15:01:10 -0800 Subject: [PATCH] Include rowid in filter select, closes #636 --- datasette/views/table.py | 6 +----- tests/test_html.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/datasette/views/table.py b/datasette/views/table.py index a60a3941..516b474d 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -587,10 +587,6 @@ class TableView(RowTableShared): columns = [r[0] for r in results.description] rows = list(results.rows) - filter_columns = columns[:] - if use_rowid and filter_columns[0] == "rowid": - filter_columns = filter_columns[1:] - # Expand labeled columns if requested expanded_columns = [] expandable_columns = await self.expandable_columns(database, table) @@ -720,7 +716,7 @@ class TableView(RowTableShared): "use_rowid": use_rowid, "filters": filters, "display_columns": display_columns, - "filter_columns": filter_columns, + "filter_columns": columns, "display_rows": display_rows, "facets_timed_out": facets_timed_out, "sorted_facet_results": sorted( diff --git a/tests/test_html.py b/tests/test_html.py index 44627cdc..3b331f38 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -679,6 +679,30 @@ def test_table_html_foreign_key_custom_label_column(app_client): ] +@pytest.mark.parametrize( + "path,expected_column_options", + [ + ("/fixtures/infinity", ["- column -", "rowid", "value"]), + ( + "/fixtures/primary_key_multiple_columns", + ["- column -", "id", "content", "content2"], + ), + ("/fixtures/compound_primary_key", ["- column -", "pk1", "pk2", "content"]), + ], +) +def test_table_html_filter_form_column_options( + path, expected_column_options, app_client +): + response = app_client.get(path) + assert response.status == 200 + form = Soup(response.body, "html.parser").find("form") + column_options = [ + o.attrs.get("value") or o.string + for o in form.select("select[name=_filter_column] option") + ] + assert expected_column_options == column_options + + def test_row_html_compound_primary_key(app_client): response = app_client.get("/fixtures/compound_primary_key/a,b") assert response.status == 200