feat: add case package validation foundation
This commit is contained in:
1 parent
2e590d5e12
commit
112487242a
18 files changed
+806
-1
No files matched your search
@@ -0,0 +1,51 @@
|
||||
|
||||
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)
|
||||
Reference in new issue
Block a user