1- from contextlib import ExitStack
1+ import importlib .util
2+ from pathlib import Path
3+ import sys
24from unittest .mock import patch
35
4- from policyengine_uk .build_metadata import (
5- get_data_build_fingerprint ,
6- get_data_build_metadata ,
6+ import pytest
7+
8+ BUILD_METADATA_PATH = Path (__file__ ).resolve ().parents [1 ] / "build_metadata.py"
9+ SPEC = importlib .util .spec_from_file_location (
10+ "policyengine_uk_build_metadata_under_test" ,
11+ BUILD_METADATA_PATH ,
712)
13+ build_metadata = importlib .util .module_from_spec (SPEC )
14+ sys .modules [SPEC .name ] = build_metadata
15+ SPEC .loader .exec_module (build_metadata )
16+
17+ get_data_build_fingerprint = build_metadata .get_data_build_fingerprint
18+ get_data_build_metadata = build_metadata .get_data_build_metadata
19+ get_runtime_metadata = build_metadata .get_runtime_metadata
820
921
1022def test_data_build_fingerprint_is_stable_within_process ():
@@ -17,33 +29,48 @@ def test_data_build_fingerprint_is_stable_within_process():
1729 assert first == second
1830
1931
20- def test_get_data_build_metadata_includes_version_git_sha_and_fingerprint ( ):
32+ def test_get_runtime_metadata_includes_required_bundle_fields ( monkeypatch ):
2133 get_data_build_fingerprint .cache_clear ()
2234
23- with ExitStack () as stack :
24- stack .enter_context (
25- patch (
26- "policyengine_uk.build_metadata._get_package_version" ,
27- return_value = "2.74.0" ,
28- )
29- )
30- stack .enter_context (
31- patch (
32- "policyengine_uk.build_metadata._get_git_sha" ,
33- return_value = "deadbeef" ,
34- )
35- )
36- stack .enter_context (
37- patch (
38- "policyengine_uk.build_metadata.get_data_build_fingerprint" ,
39- return_value = "sha256:fingerprint" ,
40- )
41- )
42- metadata = get_data_build_metadata ()
43-
44- assert metadata == {
45- "name" : "policyengine-uk" ,
46- "version" : "2.74.0" ,
47- "git_sha" : "deadbeef" ,
48- "data_build_fingerprint" : "sha256:fingerprint" ,
35+ monkeypatch .setattr (build_metadata , "_get_package_version" , lambda : "2.74.0" )
36+ monkeypatch .setattr (build_metadata , "_get_git_sha" , lambda : "deadbeef" )
37+ monkeypatch .setattr (
38+ build_metadata ,
39+ "get_data_build_fingerprint" ,
40+ lambda : "sha256:fingerprint" ,
41+ )
42+ monkeypatch .setattr (
43+ build_metadata ,
44+ "get_core_runtime_metadata" ,
45+ lambda : {
46+ "name" : "policyengine-core" ,
47+ "version" : "3.26.0" ,
48+ "git_sha" : "coredeadbeef" ,
49+ },
50+ )
51+
52+ metadata = get_runtime_metadata ()
53+
54+ assert metadata ["name" ] == "policyengine-uk"
55+ assert metadata ["version" ] == "2.74.0"
56+ assert metadata ["git_sha" ] == "deadbeef"
57+ assert metadata ["data_build_fingerprint" ] == "sha256:fingerprint"
58+ assert metadata ["core" ] == {
59+ "name" : "policyengine-core" ,
60+ "version" : "3.26.0" ,
61+ "git_sha" : "coredeadbeef" ,
4962 }
63+
64+
65+ def test_get_data_build_metadata_uses_runtime_metadata ():
66+ with patch (
67+ f"{ SPEC .name } .get_runtime_metadata" ,
68+ return_value = {"name" : "policyengine-uk" },
69+ ):
70+ assert get_data_build_metadata () == {"name" : "policyengine-uk" }
71+
72+
73+ def test_runtime_metadata_uses_bundle_contract_when_available ():
74+ policyengine_bundles = pytest .importorskip ("policyengine_bundles" )
75+
76+ policyengine_bundles .load_component_metadata (get_runtime_metadata ())
0 commit comments