| from __future__ import annotations | |
| from pino import scraper | |
| def test_parse_tgsc_page_falls_back_when_camofox_has_no_data(monkeypatch) -> None: | |
| camofox_result = { | |
| "boiling_point_k": None, | |
| "vapor_pressure_pa": None, | |
| "odor_description": "", | |
| "error": "blocked", | |
| } | |
| requests_result = { | |
| "boiling_point_k": 449.65, | |
| "vapor_pressure_pa": 205.45, | |
| "odor_description": "terpene pine", | |
| } | |
| monkeypatch.setattr(scraper, "parse_tgsc_page_camofox", lambda url: camofox_result) | |
| monkeypatch.setattr( | |
| scraper, | |
| "parse_tgsc_page_requests", | |
| lambda url, timeout=30.0: requests_result.copy(), | |
| ) | |
| result = scraper.parse_tgsc_page("https://example.test/material.html") | |
| assert result == { | |
| **requests_result, | |
| "camofox_error": "blocked", | |
| } | |
| def test_parse_tgsc_page_returns_camofox_data_without_fallback(monkeypatch) -> None: | |
| camofox_result = { | |
| "boiling_point_k": 449.65, | |
| "vapor_pressure_pa": 205.45, | |
| "odor_description": "terpene pine", | |
| } | |
| monkeypatch.setattr(scraper, "parse_tgsc_page_camofox", lambda url: camofox_result) | |
| def fail_requests(url, timeout=30.0): | |
| raise AssertionError("requests fallback should not be called") | |
| monkeypatch.setattr(scraper, "parse_tgsc_page_requests", fail_requests) | |
| assert scraper.parse_tgsc_page("https://example.test/material.html") == camofox_result | |
| def test_parse_tgsc_page_can_disable_fallback(monkeypatch) -> None: | |
| camofox_result = { | |
| "boiling_point_k": None, | |
| "vapor_pressure_pa": None, | |
| "odor_description": "", | |
| "error": "blocked", | |
| } | |
| monkeypatch.setattr(scraper, "parse_tgsc_page_camofox", lambda url: camofox_result) | |
| def fail_requests(url, timeout=30.0): | |
| raise AssertionError("requests fallback should not be called") | |
| monkeypatch.setattr(scraper, "parse_tgsc_page_requests", fail_requests) | |
| assert ( | |
| scraper.parse_tgsc_page( | |
| "https://example.test/material.html", | |
| fallback_to_requests=False, | |
| ) | |
| == camofox_result | |
| ) | |