Dispatcharr/apps/channels/tests
None 759688390b fix(dvr): fix series episode list, card layout, rule cleanup, and recording resilience
Backend:
- Add terminal status guard to stop() endpoint -prevents overwriting completed/interrupted/failed with "stopped" (returns 409 Conflict)
- Include currently-airing programs in series rule evaluation by filtering on end_time instead of start_time
- Clean up future recordings when deleting a series rule while preserving previously recorded episodes
- Add logo proxy negative cache to prevent repeated requests to unreachable hosts from blocking Daphne workers
- Add URL validation with HEAD-then-GET fallback and per-worker cache
- Add EPG time-slot matching (80% overlap threshold) to enrich manual recordings with program metadata
- Add multi-source poster resolution pipeline (EPG, VOD, TMDB, OMDb, TVMaze, iTunes) with URL validation at each stage
- Add editable recording metadata endpoint with user_edited flag to prevent EPG auto-overwrite
- Add refresh-artwork endpoint to re-run poster resolution on demand
- Batch-fetch PeriodicTask names in schedule_upcoming to avoid N+1

Frontend:
- Fix series modal showing only one episode — preserve _group_count from categorized prop when merging with store version so the episode list renders correctly
- Fix recording card button positioning — use flex column layout with marginTop auto so buttons align at the bottom regardless of content
- Add delete fallback in RecurringRuleModal for orphaned recordings from deleted rules
- Use end_time filter in upcoming episodes list to include currently-airing episodes
- Add inline metadata editing (title/description) in details modal
- Add refresh artwork button in details modal
- Replace hardcoded /logo.png fallbacks with imported default logo
- Add React.memo with custom comparator to RecordingCard

Tests:
- Add 21 EPG time-slot matching tests (overlap threshold, edge cases)
- Add 16 recording metadata tests (validation, artwork, logo cache)
- Add 17 URL validation tests (HEAD/GET fallback, caching, eviction)
2026-03-04 10:21:03 -06:00
..
__init__.py DVR Features and bug fixes 2025-09-18 10:23:16 -05:00
test_channel_api.py fix bulk update error on unmatched first entry, add tests to cover bulk update api 2026-01-13 15:05:40 -05:00
test_dvr_retry.py fix(dvr): add DB retry resilience, fix recording card logos, prevent incorrect artwork 2026-03-04 10:21:03 -06:00
test_epg_matching.py fix(dvr): fix series episode list, card layout, rule cleanup, and recording resilience 2026-03-04 10:21:03 -06:00
test_recording_extend.py fix(dvr): add recording extend, fix cross-recording interference, artwork race, and keepalive gaps 2026-03-04 10:21:02 -06:00
test_recording_metadata.py fix(dvr): fix series episode list, card layout, rule cleanup, and recording resilience 2026-03-04 10:21:03 -06:00
test_recording_scheduling.py fix(dvr): add recording extend, fix cross-recording interference, artwork race, and keepalive gaps 2026-03-04 10:21:02 -06:00
test_recording_stop_cancel.py fix(dvr): add recording extend, fix cross-recording interference, artwork race, and keepalive gaps 2026-03-04 10:21:02 -06:00
test_recurring_rules.py DVR Features and bug fixes 2025-09-18 10:23:16 -05:00
test_ts_proxy_keepalive.py fix(dvr): add recording extend, fix cross-recording interference, artwork race, and keepalive gaps 2026-03-04 10:21:02 -06:00
test_validate_url.py fix(dvr): fix series episode list, card layout, rule cleanup, and recording resilience 2026-03-04 10:21:03 -06:00