File size: 2,139 Bytes
aa64aba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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
    )