tests/test_audit_json_syntax.py
Rama main · réplica de lectura del repositorio original.
import json
from pathlib import Path
from scripts.audit_json_syntax import _MAX_JSON_BYTES, audit_file
def test_json_syntax_accepts_valid_json(tmp_path: Path):
path = tmp_path / "ok.json"
path.write_text(json.dumps({"ok": True}), encoding="utf-8")
assert audit_file(path) == []
def test_json_syntax_reports_invalid_json(tmp_path: Path):
path = tmp_path / "bad.json"
path.write_text('{"ok":', encoding="utf-8")
assert "invalid JSON" in audit_file(path)[0]
def test_json_syntax_rejects_nonstandard_constants(tmp_path: Path):
for constant in ("NaN", "Infinity", "-Infinity"):
path = tmp_path / "bad-number.json"
path.write_text('{"value":' + constant + "}", encoding="utf-8")
failures = audit_file(path)
assert len(failures) == 1
assert "invalid JSON" in failures[0]
def test_json_syntax_rejects_duplicate_object_keys(tmp_path: Path):
path = tmp_path / "duplicate.json"
path.write_text('{"mode":"safe","mode":"unsafe"}', encoding="utf-8")
failures = audit_file(path)
assert len(failures) == 1
assert "duplicate" in failures[0]
def test_json_syntax_rejects_symlinked_json(tmp_path: Path):
outside = tmp_path / "outside.json"
outside.write_text('{"ok":true}', encoding="utf-8")
link = tmp_path / "config.json"
link.symlink_to(outside)
failures = audit_file(link)
assert len(failures) == 1
assert "symbolic links" in failures[0]
def test_json_syntax_rejects_directory_named_json(tmp_path: Path):
path = tmp_path / "config.json"
path.mkdir()
failures = audit_file(path)
assert len(failures) == 1
assert "regular file" in failures[0]
def test_json_syntax_rejects_oversized_files_before_parsing(tmp_path: Path):
path = tmp_path / "oversized.json"
path.write_bytes(b" " * (_MAX_JSON_BYTES + 1))
failures = audit_file(path)
assert len(failures) == 1
assert "audit limit" in failures[0]