Files
shard-wiki/tests/test_engine_kernel.py
tegwick 2100e956aa feat(engine): page-store kernel skeleton (WP-0014 T1)
engine/ package: EngineKernel (in-process page store with per-page version
history; create/edit-as-version, recoverable delete-tombstone, keys, current_rev)
+ wikilink extraction + in-shard link resolution / red-link detection (EC-1..EC-4).
Reuses model/provenance; git-IS-store backing slots in later. 6 tests green,
pyflakes clean, full suite green. Marks T1 done.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 23:57:31 +02:00

60 lines
1.9 KiB
Python

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