ui: watched-episode state (dimmed + check, next-up highlight), favicon

This commit is contained in:
jozamudi committed 2026-08-19 18:49:29 +00:00
1 parent 98fb4e5461
commit bb1297f8e2
5 files changed
+54 -2

No files matched your search

+1
View File
@@ -78,6 +78,7 @@ def main():
asyncio.run(test_browser.test_stream_failure_retry())
asyncio.run(test_browser.test_recent_searches())
asyncio.run(test_browser.test_auto_next_countdown())
asyncio.run(test_browser.test_episode_watch_state())
print("ALL TESTS PASSED")
finally:
+31
View File
@@ -61,6 +61,7 @@ async def test_login_ui():
await page.keyboard.press("Enter")
await _login_settled(page)
assert await page.inner_text("#me") == "hi, admin"
assert await page.query_selector('link[rel="icon"]'), "favicon missing"
assert "Seed Anime" in await page.inner_text("#main"), "seeded history must show"
assert not errors, errors
await browser.close()
@@ -225,6 +226,35 @@ async def test_auto_next_countdown():
print("ok test_auto_next_countdown")
async def test_episode_watch_state():
# completed episodes dimmed with a check, first unwatched highlighted.
# seed the first rendered ep as finished (id read off the list),
# reload, and check the classes.
async with async_playwright() as p:
browser = await p.chromium.launch(args=LAUNCH_ARGS)
page = await (await browser.new_context()).new_page()
errors = []
page.on("pageerror", lambda e: errors.append(str(e)))
await _login(page, "admin", "adminpw12345")
await page.goto(BASE + "/?anime=chainsaw-man-922")
await page.wait_for_selector("#eps .ep", timeout=30000)
e1_id = await page.evaluate("document.querySelector('#eps .ep').dataset.ep")
await page.evaluate(
"(id) => fetch('api/history', {method: 'POST',"
" headers: {'Content-Type': 'application/json'},"
" body: JSON.stringify({title: 'Chainsaw Man', slug_id: 'chainsaw-man-922',"
" season_id: 922, ep_id: +id, lang: 'eng', ep: 1, pos: 2350, dur: 2400})})",
e1_id)
await page.reload()
await page.wait_for_selector("#eps .ep.done", timeout=30000)
assert "\u2713" in await page.inner_text("#eps .ep.done")
await page.wait_for_selector("#eps .ep.nextup", timeout=10000)
assert not errors, errors
await browser.close()
print("ok test_episode_watch_state")
if __name__ == "__main__":
if len(sys.argv) > 1:
BASE = sys.argv[1]
@@ -234,3 +264,4 @@ if __name__ == "__main__":
asyncio.run(test_stream_failure_retry())
asyncio.run(test_recent_searches())
asyncio.run(test_auto_next_countdown())
asyncio.run(test_episode_watch_state())