Skip to content

Commit 7c5f162

Browse files
committed
Fixed sort orders for timeline view, closes #22
1 parent 60be561 commit 7c5f162

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

dogsheep_beta/__init__.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@
4242
limit 100
4343
"""
4444
FILTER_COLS = ("type", "category", "is_public")
45+
SORT_ORDERS = {
46+
"oldest": "search_index.timestamp",
47+
"newest": "search_index.timestamp desc",
48+
}
4549

4650

4751
async def beta(request, datasette):
@@ -53,11 +57,13 @@ async def beta(request, datasette):
5357
dogsheep_beta_config_file = config["config_file"]
5458
rules = parse_metadata(open(dogsheep_beta_config_file).read())
5559
q = request.args.get("q") or ""
56-
sorted_by = "relevance"
60+
sorted_by = "relevance" if q else "newest"
5761
if request.args.get("sort") in SORT_ORDERS:
5862
sorted_by = request.args["sort"]
5963
other_sort_orders = []
6064
for sort_order in ("relevance", "newest", "oldest"):
65+
if not q and sort_order == "relevance":
66+
continue
6167
if sort_order != sorted_by:
6268
other_sort_orders.append(
6369
{
@@ -97,12 +103,6 @@ async def beta(request, datasette):
97103
)
98104

99105

100-
SORT_ORDERS = {
101-
"oldest": "search_index.timestamp",
102-
"newest": "search_index.timestamp desc",
103-
}
104-
105-
106106
async def search(datasette, database_name, request):
107107
from datasette.utils import sqlite3, escape_fts
108108

tests/test_plugin.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,43 @@ async def test_search_order(ds, sort, expected):
156156
assert ">{}</a>".format(sort_order) in response.text
157157

158158

159+
ALL_EXPECTED = [
160+
"github.db/commits:5becbf70d64951e2910314ef5227d19b11c25b0c9586934941366da8997e57cb",
161+
"emails.db/emails:2",
162+
"github.db/commits:a5b39c5049b28997528bb0eca52730ab6febabeaba54cfcba0ab5d70e7207523",
163+
"emails.db/emails:1",
164+
]
165+
166+
167+
@pytest.mark.asyncio
168+
@pytest.mark.parametrize(
169+
"sort,expected",
170+
(
171+
("", ALL_EXPECTED),
172+
("newest", ALL_EXPECTED),
173+
("oldest", list(reversed(ALL_EXPECTED))),
174+
),
175+
)
176+
async def test_search_order_for_timeline(ds, sort, expected):
177+
async with httpx.AsyncClient(app=ds.app()) as client:
178+
url = "http://localhost/-/beta"
179+
if sort:
180+
url += "?sort=" + sort
181+
response = await client.get(url)
182+
assert response.status_code == 200
183+
soup = Soup(response.text, "html5lib")
184+
results = [el["data-table-key"] for el in soup.select("[data-table-key]")]
185+
assert results == expected
186+
# Check that sort links exist and are correct
187+
sort_label = sort or "newest"
188+
assert "<strong>{}</strong>".format(sort_label) in response.text
189+
assert ">relevance</a>" not in response.text
190+
assert (
191+
">{}</a>".format("oldest" if sort_label == "newest" else "newest")
192+
in response.text
193+
)
194+
195+
159196
@pytest.mark.asyncio
160197
async def test_fixture(ds):
161198
async with httpx.AsyncClient(app=ds.app()) as client:

0 commit comments

Comments
 (0)