61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
REQUEST_SCHEMA = (
|
|
ROOT / "database" / "contracts" / "arr-submit-processing-result-v1.schema.json"
|
|
)
|
|
RECEIPT_SCHEMA = (
|
|
ROOT
|
|
/ "database"
|
|
/ "contracts"
|
|
/ "arr-submit-processing-result-receipt-v1.schema.json"
|
|
)
|
|
|
|
|
|
class DirectContractSchemaTests(unittest.TestCase):
|
|
def test_request_has_exact_four_fields_and_authoritative_payload_ref(self) -> None:
|
|
schema = json.loads(REQUEST_SCHEMA.read_text(encoding="utf-8"))
|
|
expected = {
|
|
"submission_grant",
|
|
"job_id",
|
|
"attempt_no",
|
|
"payload",
|
|
}
|
|
self.assertFalse(schema["additionalProperties"])
|
|
self.assertEqual(set(schema["required"]), expected)
|
|
self.assertEqual(set(schema["properties"]), expected)
|
|
self.assertNotIn("payload_sha256", schema["properties"])
|
|
reference = schema["properties"]["payload"]["allOf"][0]["$ref"]
|
|
target = (REQUEST_SCHEMA.parent / reference).resolve()
|
|
self.assertEqual(
|
|
target,
|
|
(
|
|
ROOT
|
|
/ "arr-opera-daily-ingest"
|
|
/ "references"
|
|
/ "structured-result.schema.json"
|
|
).resolve(),
|
|
)
|
|
self.assertTrue(target.is_file())
|
|
|
|
def test_receipt_is_minimal_terminal_contract(self) -> None:
|
|
schema = json.loads(RECEIPT_SCHEMA.read_text(encoding="utf-8"))
|
|
self.assertFalse(schema["additionalProperties"])
|
|
self.assertEqual(
|
|
set(schema["properties"]),
|
|
set(schema["required"]),
|
|
)
|
|
self.assertEqual(
|
|
schema["properties"]["status"]["enum"],
|
|
["committed", "already_committed"],
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main(verbosity=2)
|