import pytest from conftest import EXAMPLES, example from hugin_core.package import Kind, PackageError, load def test_load_reads_manifest_and_files(): package = example("pub-munin-nutzen/1.4.0") assert package.manifest.kind == Kind.SKILL assert sorted(package.files) == ["SKILL.md", "referenz/beispiele.md"] assert package.content.startswith("# Munin nutzen") assert list(package.helper_files) == ["referenz/beispiele.md"] def test_description_without_line_breaks(): text = example("pub-munin-nutzen/1.4.0").manifest.description_text assert "\n" not in text and text.endswith("arbeitest.") def test_checksum_stable_and_content_dependent(): a = example("pub-munin-nutzen/1.4.0") assert a.checksum() == example("pub-munin-nutzen/1.4.0").checksum() assert a.checksum() != example("pub-munin-nutzen/1.5.0").checksum() def test_unknown_field_in_manifest(tmp_path): (tmp_path / "hugin.yaml").write_text( "id: pub-x\nkind: skill\nversion: 1.0.0\nowner: p\nscope: public\n" "description: x\nfarbe: blau\n" ) with pytest.raises(PackageError, match="farbe"): load(tmp_path) def test_without_manifest(tmp_path): with pytest.raises(PackageError, match="fehlt"): load(tmp_path) def test_symlink_rejected(tmp_path): folder = tmp_path / "p" folder.mkdir() (folder / "hugin.yaml").write_text((EXAMPLES / "packages/pub-hausregeln/1.0.0/hugin.yaml").read_text()) (folder / "RULES.md").symlink_to("/etc/hosts") with pytest.raises(PackageError, match="Symlink"): load(folder)