Skip to content

Commit a96563d

Browse files
Add operation-metadata import boundary guards
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 374c10e commit a96563d

4 files changed

Lines changed: 70 additions & 0 deletions

CONTRIBUTING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ This runs lint, format checks, compile checks, tests, and package build.
127127
- `tests/test_examples_syntax.py` (example script syntax guardrail),
128128
- `tests/test_extension_create_helper_usage.py` (extension create-input normalization helper usage enforcement),
129129
- `tests/test_extension_create_metadata_usage.py` (extension create-helper shared operation-metadata prefix usage enforcement),
130+
- `tests/test_extension_operation_metadata_import_boundary.py` (extension operation-metadata import boundary enforcement),
130131
- `tests/test_extension_operation_metadata_usage.py` (extension manager operation-metadata usage enforcement),
131132
- `tests/test_extension_parse_usage_boundary.py` (centralized extension list parse-helper usage boundary enforcement),
132133
- `tests/test_extension_request_function_parse_boundary.py` (extension-request function-level parser boundary enforcement between create/list wrappers),
@@ -188,6 +189,7 @@ This runs lint, format checks, compile checks, tests, and package build.
188189
- `tests/test_request_wrapper_internal_reuse.py` (request-wrapper internal reuse of shared model request helpers across profile/team/extension/computer-action modules),
189190
- `tests/test_response_parse_usage_boundary.py` (centralized `parse_response_model(...)` usage boundary enforcement),
190191
- `tests/test_schema_injection_helper_usage.py` (shared schema injection helper usage enforcement in payload builders),
192+
- `tests/test_session_operation_metadata_import_boundary.py` (session operation-metadata import boundary enforcement),
191193
- `tests/test_session_operation_metadata_usage.py` (session manager operation-metadata usage enforcement),
192194
- `tests/test_session_parse_usage_boundary.py` (centralized session parse-helper usage boundary enforcement),
193195
- `tests/test_session_profile_update_helper_usage.py` (session profile-update parameter helper usage enforcement),

tests/test_architecture_marker_usage.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"tests/test_extension_create_metadata_usage.py",
9191
"tests/test_extract_payload_helper_usage.py",
9292
"tests/test_examples_naming_convention.py",
93+
"tests/test_extension_operation_metadata_import_boundary.py",
9394
"tests/test_extension_operation_metadata_usage.py",
9495
"tests/test_extension_parse_usage_boundary.py",
9596
"tests/test_extension_request_function_parse_boundary.py",
@@ -120,6 +121,7 @@
120121
"tests/test_computer_action_request_helper_usage.py",
121122
"tests/test_computer_action_request_internal_reuse.py",
122123
"tests/test_schema_injection_helper_usage.py",
124+
"tests/test_session_operation_metadata_import_boundary.py",
123125
"tests/test_session_operation_metadata_usage.py",
124126
"tests/test_session_parse_usage_boundary.py",
125127
"tests/test_session_profile_update_helper_usage.py",
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
5+
from tests.test_extension_create_metadata_usage import MODULE_PATH as CREATE_HELPER_MODULE
6+
from tests.test_extension_operation_metadata_usage import MODULES as MANAGER_MODULES
7+
8+
pytestmark = pytest.mark.architecture
9+
10+
11+
EXPECTED_EXTRA_IMPORTERS = (
12+
"tests/test_extension_create_metadata_usage.py",
13+
"tests/test_extension_operation_metadata.py",
14+
"tests/test_extension_operation_metadata_import_boundary.py",
15+
"tests/test_extension_operation_metadata_usage.py",
16+
)
17+
18+
19+
def test_extension_operation_metadata_imports_are_centralized():
20+
discovered_modules: list[str] = []
21+
22+
for module_path in sorted(Path("hyperbrowser").rglob("*.py")):
23+
module_text = module_path.read_text(encoding="utf-8")
24+
if "extension_operation_metadata import" in module_text:
25+
discovered_modules.append(module_path.as_posix())
26+
27+
for module_path in sorted(Path("tests").glob("test_*.py")):
28+
module_text = module_path.read_text(encoding="utf-8")
29+
if "extension_operation_metadata import" in module_text:
30+
discovered_modules.append(module_path.as_posix())
31+
32+
expected_modules = sorted([*MANAGER_MODULES, CREATE_HELPER_MODULE, *EXPECTED_EXTRA_IMPORTERS])
33+
assert discovered_modules == expected_modules
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
5+
from tests.test_session_operation_metadata_usage import MODULES as MANAGER_MODULES
6+
from tests.test_session_upload_metadata_usage import MODULE_PATH as UPLOAD_HELPER_MODULE
7+
8+
pytestmark = pytest.mark.architecture
9+
10+
11+
EXPECTED_EXTRA_IMPORTERS = (
12+
"tests/test_session_operation_metadata.py",
13+
"tests/test_session_operation_metadata_import_boundary.py",
14+
"tests/test_session_operation_metadata_usage.py",
15+
"tests/test_session_upload_metadata_usage.py",
16+
)
17+
18+
19+
def test_session_operation_metadata_imports_are_centralized():
20+
discovered_modules: list[str] = []
21+
22+
for module_path in sorted(Path("hyperbrowser").rglob("*.py")):
23+
module_text = module_path.read_text(encoding="utf-8")
24+
if "session_operation_metadata import" in module_text:
25+
discovered_modules.append(module_path.as_posix())
26+
27+
for module_path in sorted(Path("tests").glob("test_*.py")):
28+
module_text = module_path.read_text(encoding="utf-8")
29+
if "session_operation_metadata import" in module_text:
30+
discovered_modules.append(module_path.as_posix())
31+
32+
expected_modules = sorted([*MANAGER_MODULES, UPLOAD_HELPER_MODULE, *EXPECTED_EXTRA_IMPORTERS])
33+
assert discovered_modules == expected_modules

0 commit comments

Comments
 (0)