diff options
| author | J08nY | 2025-09-25 16:28:49 +0200 |
|---|---|---|
| committer | J08nY | 2025-09-25 16:28:49 +0200 |
| commit | daf9ec03ea0b7706079c834bef62d978caed29b1 (patch) | |
| tree | 997f251567dff857a8e9889b92ea8e319596d31a /tests/cc | |
| parent | bce2ef9d06f52a98eb543d0760e0f9cd5108bed6 (diff) | |
| download | sec-certs-daf9ec03ea0b7706079c834bef62d978caed29b1.tar.gz sec-certs-daf9ec03ea0b7706079c834bef62d978caed29b1.tar.zst sec-certs-daf9ec03ea0b7706079c834bef62d978caed29b1.zip | |
Make a JSON schema for CC Certificate and Dataset objects.
Diffstat (limited to 'tests/cc')
| -rw-r--r-- | tests/cc/test_cc_analysis.py | 37 | ||||
| -rw-r--r-- | tests/cc/test_cc_certificate.py | 10 | ||||
| -rw-r--r-- | tests/cc/test_cc_dataset.py | 16 |
3 files changed, 63 insertions, 0 deletions
diff --git a/tests/cc/test_cc_analysis.py b/tests/cc/test_cc_analysis.py index 4606383c..42c97bac 100644 --- a/tests/cc/test_cc_analysis.py +++ b/tests/cc/test_cc_analysis.py @@ -1,14 +1,19 @@ from __future__ import annotations +import json import shutil from collections.abc import Generator from importlib import resources from pathlib import Path +from tempfile import TemporaryDirectory import pytest import tests.data.cc.analysis import tests.data.common +from jsonschema import Draft7Validator, validate +from referencing import Registry, Resource +import sec_certs.serialization.schemas from sec_certs.cert_rules import SARS_IMPLIED_FROM_EAL from sec_certs.dataset.auxiliary_dataset_handling import ( CPEDatasetHandler, @@ -258,3 +263,35 @@ def test_segment_extractor(reference_dataset: CCDataset): df = ReferenceSegmentExtractor()(reference_dataset.certs.values()) assert df is not None assert not df.empty + + +def test_schema_validate_single(reference_dataset: CCDataset): + with ( + resources.open_text(sec_certs.serialization.schemas, "cc_certificate.json") as schema_file, + TemporaryDirectory() as tmp_dir, + ): + schema = json.load(schema_file) + for cert in reference_dataset: + fname = Path(tmp_dir) / (cert.dgst + ".json") + cert.to_json(fname) + with fname.open("r") as handle: + validate(instance=json.load(handle), schema=schema) + + +def test_schema_validate_full(reference_dataset: CCDataset): + registry = Registry() + with ( + resources.open_text(sec_certs.serialization.schemas, "cc_certificate.json") as cert_schema_file, + resources.open_text(sec_certs.serialization.schemas, "cc_dataset.json") as dataset_schema_file, + ): + cert_schema = json.load(cert_schema_file) + registry = Resource.from_contents(cert_schema) @ registry + dataset_schema = json.load(dataset_schema_file) + registry = Resource.from_contents(dataset_schema) @ registry + validator = Draft7Validator(schema={"$ref": "http://sec-certs.org/schemas/cc_dataset.json"}, registry=registry) + + with TemporaryDirectory() as tmp_dir: + fname = Path(tmp_dir) / "dataset.json" + reference_dataset.to_json(fname) + with fname.open("r") as handle: + validator.validate(instance=json.load(handle)) diff --git a/tests/cc/test_cc_certificate.py b/tests/cc/test_cc_certificate.py index d24f4c30..d53663dd 100644 --- a/tests/cc/test_cc_certificate.py +++ b/tests/cc/test_cc_certificate.py @@ -7,7 +7,9 @@ from pathlib import Path import pytest import tests.data.cc.analysis import tests.data.cc.certificate +from jsonschema import validate +import sec_certs.serialization.schemas from sec_certs.dataset import CCDataset from sec_certs.sample import CCCertificate @@ -100,3 +102,11 @@ def test_cert_older_dgst(cert_one: CCCertificate): cert_one.report_link = None with pytest.raises(RuntimeError): cert_one.older_dgst + + +def test_schema_validation(data_dir: Path): + with ( + (data_dir / "fictional_cert.json").open("r") as cert, + resources.open_text(sec_certs.serialization.schemas, "cc_certificate.json") as schema, + ): + validate(json.load(cert), json.load(schema)) diff --git a/tests/cc/test_cc_dataset.py b/tests/cc/test_cc_dataset.py index 3d13edeb..071f5330 100644 --- a/tests/cc/test_cc_dataset.py +++ b/tests/cc/test_cc_dataset.py @@ -1,10 +1,13 @@ import json import shutil +from importlib import resources from pathlib import Path from tempfile import TemporaryDirectory import pytest +from jsonschema import validate +import sec_certs.serialization.schemas from sec_certs import constants from sec_certs.configuration import config from sec_certs.dataset.cc import CCDataset @@ -166,3 +169,16 @@ def test_to_pandas(toy_dataset: CCDataset): assert df.shape == (len(toy_dataset), len(CCCertificate.pandas_columns)) assert df.index.name == "dgst" assert set(df.columns) == (set(CCCertificate.pandas_columns).union({"year_from"})) - {"dgst"} + + +def test_schema_validate(toy_dataset: CCDataset): + with ( + resources.open_text(sec_certs.serialization.schemas, "cc_certificate.json") as schema_file, + TemporaryDirectory() as tmp_dir, + ): + schema = json.load(schema_file) + for cert in toy_dataset: + fname = Path(tmp_dir) / (cert.dgst + ".json") + cert.to_json(fname) + with fname.open("r") as handle: + validate(instance=json.load(handle), schema=schema) |
