From 8ec8ba6c8c960a196f14bda1030abfed8559eeae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Kucharczyk?= Date: Sun, 21 Jun 2026 12:05:39 +0200 Subject: [PATCH] fix(filters): label the Days to Finish slider on the PlayEvent filter bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RangeSlider does not render its own label — the field label is emitted by the _filter_field wrapper. The PlayEvent filter bar added the Days to Finish slider bare, so it showed no label. Wrap it in _filter_field like every other slider (GameFilterBar/PurchaseFilterBar). Co-Authored-By: Claude Opus 4.8 --- common/components/filters.py | 23 +++++++++++++---------- tests/test_filter_bars.py | 13 +++++++++++++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/common/components/filters.py b/common/components/filters.py index 7134125..f1de3c7 100644 --- a/common/components/filters.py +++ b/common/components/filters.py @@ -1495,16 +1495,19 @@ def _playevent_fields(existing: dict) -> list: ), ], ), - RangeSlider( - label="Days to Finish", - input_name_prefix="filter-days-to-finish", - min_value=days_min, - max_value=days_max, - range_min=0, - range_max=365, - step="1", - min_placeholder="e.g. 1", - max_placeholder="e.g. 30", + _filter_field( + "Days to Finish", + RangeSlider( + label="Days to Finish", + input_name_prefix="filter-days-to-finish", + min_value=days_min, + max_value=days_max, + range_min=0, + range_max=365, + step="1", + min_placeholder="e.g. 1", + max_placeholder="e.g. 30", + ), ), ] return fields diff --git a/tests/test_filter_bars.py b/tests/test_filter_bars.py index 3e80944..70b78a4 100644 --- a/tests/test_filter_bars.py +++ b/tests/test_filter_bars.py @@ -223,6 +223,19 @@ class FilterBarRenderingTest(TestCase): ) self._assert_shell(html, "/presets/playevents/list", "/presets/playevents/save") + def test_playevent_filter_bar_labels_days_to_finish_slider(self): + """The Days to Finish range slider must be wrapped in a labelled field — + RangeSlider does not render its own label, so a bare slider shows none.""" + from common.components import PlayEventFilterBar + + html = str( + PlayEventFilterBar( + filter_json="", preset_list_url="/l", preset_save_url="/s" + ) + ) + self.assertIn("Days to Finish", html) + self.assertNoEscapedTags(html) + def test_game_filter_bar_has_new_widgets(self): """The expanded games FilterBar exposes platform_group, device, playevent_note, purchase_type / purchase_ownership_type, plus count and aggregate-playtime