shard-wiki/tests/test_engine_kernel.py

60 lines
1.9 KiB
Python
Raw Normal View History

"""Tests for the engine kernel (SHARD-WP-0014 T1)."""
import pytest
from shard_wiki.engine import EngineKernel, extract_wikilinks
from shard_wiki.model import Identity
def test_write_creates_then_edits_as_history():
k = EngineKernel("eng")
p1 = k.write("Home", "first")
assert p1.identity == Identity("eng", "Home")
assert p1.envelope.source_rev == "1"
p2 = k.write("Home", "second")
assert p2.envelope.source_rev == "2"
assert k.read("Home").body == "second" # latest
assert [v.body for v in k.history("Home")] == ["first", "second"] # recoverable history
def test_read_missing_raises():
k = EngineKernel("eng")
with pytest.raises(KeyError):
k.read("Nope")
def test_delete_is_recoverable():
k = EngineKernel("eng")
k.write("Doc", "v1")
k.delete("Doc")
assert not k.exists("Doc")
with pytest.raises(KeyError):
k.read("Doc")
assert [v.body for v in k.history("Doc")] == ["v1"] # history retained
k.write("Doc", "v2") # restore by writing
assert k.exists("Doc") and k.read("Doc").body == "v2"
def test_keys_and_current_rev():
k = EngineKernel("eng")
k.write("A", "a")
k.write("B", "b")
k.write("A", "a2")
assert set(k.keys()) == {"A", "B"}
assert k.current_rev("A") == "2"
assert k.current_rev("Missing") is None
def test_links_and_red_link_resolution():
k = EngineKernel("eng")
k.write("Home", "see [[Target]] and [[Other|labelled]] and [[Target]] again")
k.write("Target", "exists")
assert k.links("Home") == ["Target", "Other"] # ordered, de-duped, label dropped
assert k.resolve_link("Target") == Identity("eng", "Target")
assert k.resolve_link("Other") is None # red-link (not yet created)
def test_extract_wikilinks_helper():
assert extract_wikilinks("none here") == []
assert extract_wikilinks("[[A]] [[B|x]] [[A]]") == ["A", "B"]