Skip to content

Commit aea7945

Browse files
Add job request route-builder internal reuse guard
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 153af27 commit aea7945

3 files changed

Lines changed: 39 additions & 0 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ This runs lint, format checks, compile checks, tests, and package build.
122122
- `tests/test_job_query_params_helper_usage.py` (shared scrape/crawl query-param helper usage enforcement),
123123
- `tests/test_job_request_helper_usage.py` (shared scrape/crawl/extract request-helper usage enforcement),
124124
- `tests/test_job_request_internal_reuse.py` (shared job request helper internal reuse of shared model request helpers),
125+
- `tests/test_job_request_route_builder_internal_reuse.py` (job-request wrapper internal reuse of shared route-builders),
125126
- `tests/test_job_request_wrapper_internal_reuse.py` (parsed job-request wrapper internal reuse of shared model request helpers),
126127
- `tests/test_job_route_builder_usage.py` (shared job/web request-helper route-builder usage enforcement),
127128
- `tests/test_job_route_constants_usage.py` (shared scrape/crawl/extract route-constant usage enforcement),

tests/test_architecture_marker_usage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"tests/test_job_poll_helper_boundary.py",
7474
"tests/test_job_poll_helper_usage.py",
7575
"tests/test_job_request_internal_reuse.py",
76+
"tests/test_job_request_route_builder_internal_reuse.py",
7677
"tests/test_job_request_wrapper_internal_reuse.py",
7778
"tests/test_job_route_builder_usage.py",
7879
"tests/test_job_route_constants_usage.py",
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import ast
2+
from pathlib import Path
3+
4+
import pytest
5+
6+
pytestmark = pytest.mark.architecture
7+
8+
9+
MODULE_PATH = Path("hyperbrowser/client/managers/job_request_utils.py")
10+
11+
FUNCTION_ROUTE_BUILDER_EXPECTATIONS = {
12+
"get_job_status": "build_job_status_route(",
13+
"get_job": "build_job_route(",
14+
"put_job_action": "build_job_action_route(",
15+
"get_job_status_async": "build_job_status_route(",
16+
"get_job_async": "build_job_route(",
17+
"put_job_action_async": "build_job_action_route(",
18+
}
19+
20+
21+
def _collect_function_sources() -> dict[str, str]:
22+
module_text = MODULE_PATH.read_text(encoding="utf-8")
23+
module_ast = ast.parse(module_text)
24+
function_sources: dict[str, str] = {}
25+
for node in module_ast.body:
26+
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
27+
function_source = ast.get_source_segment(module_text, node)
28+
if function_source is not None:
29+
function_sources[node.name] = function_source
30+
return function_sources
31+
32+
33+
def test_job_request_wrappers_use_expected_route_builders():
34+
function_sources = _collect_function_sources()
35+
for function_name, route_builder_call in FUNCTION_ROUTE_BUILDER_EXPECTATIONS.items():
36+
function_source = function_sources[function_name]
37+
assert route_builder_call in function_source

0 commit comments

Comments
 (0)