52 lines
1.9 KiB
Python
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)
|