Files
infospace-bench/tests/test_lifecycle.py
2026-05-14 11:32:25 +02:00

92 lines
3.0 KiB
Python

from pathlib import Path
import pytest
from infospace_bench import (
InfospaceError,
add_artifact,
create_infospace,
load_infospace,
)
def test_create_infospace_writes_layout_and_loadable_config(tmp_path: Path) -> None:
infospace = create_infospace(
tmp_path,
"wealth-vsm",
name="Wealth of Nations through VSM",
topic_domain="Classical Economics",
)
root = tmp_path / "infospaces" / "wealth-vsm"
assert infospace.root == root
assert (root / "infospace.yaml").is_file()
assert (root / "artifacts" / "sources").is_dir()
assert (root / "artifacts" / "generated").is_dir()
assert (root / "output" / "evaluations").is_dir()
assert (root / "output" / "metrics").is_dir()
assert (root / "reports").is_dir()
assert (root / "exports").is_dir()
loaded = load_infospace(root)
assert loaded.config.slug == "wealth-vsm"
assert loaded.config.name == "Wealth of Nations through VSM"
assert loaded.config.topic.domain == "Classical Economics"
assert loaded.config.topic.sources == "artifacts/sources"
assert loaded.artifacts == []
def test_create_infospace_rejects_unsafe_slug_with_structured_error(tmp_path: Path) -> None:
with pytest.raises(InfospaceError) as raised:
create_infospace(tmp_path, "../outside", name="Nope")
assert raised.value.code == "invalid_slug"
assert raised.value.detail["slug"] == "../outside"
def test_load_infospace_reports_missing_config(tmp_path: Path) -> None:
root = tmp_path / "infospaces" / "empty"
root.mkdir(parents=True)
with pytest.raises(InfospaceError) as raised:
load_infospace(root)
assert raised.value.code == "missing_config"
assert "infospace.yaml" in raised.value.message
def test_add_artifact_copies_file_and_updates_manifest(tmp_path: Path) -> None:
create_infospace(tmp_path, "pilot", name="Pilot Infospace")
source = tmp_path / "chapter.md"
source.write_text("# Chapter\n\nSource text.\n", encoding="utf-8")
artifact = add_artifact(
tmp_path / "infospaces" / "pilot",
source,
kind="source",
title="Chapter 1",
)
assert artifact.id == "source/chapter.md"
assert artifact.path == "artifacts/sources/chapter.md"
assert (tmp_path / "infospaces" / "pilot" / artifact.path).read_text(
encoding="utf-8"
).startswith("# Chapter")
loaded = load_infospace(tmp_path / "infospaces" / "pilot")
assert [item.id for item in loaded.artifacts] == ["source/chapter.md"]
assert loaded.artifacts[0].title == "Chapter 1"
def test_add_artifact_rejects_duplicate_manifest_entry(tmp_path: Path) -> None:
create_infospace(tmp_path, "pilot", name="Pilot Infospace")
source = tmp_path / "chapter.md"
source.write_text("# Chapter\n", encoding="utf-8")
add_artifact(tmp_path / "infospaces" / "pilot", source, kind="source")
with pytest.raises(InfospaceError) as raised:
add_artifact(tmp_path / "infospaces" / "pilot", source, kind="source")
assert raised.value.code == "duplicate_artifact"