|
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"
|