|
1 |
| -import re |
| 1 | +import packaging |
| 2 | +from packaging.version import Version |
2 | 3 |
|
3 |
| -import graphql_server |
4 |
| -from graphql_server.version import VersionInfo, version, version_info |
| 4 | +from graphql_server.version import version, version_info |
5 | 5 |
|
6 |
| -_re_version = re.compile(r"(\d+)\.(\d+)\.(\d+)(?:([abc])(\d+))?$") |
| 6 | +RELEASE_LEVEL = {"alpha": "a", "beta": "b", "rc": "rc", "final": None} |
7 | 7 |
|
8 | 8 |
|
9 |
| -def test_create_version_info_from_fields(): |
10 |
| - v = VersionInfo(1, 2, 3, "alpha", 4) |
11 |
| - assert v.major == 1 |
12 |
| - assert v.minor == 2 |
13 |
| - assert v.micro == 3 |
14 |
| - assert v.releaselevel == "alpha" |
15 |
| - assert v.serial == 4 |
| 9 | +parsed_version = Version(version) |
16 | 10 |
|
17 | 11 |
|
18 |
| -def test_create_version_info_from_str(): |
19 |
| - v = VersionInfo.from_str("1.2.3") |
20 |
| - assert v.major == 1 |
21 |
| - assert v.minor == 2 |
22 |
| - assert v.micro == 3 |
23 |
| - assert v.releaselevel == "final" |
24 |
| - assert v.serial == 0 |
25 |
| - v = VersionInfo.from_str("1.2.3a4") |
26 |
| - assert v.major == 1 |
27 |
| - assert v.minor == 2 |
28 |
| - assert v.micro == 3 |
29 |
| - assert v.releaselevel == "alpha" |
30 |
| - assert v.serial == 4 |
31 |
| - v = VersionInfo.from_str("1.2.3beta4") |
32 |
| - assert v.major == 1 |
33 |
| - assert v.minor == 2 |
34 |
| - assert v.micro == 3 |
35 |
| - assert v.releaselevel == "beta" |
36 |
| - assert v.serial == 4 |
37 |
| - v = VersionInfo.from_str("12.34.56rc789") |
38 |
| - assert v.major == 12 |
39 |
| - assert v.minor == 34 |
40 |
| - assert v.micro == 56 |
41 |
| - assert v.releaselevel == "candidate" |
42 |
| - assert v.serial == 789 |
| 12 | +def test_valid_version() -> None: |
| 13 | + packaging.version.parse(version) |
43 | 14 |
|
44 | 15 |
|
45 |
| -def test_serialize_as_str(): |
46 |
| - v = VersionInfo(1, 2, 3, "final", 0) |
47 |
| - assert str(v) == "1.2.3" |
48 |
| - v = VersionInfo(1, 2, 3, "alpha", 4) |
49 |
| - assert str(v) == "1.2.3a4" |
| 16 | +def test_valid_version_info() -> None: |
| 17 | + """version_info has to be a tuple[int, int, int, str, int]""" |
| 18 | + assert isinstance(version_info, tuple) |
| 19 | + assert len(version_info) == 5 |
50 | 20 |
|
| 21 | + major, minor, micro, release_level, serial = version_info |
| 22 | + assert isinstance(major, int) |
| 23 | + assert isinstance(minor, int) |
| 24 | + assert isinstance(micro, int) |
| 25 | + assert isinstance(release_level, str) |
| 26 | + assert isinstance(serial, int) |
51 | 27 |
|
52 |
| -def test_base_package_has_correct_version(): |
53 |
| - assert graphql_server.__version__ == version |
54 |
| - assert graphql_server.version == version |
55 | 28 |
|
| 29 | +def test_valid_version_release_level() -> None: |
| 30 | + if parsed_version.pre is not None: |
| 31 | + valid_release_levels = {v for v in RELEASE_LEVEL.values() if v is not None} |
| 32 | + assert parsed_version.pre[0] in valid_release_levels |
56 | 33 |
|
57 |
| -def test_base_package_has_correct_version_info(): |
58 |
| - assert graphql_server.__version_info__ is version_info |
59 |
| - assert graphql_server.version_info is version_info |
60 | 34 |
|
| 35 | +def test_valid_version_info_release_level() -> None: |
| 36 | + assert version_info[3] in RELEASE_LEVEL.keys() |
61 | 37 |
|
62 |
| -def test_version_has_correct_format(): |
63 |
| - assert isinstance(version, str) |
64 |
| - assert _re_version.match(version) |
65 | 38 |
|
| 39 | +def test_version_same_as_version_info() -> None: |
| 40 | + assert ( |
| 41 | + parsed_version.major, |
| 42 | + parsed_version.minor, |
| 43 | + parsed_version.micro, |
| 44 | + ) == version_info[:3] |
66 | 45 |
|
67 |
| -def test_version_info_has_correct_fields(): |
68 |
| - assert isinstance(version_info, tuple) |
69 |
| - assert str(version_info) == version |
70 |
| - groups = _re_version.match(version).groups() # type: ignore |
71 |
| - assert version_info.major == int(groups[0]) |
72 |
| - assert version_info.minor == int(groups[1]) |
73 |
| - assert version_info.micro == int(groups[2]) |
74 |
| - if groups[3] is None: # pragma: no cover |
75 |
| - assert groups[4] is None |
76 |
| - else: # pragma: no cover |
77 |
| - assert version_info.releaselevel[:1] == groups[3] |
78 |
| - assert version_info.serial == int(groups[4]) |
| 46 | + release_level, serial = version_info[-2:] |
| 47 | + if parsed_version.is_prerelease: |
| 48 | + assert (RELEASE_LEVEL[release_level], serial) == parsed_version.pre |
| 49 | + else: |
| 50 | + assert (release_level, serial) == ("final", 0) |
0 commit comments