"""A catalog video as the feed lists it, the row a player opened from an address starts from. DB lane.""" from datetime import datetime, timezone from app.catalog.models import Channel, Video from app.reader.models import VideoState def _video(db, vid="v1"): db.add(Channel(id="UCo", title="Owner", handle="@owner")) db.flush() db.add( Video( id=vid, title="A talk", channel_id="UCo", published_at=datetime.now(timezone.utc), duration_seconds=3600, ) ) db.commit() def test_a_video_comes_as_the_feed_row_with_my_own_state(db, make_user, as_user): me, other = make_user(), make_user() _video(db) db.add(VideoState(user_id=me.id, video_id="v1", status="new", position_seconds=600)) db.add(VideoState(user_id=other.id, video_id="v1", status="watched", position_seconds=90)) db.commit() r = as_user(me).get("/api/videos/v1/row") assert r.status_code == 200, r.text row = r.json() assert (row["id"], row["title"], row["channel_title"]) == ("v1", "A talk", "Owner") assert (row["status"], row["position_seconds"]) == ("new", 600) assert row["watch_url"] == "https://www.youtube.com/watch?v=v1" def test_a_video_never_opened_has_no_state(db, make_user, as_user): _video(db) row = as_user(make_user()).get("/api/videos/v1/row").json() assert (row["status"], row["position_seconds"], row["saved"]) == ("new", 0, False) def test_a_video_outside_the_catalog_is_not_found(db, make_user, as_user): r = as_user(make_user()).get("/api/videos/nope/row") assert r.status_code == 404 assert r.json()["detail"]["code"] == "not_found"