Skip to content

Commit 8b0fbfd

Browse files
Normalize and validate base headers during merge
Co-authored-by: Shri Sukhani <shrisukhani@users.noreply.github.com>
1 parent 22a3a83 commit 8b0fbfd

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

hyperbrowser/header_utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,12 @@ def merge_headers(
4848
mapping_error_message: str,
4949
pair_error_message: Optional[str] = None,
5050
) -> Dict[str, str]:
51-
merged_headers = dict(base_headers)
51+
normalized_base_headers = normalize_headers(
52+
base_headers,
53+
mapping_error_message=mapping_error_message,
54+
pair_error_message=pair_error_message,
55+
)
56+
merged_headers = dict(normalized_base_headers or {})
5257
normalized_overrides = normalize_headers(
5358
override_headers,
5459
mapping_error_message=mapping_error_message,

tests/test_header_utils.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,24 @@ def test_merge_headers_replaces_existing_headers_case_insensitively():
8484
assert merged["X-API-KEY"] == "override-key"
8585
assert "User-Agent" not in merged
8686
assert "x-api-key" not in merged
87+
88+
89+
def test_merge_headers_rejects_invalid_base_header_pairs():
90+
with pytest.raises(HyperbrowserError, match="headers must be a mapping"):
91+
merge_headers(
92+
{"x-api-key": 123}, # type: ignore[dict-item]
93+
{"User-Agent": "custom"},
94+
mapping_error_message="headers must be a mapping of string pairs",
95+
)
96+
97+
98+
def test_merge_headers_rejects_duplicate_base_header_names_case_insensitive():
99+
with pytest.raises(
100+
HyperbrowserError,
101+
match="duplicate header names are not allowed after normalization",
102+
):
103+
merge_headers(
104+
{"X-Request-Id": "one", "x-request-id": "two"},
105+
None,
106+
mapping_error_message="headers must be a mapping of string pairs",
107+
)

0 commit comments

Comments
 (0)