Skip to content

Commit 84a749e

Browse files
hugovkAA-Turner
andauthored
Add more tests for Versions class (#288)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
1 parent c1be80e commit 84a749e

File tree

3 files changed

+82
-24
lines changed

3 files changed

+82
-24
lines changed

.coveragerc

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@
55
exclude_also =
66
# Don't complain if non-runnable code isn't run:
77
if __name__ == .__main__.:
8+
if TYPE_CHECKING:

.pre-commit-config.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ repos:
1717
rev: v0.11.5
1818
hooks:
1919
- id: ruff
20+
args: [--fix]
2021
- id: ruff-format
2122

2223
- repo: https://github.com/python-jsonschema/check-jsonschema

tests/test_build_docs_versions.py

+80-24
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
from __future__ import annotations
2+
3+
import pytest
4+
15
from 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

Comments
 (0)