diff --git a/tests/test_imports.py b/tests/test_imports.py new file mode 100644 index 0000000..cd2db09 --- /dev/null +++ b/tests/test_imports.py @@ -0,0 +1,56 @@ +"""Public API surface — what users actually import.""" +import importlib + +import pytest + + +def test_top_level_import(): + import invisible_playwright as ip + assert hasattr(ip, "InvisiblePlaywright") + assert hasattr(ip, "BINARY_VERSION") + assert hasattr(ip, "FIREFOX_UPSTREAM_VERSION") + assert hasattr(ip, "__version__") + + +def test_version_string(): + from invisible_playwright import __version__ + parts = __version__.split(".") + assert len(parts) >= 2 + assert all(p.isdigit() or p.replace("-", "").replace("rc", "").isdigit() + or any(c.isdigit() for c in p) for p in parts) + + +def test_sync_api_module(): + from invisible_playwright.sync_api import InvisiblePlaywright as SyncCls + from invisible_playwright import InvisiblePlaywright as TopCls + assert SyncCls is TopCls + + +def test_async_api_module_importable(): + mod = importlib.import_module("invisible_playwright.async_api") + assert hasattr(mod, "InvisiblePlaywright") + + +def test_async_class_is_distinct_from_sync(): + from invisible_playwright import InvisiblePlaywright as Sync + from invisible_playwright.async_api import InvisiblePlaywright as Async + assert Sync is not Async + + +@pytest.mark.parametrize("name", [ + "constants", + "download", + "prefs", + "launcher", + "cli", + "_proxy", + "_fpforge", +]) +def test_submodule_importable(name): + importlib.import_module(f"invisible_playwright.{name}") + + +def test_dunder_all_is_complete(): + import invisible_playwright as ip + for name in ip.__all__: + assert hasattr(ip, name), f"{name} declared in __all__ but missing"