Skip to content

Add more tests for Versions class #288

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
exclude_also =
# Don't complain if non-runnable code isn't run:
if __name__ == .__main__.:
if TYPE_CHECKING:
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ repos:
rev: v0.11.5
hooks:
- id: ruff
args: [--fix]
- id: ruff-format

- repo: https://github.com/python-jsonschema/check-jsonschema
Expand Down
104 changes: 80 additions & 24 deletions tests/test_build_docs_versions.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
from __future__ import annotations

import pytest

from build_docs import Version, Versions


def test_filter_default() -> None:
# Arrange
versions = Versions([
@pytest.fixture
def versions() -> Versions:
return Versions([
Version(name="3.14", status="in development", branch_or_tag=""),
Version(name="3.13", status="stable", branch_or_tag=""),
Version(name="3.12", status="stable", branch_or_tag=""),
Expand All @@ -12,46 +16,98 @@ def test_filter_default() -> None:
Version(name="3.9", status="security-fixes", branch_or_tag=""),
])


def test_reversed(versions: Versions) -> None:
# Act
filtered = versions.filter()
output = list(reversed(versions))

# Assert
assert filtered == [
Version(name="3.14", status="in development", branch_or_tag=""),
assert output[0].name == "3.9"
assert output[-1].name == "3.14"


def test_from_json() -> None:
# Arrange
json_data = {
"3.14": {
"branch": "main",
"pep": 745,
"status": "feature",
"first_release": "2025-10-01",
"end_of_life": "2030-10",
"release_manager": "Hugo van Kemenade",
},
"3.13": {
"branch": "3.13",
"pep": 719,
"status": "bugfix",
"first_release": "2024-10-07",
"end_of_life": "2029-10",
"release_manager": "Thomas Wouters",
},
}

# Act
versions = list(Versions.from_json(json_data))

# Assert
assert versions == [
Version(name="3.13", status="stable", branch_or_tag=""),
Version(name="3.12", status="stable", branch_or_tag=""),
Version(name="3.14", status="in development", branch_or_tag=""),
]


def test_filter_one() -> None:
def test_from_json_error() -> None:
# Arrange
versions = Versions([
json_data = {"2.8": {"branch": "2.8", "pep": 404, "status": "ex-release"}}

# Act / Assert
with pytest.raises(
ValueError,
match="Saw invalid version status 'ex-release', expected to be one of",
):
Versions.from_json(json_data)


def test_current_stable(versions) -> None:
# Act
current_stable = versions.current_stable

# Assert
assert current_stable.name == "3.13"
assert current_stable.status == "stable"


def test_current_dev(versions) -> None:
# Act
current_dev = versions.current_dev

# Assert
assert current_dev.name == "3.14"
assert current_dev.status == "in development"


def test_filter_default(versions) -> None:
# Act
filtered = versions.filter()

# Assert
assert filtered == [
Version(name="3.14", status="in development", branch_or_tag=""),
Version(name="3.13", status="stable", branch_or_tag=""),
Version(name="3.12", status="stable", branch_or_tag=""),
Version(name="3.11", status="security-fixes", branch_or_tag=""),
Version(name="3.10", status="security-fixes", branch_or_tag=""),
Version(name="3.9", status="security-fixes", branch_or_tag=""),
])
]


def test_filter_one(versions) -> None:
# Act
filtered = versions.filter(["3.13"])

# Assert
assert filtered == [Version(name="3.13", status="security-fixes", branch_or_tag="")]


def test_filter_multiple() -> None:
# Arrange
versions = Versions([
Version(name="3.14", status="in development", branch_or_tag=""),
Version(name="3.13", status="stable", branch_or_tag=""),
Version(name="3.12", status="stable", branch_or_tag=""),
Version(name="3.11", status="security-fixes", branch_or_tag=""),
Version(name="3.10", status="security-fixes", branch_or_tag=""),
Version(name="3.9", status="security-fixes", branch_or_tag=""),
])

def test_filter_multiple(versions) -> None:
# Act
filtered = versions.filter(["3.13", "3.14"])

Expand Down