Ctrl K
ComunidadGuías…

tests/test_audit_json_syntax.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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]