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"