invisible_playwright/tests/test_proxy.py
2026-05-15 20:01:54 -07:00

81 lines
2.4 KiB
Python

"""configure_proxy behaviour — SOCKS goes into prefs, HTTP into Playwright kwargs."""
import pytest
from invisible_playwright._proxy import configure_proxy
def test_none_proxy_returns_none_and_leaves_prefs():
prefs = {}
assert configure_proxy(None, prefs) is None
assert prefs == {}
def test_empty_dict_returns_none():
prefs = {}
assert configure_proxy({}, prefs) is None
assert prefs == {}
def test_direct_scheme_returns_none():
prefs = {}
out = configure_proxy({"server": "direct://"}, prefs)
assert out is None
assert prefs == {}
def test_socks5_writes_prefs_and_returns_none():
prefs = {}
out = configure_proxy(
{"server": "socks5://gw.example.com:1080", "username": "u", "password": "p"},
prefs,
)
assert out is None
assert prefs["network.proxy.type"] == 1
assert prefs["network.proxy.socks"] == "gw.example.com"
assert prefs["network.proxy.socks_port"] == 1080
assert prefs["network.proxy.socks_version"] == 5
assert prefs["network.proxy.socks_username"] == "u"
assert prefs["network.proxy.socks_password"] == "p"
assert prefs["network.proxy.socks_remote_dns"] is True
def test_socks4_sets_version_4():
prefs = {}
configure_proxy({"server": "socks4://gw:1080"}, prefs)
assert prefs["network.proxy.socks_version"] == 4
def test_socks_without_auth_uses_empty_strings():
prefs = {}
configure_proxy({"server": "socks5://gw:1080"}, prefs)
assert prefs["network.proxy.socks_username"] == ""
assert prefs["network.proxy.socks_password"] == ""
def test_http_proxy_passes_through_to_playwright():
prefs = {}
proxy = {"server": "http://gw.example.com:8080", "username": "u", "password": "p"}
out = configure_proxy(proxy, prefs)
assert out is proxy
assert prefs == {}
def test_https_proxy_passes_through():
prefs = {}
out = configure_proxy({"server": "https://gw:8443"}, prefs)
assert out is not None
assert prefs == {}
def test_malformed_socks_url_drops_silently():
prefs = {}
out = configure_proxy({"server": "socks5://no-port-here"}, prefs)
assert out is None
assert prefs == {}
@pytest.mark.parametrize("scheme", ["socks5://", "SOCKS5://", "Socks5://"])
def test_socks_scheme_is_case_insensitive(scheme):
prefs = {}
configure_proxy({"server": f"{scheme}gw:1080"}, prefs)
assert prefs["network.proxy.socks"] == "gw"