File: test_scripts.py

package info (click to toggle)
pydantic-extra-types 2.11.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 852 kB
  • sloc: python: 7,589; makefile: 48
file content (53 lines) | stat: -rw-r--r-- 1,618 bytes parent folder | download | duplicates (2)
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
import re

import pycountry
import pytest
from pydantic import BaseModel, ValidationError

from pydantic_extra_types.script_code import ISO_15924


class ScriptCheck(BaseModel):
    script: ISO_15924


@pytest.mark.parametrize('script', map(lambda lang: lang.alpha_4, pycountry.scripts))
def test_ISO_15924_code_ok(script: str):
    model = ScriptCheck(script=script)
    assert model.script == script
    assert str(model.script) == script
    assert model.model_dump() == {'script': script}  # test serialization


def test_ISO_15924_code_fail_not_enought_letters():
    with pytest.raises(
        ValidationError,
        match=re.escape(
            '1 validation error for ScriptCheck\nscript\n  '
            "String should have at least 4 characters [type=string_too_short, input_value='X', input_type=str]\n"
        ),
    ):
        ScriptCheck(script='X')


def test_ISO_15924_code_fail_too_much_letters():
    with pytest.raises(
        ValidationError,
        match=re.escape(
            '1 validation error for ScriptCheck\nscript\n  '
            "String should have at most 4 characters [type=string_too_long, input_value='Klingon', input_type=str]"
        ),
    ):
        ScriptCheck(script='Klingon')


def test_ISO_15924_code_fail_not_existing():
    with pytest.raises(
        ValidationError,
        match=re.escape(
            '1 validation error for ScriptCheck\nscript\n  '
            'Invalid ISO 15924 script code. See https://en.wikipedia.org/wiki/ISO_15924 '
            "[type=ISO_15924, input_value='Klin', input_type=str]"
        ),
    ):
        ScriptCheck(script='Klin')