enodia-sentinal/tests/test_docs_versioning.py

55 lines
2.3 KiB
Python

# SPDX-License-Identifier: GPL-3.0-or-later
"""Docs versioning checks for operator-facing references."""
import json
import re
import tomllib
import unittest
from pathlib import Path
from enodia_sentinel import __version__
ROOT = Path(__file__).resolve().parents[1]
DOCS = ROOT / "docs"
class TestDocsVersioning(unittest.TestCase):
def test_docs_version_matches_package_metadata(self):
pyproject = tomllib.loads((ROOT / "pyproject.toml").read_text())
package_version = pyproject["project"]["version"]
docs_version = json.loads((DOCS / "VERSION.json").read_text())
self.assertEqual(package_version, __version__)
self.assertEqual(docs_version["project"], "enodia-sentinel")
self.assertEqual(docs_version["package_version"], package_version)
self.assertEqual(docs_version["docs_version"], ".".join(package_version.split(".")[:2]))
self.assertEqual(docs_version["schema_generation"], "v1")
self.assertEqual(docs_version["command_reference"], "docs/COMMAND_REFERENCE.md")
self.assertEqual(docs_version["schema_reference"], "docs/SCHEMAS.md")
def test_versioned_docs_headers_are_present(self):
version = json.loads((DOCS / "VERSION.json").read_text())
for name in ("INDEX.md", "COMMAND_REFERENCE.md", "SCHEMAS.md"):
with self.subTest(name=name):
text = (DOCS / name).read_text()
self.assertIn(
f"Applies to package version: `{version['package_version']}`",
text,
)
self.assertIn(f"Docs version: `{version['docs_version']}`", text)
self.assertIn(f"Schema generation: `{version['schema_generation']}`", text)
def test_readme_links_versioned_docs_index(self):
text = (ROOT / "README.md").read_text()
self.assertRegex(text, r"\[Documentation index\]\(docs/INDEX\.md\)")
def test_command_reference_is_manpage_style(self):
text = (DOCS / "COMMAND_REFERENCE.md").read_text()
commands = re.findall(r"^### `([^`]+)`", text, re.M)
self.assertGreaterEqual(len(commands), 8)
for phrase in ("Global options:", "Exit code:", "Expected use:"):
self.assertIn(phrase, text)
if __name__ == "__main__":
unittest.main()