feat: Phase 2 triage with keyboard shortcuts J/S/X
Implement /triage GET/POST routes in triage.py blueprint; render phase2.html with day-grouped photo grid, Alpine.js keyboard tagging (J=journal, S=story, X/Space=skip), and done-button gated on all-tagged. Remove stub from albums.py; register triage.bp in __init__.py. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import json
|
||||
|
||||
|
||||
def test_photos_render_in_day_groups(base_url, page, seed_state):
|
||||
album_id = seed_state("phase2_state")
|
||||
page.goto(f"{base_url}/triage?album_id={album_id}")
|
||||
assert page.locator(".day-group").count() >= 1
|
||||
assert page.locator(".photo-card").count() == 3
|
||||
|
||||
|
||||
def test_keyboard_j_tags_journal(base_url, page, seed_state):
|
||||
album_id = seed_state("phase2_state")
|
||||
page.goto(f"{base_url}/triage?album_id={album_id}")
|
||||
page.locator(".photo-card").first.click()
|
||||
page.keyboard.press("j")
|
||||
page.wait_for_timeout(300)
|
||||
card = page.locator(".photo-card").first
|
||||
assert "border-success" in card.get_attribute("class")
|
||||
|
||||
|
||||
def test_keyboard_s_tags_story(base_url, page, seed_state):
|
||||
album_id = seed_state("phase2_state")
|
||||
page.goto(f"{base_url}/triage?album_id={album_id}")
|
||||
page.locator(".photo-card").first.click()
|
||||
page.keyboard.press("s")
|
||||
page.wait_for_timeout(300)
|
||||
assert "border-info" in page.locator(".photo-card").first.get_attribute("class")
|
||||
|
||||
|
||||
def test_done_button_disabled_until_all_tagged(base_url, page, seed_state):
|
||||
album_id = seed_state("phase2_state")
|
||||
page.goto(f"{base_url}/triage?album_id={album_id}")
|
||||
assert page.locator("#done-btn").is_disabled()
|
||||
|
||||
|
||||
def test_done_advances_to_curate(base_url, page, seed_state):
|
||||
album_id = seed_state("phase3_state") # all tagged
|
||||
page.goto(f"{base_url}/triage?album_id={album_id}")
|
||||
page.locator("#done-btn").click()
|
||||
page.wait_for_url("**/curate**")
|
||||
Reference in New Issue
Block a user