| from pathlib import Path | |
| import pytest | |
| from pydantic import ValidationError | |
| from gamemaster_copilot.sources import load_source_registry | |
| def test_empty_registry_loads(tmp_path: Path) -> None: | |
| registry_path = tmp_path / "sources.yaml" | |
| registry_path.write_text("sources: []\n", encoding="utf-8") | |
| registry = load_source_registry(registry_path) | |
| assert registry.sources == [] | |
| assert registry.approved_ingestable_sources() == [] | |
| def test_registry_rejects_unapproved_permission(tmp_path: Path) -> None: | |
| registry_path = tmp_path / "sources.yaml" | |
| registry_path.write_text( | |
| """ | |
| sources: | |
| - id: bad_source | |
| title: Bad Source | |
| path: bad.md | |
| license: unknown | |
| permission: copyrighted | |
| """, | |
| encoding="utf-8", | |
| ) | |
| with pytest.raises(ValidationError): | |
| load_source_registry(registry_path) | |
| def test_registry_requires_one_location(tmp_path: Path) -> None: | |
| registry_path = tmp_path / "sources.yaml" | |
| registry_path.write_text( | |
| """ | |
| sources: | |
| - id: missing_location | |
| title: Missing Location | |
| license: owned | |
| permission: owned | |
| """, | |
| encoding="utf-8", | |
| ) | |
| with pytest.raises(ValidationError): | |
| load_source_registry(registry_path) | |