feat(ui): release notes overlay v2 + settings/streams/dashboard polish
Release Notes overlay redesign (scoped via .release-notes-shell)
- Backend exposes release.assets (name/size/download_url) through
UpdateReleaseInfo so the frontend can render real download links.
- New masthead: eyebrow + display-font title + tag/published/pre-release
chip strip + close/external action buttons; opts out of layout.css's
global `header { height: 60px }` and `header::before` accent bar that
were leaking into the overlay's <header>.
- Markdown body: <code> filenames are wrapped in clickable <a> via fuzzy
asset match (exact basename, then same-extension token-overlap), with
per-asset description tooltip and a small download glyph.
- Per-asset description derived from filename pattern (Windows installer
/portable/msi, Linux tarball/AppImage/deb/rpm, macOS dmg/pkg, Android
apk/aab, iOS ipa, generic archives) with i18n keys in en/ru/zh.
- Hide checksum / signature side-files (.sha256/.sha512/.sig/.asc/...).
Settings modal & dashboard polish
- ds-section refresh, rail-channel routing, notif matrix updates.
- Dashboard customize panel + per-account layout updates.
- New docs/settings-modal-redesign.html design reference.
Streams / targets / color-strip
- Stream cards rewrite (cards.css, streams.css, streams.ts).
- Composite stream + metrics history adjustments.
- WLED target processor + color-strip pipeline refinements.
- Color-strip WS source streamer touch-ups.
Misc
- Perf charts overhaul; tabular game-integration / HA / MQTT / weather
source cards; donation/sync-clocks/scene-presets minor polish.
- New i18n keys across en/ru/zh.
Test infrastructure
- conftest pre-creates the test DB so main.py's legacy-data migration
doesn't shovel the user's production DB into the test temp dir.
- test_preferences_notifications wipes its own setting at the start of
the defaults test (was relying on isolation it never enforced).
Pre-commit gates: ruff clean, tsc clean, npm run build clean,
pytest 899/899 passing.
This commit is contained in:
@@ -35,8 +35,15 @@ def _full_prefs() -> dict:
|
||||
|
||||
def test_get_returns_defaults_when_unset(client):
|
||||
"""When no prefs have been saved, GET returns the documented defaults."""
|
||||
# Wipe via PUT to a known state to make this order-independent.
|
||||
# (No DELETE endpoint — settings rows are scalar.)
|
||||
# Wipe the stored row to a falsy value so this test is independent of
|
||||
# any prior test in the suite that may have PUT a customised matrix.
|
||||
# `load_notification_preferences` falls back to schema defaults when
|
||||
# the stored value is empty / falsy.
|
||||
from ledgrab.api.dependencies import get_database
|
||||
|
||||
db = get_database()
|
||||
db.set_setting("notification_preferences", {})
|
||||
|
||||
resp = client.get("/api/v1/preferences/notifications")
|
||||
assert resp.status_code == 200
|
||||
body = resp.json()
|
||||
|
||||
Reference in New Issue
Block a user