Files

52 lines
1.9 KiB
Python

import pytest
from jsonschema import Draft202012Validator
import json
from importlib.resources import files
from viano_bug_analysis.package.manifest import manifest_issues, parse_manifest
def test_schema_is_valid():
Draft202012Validator.check_schema(json.loads(files("viano_bug_analysis.schemas").joinpath("manifest-v1.schema.json").read_text()))
@pytest.mark.parametrize("field,value", [("format_version", 2), ("format_version", True), ("package_generation", -1), ("analysis_revision", True), ("state", "UNKNOWN"), ("created_at", "2026-01-01"), ("package_id", " ")])
def test_invalid_fields(manifest, field, value):
manifest[field] = value
assert manifest_issues(manifest)
def test_missing_state_and_routing(manifest):
del manifest["state"]
manifest["status"] = "NEW"
assert manifest_issues(manifest)
def test_independent_generation_revision_and_routing(manifest):
manifest.update(package_generation=15, analysis_revision=2, state="BLOCKED")
manifest["routing"].update(destination="inbox", reason="Dependency unavailable", retry_count=3, retry_not_before="2026-01-02T00:00:00Z")
assert not manifest_issues(manifest)
def test_time_order(manifest):
manifest["updated_at"] = "2025-01-01T00:00:00Z"
assert manifest_issues(manifest)[0].code == "MANIFEST_TIME"
@pytest.mark.parametrize("raw", [b'{"a":1,"a":2}', b'{"a":NaN}', b'\xff'])
def test_strict_json(raw):
with pytest.raises((ValueError, UnicodeError)):
parse_manifest(raw)
@pytest.mark.parametrize("timestamp", ["2026-02-30T00:00:00Z", "2026-01-01T00:00:00", "2026-01-01T00:00:00+00:60", "2026-01-01T00:00:60Z"])
def test_invalid_timestamps(timestamp, manifest):
manifest["routing"]["retry_not_before"] = timestamp
assert manifest_issues(manifest)
def test_lowercase_timestamp(manifest):
manifest["created_at"] = "2026-01-01t00:00:00z"
assert not manifest_issues(manifest)