1+ from __future__ import annotations
2+
3+ import pytest
4+
15from build_docs import Version , Versions
26
37
4- def test_filter_default () -> None :
5- # Arrange
6- versions = Versions ([
8+ @ pytest . fixture
9+ def versions () -> Versions :
10+ return Versions ([
711 Version (name = "3.14" , status = "in development" , branch_or_tag = "" ),
812 Version (name = "3.13" , status = "stable" , branch_or_tag = "" ),
913 Version (name = "3.12" , status = "stable" , branch_or_tag = "" ),
@@ -12,46 +16,98 @@ def test_filter_default() -> None:
1216 Version (name = "3.9" , status = "security-fixes" , branch_or_tag = "" ),
1317 ])
1418
19+
20+ def test_reversed (versions : Versions ) -> None :
1521 # Act
16- filtered = versions . filter ( )
22+ output = list ( reversed ( versions ) )
1723
1824 # 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 == [
2155 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 = "" ),
2357 ]
2458
2559
26- def test_filter_one () -> None :
60+ def test_from_json_error () -> None :
2761 # 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 == [
2996 Version (name = "3.14" , status = "in development" , branch_or_tag = "" ),
3097 Version (name = "3.13" , status = "stable" , branch_or_tag = "" ),
3198 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+
36101
102+ def test_filter_one (versions ) -> None :
37103 # Act
38104 filtered = versions .filter (["3.13" ])
39105
40106 # Assert
41107 assert filtered == [Version (name = "3.13" , status = "security-fixes" , branch_or_tag = "" )]
42108
43109
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 :
55111 # Act
56112 filtered = versions .filter (["3.13" , "3.14" ])
57113
0 commit comments