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