# SPDX-License-Identifier: MIT # Copyright (c) 2026 Rug Munch Media LLC # # Part of Pry — https://git.rugmunch.io/RugMunchMedia/pryscraper # Licensed under MIT. See LICENSE. """Tests for block detector.""" from scraper import BlockDetector def test_block_detector_cloudflare() -> None: detector = BlockDetector() html = """Attention Required! | Cloudflare Please complete the security check to access this site. This is performed by Cloudflare.""" result = detector.detect(html, 403, {"server": "cloudflare"}) assert result["blocked"] is True assert result["vendor"] == "cloudflare" assert result["tier"] == "vendor" def test_block_detector_ok() -> None: detector = BlockDetector() html = "

Welcome

" + "x" * 10000 + "

" result = detector.detect(html, 200, {}) assert result["blocked"] is False def test_block_detector_403() -> None: detector = BlockDetector() result = detector.detect("", 403, {}) assert result["blocked"] is True assert result["tier"] == "generic" def test_block_detector_429() -> None: detector = BlockDetector() result = detector.detect("", 429, {}) assert result["blocked"] is True assert result["vendor"] == "rate_limit" def test_block_detector_empty_page() -> None: detector = BlockDetector(min_content_length=100) html = "

Short

" result = detector.detect(html, 200, {}) assert result["blocked"] is True assert result["tier"] == "structural" def test_block_detector_akamai() -> None: detector = BlockDetector() html = """Access Denied This request was blocked by Akamai. Reference #0.a1b2c3d4e5f6g7h8.""" result = detector.detect(html, 403, {"server": "AkamaiGHost"}) assert result["blocked"] is True assert result["vendor"] == "akamai" assert result["tier"] == "vendor" def test_block_detector_datadome() -> None: detector = BlockDetector() html = """Blocked We believe you are a bot. Captcha required by DataDome.""" result = detector.detect(html, 403, {}) assert result["blocked"] is True assert result["vendor"] == "datadome" assert result["tier"] == "vendor" def test_block_detector_imperva() -> None: detector = BlockDetector() html = """Blocked Request blocked by Imperva. Malicious activity detected.""" result = detector.detect(html, 403, {}) assert result["blocked"] is True assert result["vendor"] == "imperva" assert result["tier"] == "vendor" def test_block_detector_generic_pattern() -> None: detector = BlockDetector() html = """Rate Limited Too many requests. Please try again later.""" result = detector.detect(html, 200, {}) assert result["blocked"] is True assert result["tier"] == "generic" def test_block_detector_no_content_empty() -> None: detector = BlockDetector() result = detector.detect("", 200, {}) assert result["blocked"] is False