stack: Typ project und Collection kb/gtd/ (#123)
Files changed: - CHANGES.md - README.md - VERSION - kb/CONTRACT.md - kb/CONVENTIONS.md - kb/entities/COLLECTION.md - kb/gtd/COLLECTION.md - kb/gtd/INDEX.md - kb/index.md - tools/CONTRACT.md - tools/chemenu/kb_collections.py - tools/chemenu/tests/test_conventions.py - tools/chemenu/tests/test_docs_verify.py - tools/chemenu/tests/test_kb_collections.py - tools/chemenu/tests/test_new_page.py - tools/chemenu/tests/test_type_resolver.py - tools/chemenu/tests/test_types_cmd.py - types/project.md - types/project.schema.yaml - types/type-spec.md
This commit is contained in:
1 parent
3c9d669729
commit
ee24b6e5b8
20 files changed
+507
-38
No files matched your search
@@ -335,6 +335,77 @@ def test_an_unknown_type_spec_field_is_reported(tmp_path, monkeypatch):
|
||||
assert any("widget.md" in issue and "not_a_real_field" in issue for issue in issues)
|
||||
|
||||
|
||||
def _stack_required_type_tree(tmp_path, monkeypatch, project_md: str = "", project_schema: str = ""):
|
||||
"""A `types/` fixture carrying a valid `source` type-spec (copied from the
|
||||
real repo, so it never drifts from what `docs verify` actually enforces)
|
||||
plus whatever `project.md`/`project.schema.yaml` the caller supplies -
|
||||
empty strings mean "write nothing", so a caller can exercise the
|
||||
type-missing case. `check_stack_required_types()` (Gitea #123) has no
|
||||
dedicated coverage otherwise: it is only ever exercised indirectly, via a
|
||||
full `verify()` run against the real repo tree."""
|
||||
types_dir = tmp_path / "types"
|
||||
types_dir.mkdir()
|
||||
for name in ("type-spec.md", "type-spec.schema.yaml", "source.md", "source.schema.yaml"):
|
||||
(types_dir / name).write_text(
|
||||
(config.ROOT / "types" / name).read_text(encoding="utf-8"), encoding="utf-8"
|
||||
)
|
||||
if project_md:
|
||||
(types_dir / "project.md").write_text(project_md, encoding="utf-8")
|
||||
if project_schema:
|
||||
(types_dir / "project.schema.yaml").write_text(project_schema, encoding="utf-8")
|
||||
monkeypatch.setattr(config, "ROOT", tmp_path)
|
||||
monkeypatch.setattr(config, "TYPES_DIR", types_dir)
|
||||
monkeypatch.setattr(type_resolver, "resolver", TypeResolver(repo_root=tmp_path))
|
||||
|
||||
|
||||
_PROJECT_MD = (
|
||||
"---\n"
|
||||
"type: types/type-spec.md\n"
|
||||
"name: project\n"
|
||||
"description: Fixture project type\n"
|
||||
"schema: types/project.schema.yaml\n"
|
||||
"---\n"
|
||||
)
|
||||
|
||||
|
||||
def test_check_stack_required_types_reports_a_missing_project_type(tmp_path, monkeypatch):
|
||||
"""No `project.md` at all - the type-missing case, worded to name the
|
||||
type that is missing."""
|
||||
_stack_required_type_tree(tmp_path, monkeypatch)
|
||||
issues = docs_verify.check_stack_required_types()
|
||||
assert any("name: project" in issue for issue in issues)
|
||||
|
||||
|
||||
def test_check_stack_required_types_reports_project_schema_missing_state(tmp_path, monkeypatch):
|
||||
"""A `project` type-spec exists, but its schema does not require `state:`
|
||||
- the field-missing case, distinct from the type-missing one above."""
|
||||
schema = (
|
||||
"type: object\n"
|
||||
"properties:\n"
|
||||
" type: {type: string, const: 'types/project.md'}\n"
|
||||
" state: {type: string, enum: [active, dormant, completed, abandoned]}\n"
|
||||
"required: [type]\n"
|
||||
"additionalProperties: false\n"
|
||||
)
|
||||
_stack_required_type_tree(tmp_path, monkeypatch, project_md=_PROJECT_MD, project_schema=schema)
|
||||
issues = docs_verify.check_stack_required_types()
|
||||
assert any("state" in issue and "project.md" in issue for issue in issues)
|
||||
|
||||
|
||||
def test_check_stack_required_types_passes_when_both_types_satisfy_their_field(tmp_path, monkeypatch):
|
||||
"""`source`/`raw_files:` and `project`/`state:` both satisfied - no issues."""
|
||||
schema = (
|
||||
"type: object\n"
|
||||
"properties:\n"
|
||||
" type: {type: string, const: 'types/project.md'}\n"
|
||||
" state: {type: string, enum: [active, dormant, completed, abandoned]}\n"
|
||||
"required: [type, state]\n"
|
||||
"additionalProperties: false\n"
|
||||
)
|
||||
_stack_required_type_tree(tmp_path, monkeypatch, project_md=_PROJECT_MD, project_schema=schema)
|
||||
assert docs_verify.check_stack_required_types() == []
|
||||
|
||||
|
||||
def test_legacy_type_blocks_are_absent():
|
||||
assert docs_verify.check_legacy_type_blocks() == []
|
||||
|
||||
|
||||
Reference in new issue
Block a user