63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
|
|
"""Tests for check_okf.py — the OKF v0.1 frontmatter validator.
|
||
|
|
|
||
|
|
Covers the control-character check added 2026-08-27: a file that otherwise has
|
||
|
|
valid frontmatter must still fail if its body contains a NUL byte or other
|
||
|
|
control byte outside \\t \\n \\r (the class of bug found in
|
||
|
|
kb/audits/wiki-kompilat-recon-2026-08-26.md — raw bytes pasted in from a psql
|
||
|
|
SELECT over the mail corpus).
|
||
|
|
"""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||
|
|
import check_okf # noqa: E402
|
||
|
|
|
||
|
|
VALID_FRONTMATTER = """---
|
||
|
|
okf: "0.1"
|
||
|
|
type: decision
|
||
|
|
visibility: private
|
||
|
|
status: active
|
||
|
|
updated: 2026-08-27
|
||
|
|
links: []
|
||
|
|
---
|
||
|
|
"""
|
||
|
|
|
||
|
|
|
||
|
|
def _write(tmp_path: Path, body: str) -> Path:
|
||
|
|
p = tmp_path / "doc.md"
|
||
|
|
p.write_text(VALID_FRONTMATTER + body, encoding="utf-8")
|
||
|
|
return p
|
||
|
|
|
||
|
|
|
||
|
|
def test_clean_file_has_no_control_char_errors(tmp_path):
|
||
|
|
path = _write(tmp_path, "# Title\n\nZwykła treść z \t tabulatorem i \r\n końcem linii.\n")
|
||
|
|
errors = check_okf.check_file(path, tmp_path)
|
||
|
|
assert errors == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_nul_byte_in_body_is_flagged(tmp_path):
|
||
|
|
path = _write(tmp_path, "# Title\n\nZawiera bajt NUL: \x00 w tym miejscu.\n")
|
||
|
|
errors = check_okf.check_file(path, tmp_path)
|
||
|
|
assert any("bajt kontrolny" in e and "0x0" in e for e in errors)
|
||
|
|
|
||
|
|
|
||
|
|
def test_control_char_error_reports_correct_line(tmp_path):
|
||
|
|
body = "linia 1\nlinia 2\nzepsuta \x00 linia 3\nlinia 4\n"
|
||
|
|
path = _write(tmp_path, body)
|
||
|
|
errors = check_okf.check_file(path, tmp_path)
|
||
|
|
control_errors = [e for e in errors if "bajt kontrolny" in e]
|
||
|
|
assert len(control_errors) == 1
|
||
|
|
# Frontmatter occupies 7 lines before the body starts.
|
||
|
|
frontmatter_lines = VALID_FRONTMATTER.count("\n")
|
||
|
|
expected_line = frontmatter_lines + 3
|
||
|
|
assert f"w linii {expected_line}" in control_errors[0]
|
||
|
|
|
||
|
|
|
||
|
|
def test_multiple_control_chars_same_line_reported_once(tmp_path):
|
||
|
|
path = _write(tmp_path, "para \x00 z dwoma \x00 bajtami na tej samej linii\n")
|
||
|
|
errors = check_okf.check_file(path, tmp_path)
|
||
|
|
control_errors = [e for e in errors if "bajt kontrolny" in e]
|
||
|
|
assert len(control_errors) == 1
|