from datetime import datetime, timezone from devplacepy.content import is_owner, canonical_redirect, first_image_url, enrich_items from devplacepy.database import get_table, get_users_by_uids from devplacepy.utils import generate_uid def test_is_owner_matches_user_uid(): assert is_owner({"user_uid": "u1"}, {"uid": "u1"}) is True assert is_owner({"user_uid": "u1"}, {"uid": "u2"}) is False assert is_owner(None, {"uid": "u1"}) is False assert is_owner({"user_uid": "u1"}, None) is False def test_canonical_redirect_when_slug_differs(): item = {"slug": "abcd1234-title", "uid": "abcd1234"} assert canonical_redirect("posts", item, "abcd1234-title") is None response = canonical_redirect("posts", item, "abcd1234") assert response is not None assert response.status_code == 301 assert response.headers["location"] == "/posts/abcd1234-title" def test_first_image_url_prefers_inline(): assert first_image_url({"image": "pic.png"}, None) == "/static/uploads/pic.png" def test_first_image_url_uses_first_image_attachment(): item = {"image": None} attachments = [{"is_image": False, "url": "/a"}, {"is_image": True, "url": "/b"}] assert first_image_url(item, attachments) == "/b" def test_first_image_url_none_when_absent(): assert first_image_url({}, []) is None def test_enrich_items_attaches_author_and_extras(local_db): uid = generate_uid() username = f"enrich_{uid[:8]}" get_table("users").insert({ "uid": uid, "username": username, "email": f"{username}@t.dev", "created_at": datetime.now(timezone.utc).isoformat(), }) item_uid = generate_uid() items = [{"uid": item_uid, "user_uid": uid, "created_at": datetime.now(timezone.utc).isoformat()}] authors = get_users_by_uids([uid]) enriched = enrich_items( items, "post", authors, extra_maps={"comment_count": {item_uid: 4}, "flag": lambda item: "ok"}, ) entry = enriched[0] assert entry["post"] is items[0] assert entry["author"]["username"] == username assert entry["time_ago"] == "just now" assert entry["my_vote"] == 0 assert entry["comment_count"] == 4 assert entry["flag"] == "ok"