feat: search --hop walks FROM_FILE to Person. (#30)
Parser no longer errors; hop 1 returns File, hop 3 reaches Person. Rebuild writes Leaf-[:FROM_FILE]->File so the walk is not empty on a fresh index (Gitea #17).
This commit is contained in:
@@ -161,6 +161,39 @@ class KblibTest(unittest.TestCase):
|
||||
self.assertEqual(stats["total"], 2)
|
||||
self.assertEqual(stats["by_root"], {"facts": 1, "info": 1})
|
||||
|
||||
def test_hop_1_returns_file_hop_3_reaches_person(self):
|
||||
"""--hop walks FROM_FILE / HAS_VERSION / AUTHORED (Gitea #17)."""
|
||||
import gitimport
|
||||
|
||||
lid = kblib.upsert_leaf(
|
||||
self.conn, text="readme hop fixture", root="info",
|
||||
confidence="confirmed", source="README.md", source_rev="r1",
|
||||
how="test", loc="README.md", type_="reference",
|
||||
embedding=make_emb(0.3),
|
||||
)
|
||||
kblib.link_from_file(self.conn, lid, "README.md", repo="sample-repo")
|
||||
gitimport.index_commits(self.conn, [gitimport.Commit(
|
||||
sha="a1b2c3d",
|
||||
author="Ada Lovelace",
|
||||
email="ada@example.com",
|
||||
date="2026-08-10T12:00:00Z",
|
||||
subject="feat: first commit",
|
||||
files=["README.md"],
|
||||
)], "sample-repo")
|
||||
hop1 = kblib.hop_walk(self.conn, lid, 1)
|
||||
self.assertEqual(len(hop1), 1)
|
||||
self.assertEqual(hop1[0]["label"], "File")
|
||||
self.assertEqual(hop1[0]["name"], "README.md")
|
||||
self.assertEqual(hop1[0]["depth"], 1)
|
||||
hop3 = kblib.hop_walk(self.conn, lid, 3)
|
||||
labels = {n["label"] for n in hop3}
|
||||
self.assertIn("File", labels)
|
||||
self.assertIn("Commit", labels)
|
||||
self.assertIn("Person", labels)
|
||||
person = [n for n in hop3 if n["label"] == "Person"][0]
|
||||
self.assertEqual(person["name"], "Ada Lovelace")
|
||||
self.assertEqual(person["depth"], 3)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user