1
+ from __future__ import annotations
2
+
3
+ import pytest
4
+
1
5
from build_docs import Version , Versions
2
6
3
7
4
- def test_filter_default () -> None :
5
- # Arrange
6
- versions = Versions ([
8
+ @ pytest . fixture
9
+ def versions () -> Versions :
10
+ return Versions ([
7
11
Version (name = "3.14" , status = "in development" , branch_or_tag = "" ),
8
12
Version (name = "3.13" , status = "stable" , branch_or_tag = "" ),
9
13
Version (name = "3.12" , status = "stable" , branch_or_tag = "" ),
@@ -12,46 +16,98 @@ def test_filter_default() -> None:
12
16
Version (name = "3.9" , status = "security-fixes" , branch_or_tag = "" ),
13
17
])
14
18
19
+
20
+ def test_reversed (versions : Versions ) -> None :
15
21
# Act
16
- filtered = versions . filter ( )
22
+ output = list ( reversed ( versions ) )
17
23
18
24
# Assert
19
- assert filtered == [
20
- Version (name = "3.14" , status = "in development" , branch_or_tag = "" ),
25
+ assert output [0 ].name == "3.9"
26
+ assert output [- 1 ].name == "3.14"
27
+
28
+
29
+ def test_from_json () -> None :
30
+ # Arrange
31
+ json_data = {
32
+ "3.14" : {
33
+ "branch" : "main" ,
34
+ "pep" : 745 ,
35
+ "status" : "feature" ,
36
+ "first_release" : "2025-10-01" ,
37
+ "end_of_life" : "2030-10" ,
38
+ "release_manager" : "Hugo van Kemenade" ,
39
+ },
40
+ "3.13" : {
41
+ "branch" : "3.13" ,
42
+ "pep" : 719 ,
43
+ "status" : "bugfix" ,
44
+ "first_release" : "2024-10-07" ,
45
+ "end_of_life" : "2029-10" ,
46
+ "release_manager" : "Thomas Wouters" ,
47
+ },
48
+ }
49
+
50
+ # Act
51
+ versions = list (Versions .from_json (json_data ))
52
+
53
+ # Assert
54
+ assert versions == [
21
55
Version (name = "3.13" , status = "stable" , branch_or_tag = "" ),
22
- Version (name = "3.12 " , status = "stable " , branch_or_tag = "" ),
56
+ Version (name = "3.14 " , status = "in development " , branch_or_tag = "" ),
23
57
]
24
58
25
59
26
- def test_filter_one () -> None :
60
+ def test_from_json_error () -> None :
27
61
# Arrange
28
- versions = Versions ([
62
+ json_data = {"2.8" : {"branch" : "2.8" , "pep" : 404 , "status" : "ex-release" }}
63
+
64
+ # Act / Assert
65
+ with pytest .raises (
66
+ ValueError ,
67
+ match = "Saw invalid version status 'ex-release', expected to be one of" ,
68
+ ):
69
+ Versions .from_json (json_data )
70
+
71
+
72
+ def test_current_stable (versions ) -> None :
73
+ # Act
74
+ current_stable = versions .current_stable
75
+
76
+ # Assert
77
+ assert current_stable .name == "3.13"
78
+ assert current_stable .status == "stable"
79
+
80
+
81
+ def test_current_dev (versions ) -> None :
82
+ # Act
83
+ current_dev = versions .current_dev
84
+
85
+ # Assert
86
+ assert current_dev .name == "3.14"
87
+ assert current_dev .status == "in development"
88
+
89
+
90
+ def test_filter_default (versions ) -> None :
91
+ # Act
92
+ filtered = versions .filter ()
93
+
94
+ # Assert
95
+ assert filtered == [
29
96
Version (name = "3.14" , status = "in development" , branch_or_tag = "" ),
30
97
Version (name = "3.13" , status = "stable" , branch_or_tag = "" ),
31
98
Version (name = "3.12" , status = "stable" , branch_or_tag = "" ),
32
- Version (name = "3.11" , status = "security-fixes" , branch_or_tag = "" ),
33
- Version (name = "3.10" , status = "security-fixes" , branch_or_tag = "" ),
34
- Version (name = "3.9" , status = "security-fixes" , branch_or_tag = "" ),
35
- ])
99
+ ]
100
+
36
101
102
+ def test_filter_one (versions ) -> None :
37
103
# Act
38
104
filtered = versions .filter (["3.13" ])
39
105
40
106
# Assert
41
107
assert filtered == [Version (name = "3.13" , status = "security-fixes" , branch_or_tag = "" )]
42
108
43
109
44
- def test_filter_multiple () -> None :
45
- # Arrange
46
- versions = Versions ([
47
- Version (name = "3.14" , status = "in development" , branch_or_tag = "" ),
48
- Version (name = "3.13" , status = "stable" , branch_or_tag = "" ),
49
- Version (name = "3.12" , status = "stable" , branch_or_tag = "" ),
50
- Version (name = "3.11" , status = "security-fixes" , branch_or_tag = "" ),
51
- Version (name = "3.10" , status = "security-fixes" , branch_or_tag = "" ),
52
- Version (name = "3.9" , status = "security-fixes" , branch_or_tag = "" ),
53
- ])
54
-
110
+ def test_filter_multiple (versions ) -> None :
55
111
# Act
56
112
filtered = versions .filter (["3.13" , "3.14" ])
57
113
0 commit comments