diff --git a/playwright/_impl/_api_structures.py b/playwright/_impl/_api_structures.py index 17d1f0346..136177f81 100644 --- a/playwright/_impl/_api_structures.py +++ b/playwright/_impl/_api_structures.py @@ -85,11 +85,24 @@ class LocalStorageEntry(TypedDict): value: str -class OriginState(TypedDict): +class _RequiredOriginState(TypedDict): origin: str localStorage: List[LocalStorageEntry] +class _RequiredOPFSEntry(TypedDict): + path: str + type: Literal["directory", "file"] + + +class OPFSEntry(_RequiredOPFSEntry, total=False): + base64: str + + +class OriginState(_RequiredOriginState, total=False): + opfs: List[OPFSEntry] + + class PdfMargins(TypedDict, total=False): top: Optional[Union[str, float]] right: Optional[Union[str, float]] @@ -112,6 +125,7 @@ class ProxySettings(TypedDict, total=False): class StorageState(TypedDict, total=False): cookies: List[StorageStateCookie] origins: List[OriginState] + credentials: List["VirtualCredential"] class ClientCertificate(TypedDict, total=False): diff --git a/tests/test_storage_state_typing.py b/tests/test_storage_state_typing.py new file mode 100644 index 000000000..2e8201b5a --- /dev/null +++ b/tests/test_storage_state_typing.py @@ -0,0 +1,18 @@ +from typing import List, get_type_hints + +from playwright._impl._api_structures import ( + OPFSEntry, + OriginState, + StorageState, + VirtualCredential, +) + + +def test_storage_state_optional_snapshot_fields_are_typed() -> None: + assert get_type_hints(StorageState)["credentials"] == List[VirtualCredential] + assert get_type_hints(OriginState)["opfs"] == List[OPFSEntry] + assert "credentials" in StorageState.__optional_keys__ + assert "opfs" in OriginState.__optional_keys__ + assert {"origin", "localStorage"} <= OriginState.__required_keys__ + assert {"path", "type"} <= OPFSEntry.__required_keys__ + assert "base64" in OPFSEntry.__optional_keys__