File size: 1,686 Bytes
71ab242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
74
75
76
77
78
79
80
81
from __future__ import annotations

import json
from pathlib import Path

import pytest

from extraction.schemas import (
    ExtractClaimsRequest,
    normalize_pubmed_language,
)


ROOT = Path(__file__).resolve().parents[1]
EXAMPLE = (
    ROOT
    / "contracts"
    / "extract-claims.request.example.json"
)


@pytest.mark.parametrize(
    ("pubmed_code", "expected"),
    [
        ("eng", "en"),
        ("fre", "fr"),
        ("fra", "fr"),
        ("ger", "de"),
        ("deu", "de"),
        ("spa", "es"),
        ("ita", "it"),
        ("por", "pt"),
        ("dut", "nl"),
        ("nld", "nl"),
        ("chi", "zh"),
        ("zho", "zh"),
        ("jpn", "ja"),
        ("ara", "ar"),
        ("rus", "ru"),
    ],
)
def test_normalize_pubmed_iso639_2(
    pubmed_code: str,
    expected: str,
) -> None:
    assert (
        normalize_pubmed_language(pubmed_code)
        == expected
    )


def test_existing_iso639_1_is_preserved() -> None:
    assert normalize_pubmed_language("en") == "en"
    assert normalize_pubmed_language("fr") == "fr"
    assert normalize_pubmed_language("pt-BR") == "pt-BR"


def test_extract_request_accepts_real_pubmed_eng() -> None:
    payload = json.loads(
        EXAMPLE.read_text(encoding="utf-8")
    )

    payload["article"]["language"] = "eng"

    parsed = ExtractClaimsRequest.model_validate(
        payload
    )

    assert parsed.article.language == "en"


def test_unknown_three_letter_code_is_rejected() -> None:
    payload = json.loads(
        EXAMPLE.read_text(encoding="utf-8")
    )

    payload["article"]["language"] = "xyz"

    with pytest.raises(Exception):
        ExtractClaimsRequest.model_validate(payload)