from __future__ import annotations import unittest from mobilede_scraper.core.utils import deep_find_key from mobilede_scraper.core.config import ( ProxyConfig, ) class TestDeepFindKey(unittest.TestCase): def test_finds_nested_and_respects_depth(self) -> None: payload = { "root": { "target": "a", "nested": [{"target": "b"}, {"x": 1}], } } self.assertEqual(deep_find_key(payload, {"target"}), ["a", "b"]) deep_payload = {"l1": {"l2": {"l3": {"target": "value"}}}} self.assertEqual(deep_find_key(deep_payload, {"target"}, max_depth=2), []) self.assertEqual(deep_find_key(deep_payload, {"target"}, max_depth=8), ["value"]) class TestProxyConfig(unittest.TestCase): def test_requests_proxy_url_includes_encoded_credentials(self) -> None: cfg = ProxyConfig( server="http://144.31.139.6:3128", username="carsproxy", password="pass@word:with/slash", ) self.assertEqual( cfg.to_requests_proxy_url(), "http://carsproxy:pass%40word%3Awith%2Fslash@144.31.139.6:3128", ) self.assertEqual( cfg.to_requests_proxies(), { "http": "http://carsproxy:pass%40word%3Awith%2Fslash@144.31.139.6:3128", "https": "http://carsproxy:pass%40word%3Awith%2Fslash@144.31.139.6:3128", }, ) if __name__ == "__main__": unittest.main()