| import pytest |
| from scrapling.engines._browsers._validators import ( |
| validate, |
| StealthConfig, |
| PlaywrightConfig, |
| ) |
|
|
|
|
| class TestValidators: |
| """Test configuration validators""" |
|
|
| def test_playwright_config_valid(self): |
| """Test valid PlaywrightConfig""" |
| params = { |
| "max_pages": 2, |
| "headless": True, |
| "timeout": 30000, |
| "proxy": "http://proxy.example.com:8080" |
| } |
|
|
| config = validate(params, PlaywrightConfig) |
|
|
| assert config.max_pages == 2 |
| assert config.headless is True |
| assert config.timeout == 30000 |
| assert isinstance(config.proxy, dict) |
|
|
| def test_playwright_config_invalid_max_pages(self): |
| """Test PlaywrightConfig with invalid max_pages""" |
| params = {"max_pages": 0} |
|
|
| with pytest.raises(TypeError): |
| validate(params, PlaywrightConfig) |
|
|
| params = {"max_pages": 51} |
|
|
| with pytest.raises(TypeError): |
| validate(params, PlaywrightConfig) |
|
|
| def test_playwright_config_invalid_timeout(self): |
| """Test PlaywrightConfig with an invalid timeout""" |
| params = {"timeout": -1} |
|
|
| with pytest.raises(TypeError): |
| validate(params, PlaywrightConfig) |
|
|
| def test_playwright_config_invalid_cdp_url(self): |
| """Test PlaywrightConfig with invalid CDP URL""" |
| params = {"cdp_url": "invalid-url"} |
|
|
| with pytest.raises(TypeError): |
| validate(params, PlaywrightConfig) |
|
|
| def test_stealth_config_valid(self): |
| """Test valid StealthConfig""" |
| params = { |
| "max_pages": 1, |
| "headless": True, |
| "solve_cloudflare": False, |
| "timeout": 30000 |
| } |
|
|
| config = validate(params, StealthConfig) |
|
|
| assert config.max_pages == 1 |
| assert config.headless is True |
| assert config.solve_cloudflare is False |
| assert config.timeout == 30000 |
|
|
| def test_stealth_config_cloudflare_timeout(self): |
| """Test StealthConfig timeout adjustment for Cloudflare""" |
| params = { |
| "solve_cloudflare": True, |
| "timeout": 10000 |
| } |
|
|
| config = validate(params, StealthConfig) |
|
|
| assert config.timeout == 60000 |
|
|
| def test_playwright_config_blocked_domains(self): |
| """Test PlaywrightConfig with blocked_domains""" |
| params = {"blocked_domains": {"ads.example.com", "tracker.io"}} |
|
|
| config = validate(params, PlaywrightConfig) |
|
|
| assert config.blocked_domains == {"ads.example.com", "tracker.io"} |
|
|
| def test_playwright_config_blocked_domains_default_none(self): |
| """Test PlaywrightConfig blocked_domains defaults to None""" |
| config = validate({}, PlaywrightConfig) |
|
|
| assert config.blocked_domains is None |
|
|
| def test_stealth_config_blocked_domains(self): |
| """Test StealthConfig inherits blocked_domains""" |
| params = {"blocked_domains": {"ads.example.com"}} |
|
|
| config = validate(params, StealthConfig) |
|
|
| assert config.blocked_domains == {"ads.example.com"} |
|
|