1
1
import re
2
+ from typing import Tuple , Union
3
+
4
+ import pytest
2
5
3
6
import graphql_server
4
7
from graphql_server .version import VersionInfo , version , version_info
5
8
6
- _re_version = re .compile (r"(\d+)\.(\d+)\.(\d+)(?:([abc])(\d+))?$" )
7
-
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
16
-
17
-
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
43
-
44
-
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"
50
-
51
-
52
- def test_base_package_has_correct_version ():
9
+ _re_version = re .compile (r"(\d+)\.(\d+)\.(\d+)(?:([abc]|rc)(\d+))?$" )
10
+
11
+ TEST_CASES = [
12
+ (
13
+ (1 , 2 , 3 ),
14
+ "1.2.3" ,
15
+ ),
16
+ (
17
+ (1 , 2 , 3 , "alpha" , 4 ),
18
+ "1.2.3a4" ,
19
+ ),
20
+ (
21
+ (1 , 2 , 3 , "beta" , 4 ),
22
+ "1.2.3b4" ,
23
+ ),
24
+ (
25
+ (12 , 34 , 56 , "candidate" , 789 ),
26
+ "12.34.56rc789" ,
27
+ ),
28
+ ]
29
+
30
+
31
+ PARSED_VERSIONS = [parsed_version for parsed_version , _ in TEST_CASES ]
32
+ VERSION_STRINGS = [version_string for _ , version_string in TEST_CASES ]
33
+
34
+
35
+ def extract_version_components (
36
+ parsed_version : Union [Tuple [int , int , int ], Tuple [int , int , int , str , int ]],
37
+ ) -> Tuple [int , int , int , str , int ]:
38
+ if len (parsed_version ) == 5 :
39
+ return parsed_version # type: ignore
40
+ elif len (parsed_version ) == 3 :
41
+ return tuple ([* parsed_version , "final" , 0 ]) # type: ignore
42
+
43
+ raise ValueError ("parsed_version length should be either 3 or 5" )
44
+
45
+
46
+ @pytest .mark .parametrize ("parsed_version" , PARSED_VERSIONS )
47
+ def test_create_version_info_from_fields (
48
+ parsed_version : Union [Tuple [int , int , int ], Tuple [int , int , int , str , int ]],
49
+ ) -> None :
50
+ version_components = extract_version_components (parsed_version )
51
+ major , minor , micro , releaselevel , serial = version_components
52
+ v = VersionInfo (* version_components )
53
+
54
+ assert v .major == major
55
+ assert v .minor == minor
56
+ assert v .micro == micro
57
+ assert v .releaselevel == releaselevel
58
+ assert v .serial == serial
59
+
60
+
61
+ @pytest .mark .parametrize ("parsed_version, version_string" , TEST_CASES )
62
+ def test_create_version_info_from_str (
63
+ parsed_version : Union [Tuple [int , int , int ], Tuple [int , int , int , str , int ]],
64
+ version_string : str ,
65
+ ) -> None :
66
+ v = VersionInfo .from_str (version_string )
67
+ major , minor , micro , releaselevel , serial = extract_version_components (
68
+ parsed_version
69
+ )
70
+
71
+ assert v .major == major
72
+ assert v .minor == minor
73
+ assert v .micro == micro
74
+ assert v .releaselevel == releaselevel
75
+ assert v .serial == serial
76
+
77
+
78
+ @pytest .mark .parametrize ("parsed_version, version_string" , TEST_CASES )
79
+ def test_serialize_as_str (
80
+ parsed_version : Union [Tuple [int , int , int ], Tuple [int , int , int , str , int ]],
81
+ version_string : str ,
82
+ ) -> None :
83
+ v = VersionInfo (* extract_version_components (parsed_version ))
84
+ assert str (v ) == version_string
85
+
86
+
87
+ def test_base_package_has_correct_version () -> None :
53
88
assert graphql_server .__version__ == version
54
89
assert graphql_server .version == version
55
90
56
91
57
- def test_base_package_has_correct_version_info ():
92
+ def test_base_package_has_correct_version_info () -> None :
58
93
assert graphql_server .__version_info__ is version_info
59
94
assert graphql_server .version_info is version_info
60
95
61
96
62
- def test_version_has_correct_format ():
97
+ @pytest .mark .parametrize ("version" , VERSION_STRINGS + [version ])
98
+ def test_version_has_correct_format (version : str ) -> None :
63
99
assert isinstance (version , str )
64
100
assert _re_version .match (version )
65
101
66
102
67
- def test_version_info_has_correct_fields ():
103
+ @pytest .mark .parametrize (
104
+ "version,version_info" ,
105
+ zip (
106
+ VERSION_STRINGS + [version ],
107
+ [VersionInfo .from_str (v ) for v in VERSION_STRINGS ] + [version_info ],
108
+ ),
109
+ )
110
+ def test_version_info_has_correct_fields (
111
+ version : str , version_info : VersionInfo
112
+ ) -> None :
68
113
assert isinstance (version_info , tuple )
69
114
assert str (version_info ) == version
70
115
groups = _re_version .match (version ).groups () # type: ignore
@@ -74,5 +119,8 @@ def test_version_info_has_correct_fields():
74
119
if groups [3 ] is None : # pragma: no cover
75
120
assert groups [4 ] is None
76
121
else : # pragma: no cover
77
- assert version_info .releaselevel [:1 ] == groups [3 ]
122
+ if version_info .releaselevel == "candidate" :
123
+ assert groups [3 ] == "rc"
124
+ else :
125
+ assert version_info .releaselevel [:1 ] == groups [3 ]
78
126
assert version_info .serial == int (groups [4 ])
0 commit comments