You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.2 KiB
31 lines
1.2 KiB
"""Feed candidate selection and feed_views persistence.""" |
|
|
|
import tempfile |
|
from pathlib import Path |
|
from typing import cast |
|
|
|
from imwald.core.database import Database |
|
from imwald.core.nostr_crypto import build_signed_event, pubkey_hex_from_secret |
|
|
|
|
|
def _sk() -> bytes: |
|
return bytes.fromhex("3501454135014541350145413501453fefb02227e449e57cf4d3a3ce05378683") |
|
|
|
|
|
def test_feed_candidates_exclude_viewed_then_include_when_all_seen() -> None: |
|
sk = _sk() |
|
pk = pubkey_hex_from_secret(sk) |
|
ev = build_signed_event(sk, created_at=100, kind=1, tags=[], content="hello feed") |
|
eid = cast(str, ev["id"]) |
|
kinds = (1,) |
|
with tempfile.TemporaryDirectory() as td: |
|
db = Database(Path(td) / "fv.sqlite") |
|
db.connect() |
|
db.upsert_event(ev) |
|
unseen = db.feed_candidates(kinds, hide_nsfw=False, limit=50, viewer_pubkey=pk, exclude_viewed=True) |
|
assert len(unseen) == 1 and unseen[0]["id"] == eid |
|
db.mark_feed_viewed(pk, eid) |
|
empty = db.feed_candidates(kinds, hide_nsfw=False, limit=50, viewer_pubkey=pk, exclude_viewed=True) |
|
assert empty == [] |
|
again = db.feed_candidates(kinds, hide_nsfw=False, limit=50, viewer_pubkey=pk, exclude_viewed=False) |
|
assert len(again) == 1 and again[0]["id"] == eid
|
|
|