From 5418b30441418c9599e503738c874cc50ca3efbf Mon Sep 17 00:00:00 2001 From: user Date: Sun, 15 Feb 2026 21:51:55 +0100 Subject: [PATCH] test: add tests for extracted parse_api_proxies Cover valid entries, invalid proto/port, missing keys, and mixed valid/invalid input. Co-Authored-By: Claude Opus 4.6 --- tests/test_config.py | 53 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/tests/test_config.py b/tests/test_config.py index 3ff8751..b3c82b4 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -2,7 +2,7 @@ import pytest -from s5p.config import ChainHop, Config, load_config, parse_proxy_url +from s5p.config import ChainHop, Config, load_config, parse_api_proxies, parse_proxy_url class TestParseProxyUrl: @@ -65,6 +65,57 @@ class TestChainHop: assert str(hop) == "http://u@proxy:8080" +class TestParseApiProxies: + """Test API response proxy parsing.""" + + def test_valid_entries(self): + data = { + "proxies": [ + {"proto": "socks5", "proxy": "1.2.3.4:1080"}, + {"proto": "http", "proxy": "5.6.7.8:8080"}, + ], + } + result = parse_api_proxies(data) + assert len(result) == 2 + assert result[0] == ChainHop(proto="socks5", host="1.2.3.4", port=1080) + assert result[1] == ChainHop(proto="http", host="5.6.7.8", port=8080) + + def test_skips_invalid_proto(self): + data = {"proxies": [{"proto": "ftp", "proxy": "1.2.3.4:21"}]} + assert parse_api_proxies(data) == [] + + def test_skips_missing_proto(self): + data = {"proxies": [{"proxy": "1.2.3.4:1080"}]} + assert parse_api_proxies(data) == [] + + def test_skips_missing_colon(self): + data = {"proxies": [{"proto": "socks5", "proxy": "no-port"}]} + assert parse_api_proxies(data) == [] + + def test_skips_bad_port(self): + data = {"proxies": [{"proto": "socks5", "proxy": "1.2.3.4:abc"}]} + assert parse_api_proxies(data) == [] + + def test_empty_proxies(self): + assert parse_api_proxies({"proxies": []}) == [] + + def test_missing_proxies_key(self): + assert parse_api_proxies({}) == [] + + def test_mixed_valid_invalid(self): + data = { + "proxies": [ + {"proto": "socks5", "proxy": "1.2.3.4:1080"}, + {"proto": "ftp", "proxy": "bad:21"}, + {"proto": "socks4", "proxy": "5.6.7.8:1080"}, + ], + } + result = parse_api_proxies(data) + assert len(result) == 2 + assert result[0].proto == "socks5" + assert result[1].proto == "socks4" + + class TestConfig: """Test Config defaults."""