49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
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()
|