Files
website-v2/versions/tests/test_models.py
2025-11-04 14:14:20 -08:00

168 lines
4.6 KiB
Python

import datetime
import pytest
from model_bakery import baker
def test_version_creation(version):
today = datetime.date.today()
assert version.release_date < today
def test_version_slug(version):
version.name = "New Name"
version.slug = None
version.save()
version.refresh_from_db()
assert version.slug is not None
assert version.slug == "new-name"
@pytest.mark.parametrize(
"name, expected_slug",
[
("boost-1.71.0", "boost-1-71-0"),
("boost-1.71.0.beta1", "boost-1-71-0"),
("boost-1.71.0.beta2", "boost-1-71-0"),
("boost-1.71.0.beta", "boost-1-71-0"),
("develop", "develop"),
],
)
def test_non_beta_slug(name, expected_slug):
version = baker.make("versions.Version", name=name)
assert version.non_beta_slug == expected_slug
@pytest.mark.parametrize(
"name, expected_slug",
[
("boost-1.71.0", "boost_1_71_0"),
("boost-1-71-0", "boost_1_71_0"),
("develop", "develop"),
],
)
def test_boost_url_slug(name, expected_slug):
version = baker.make("versions.Version", name=name)
assert version.boost_url_slug == expected_slug
def test_version_get_slug(db):
version = baker.prepare("versions.Version", name="Sample Library")
assert version.get_slug() == "sample-library"
def test_version_display_name(version):
version.name = "boost-1.81.0"
version.save()
assert version.display_name == "1.81.0"
version.name = "1.79.0"
version.save()
del version.display_name
assert version.display_name == "1.79.0"
def test_version_documentation_url(version):
version.slug = "boost-1.81.0"
version.save()
assert version.documentation_url == "/doc/libs/1_81_0"
@pytest.mark.parametrize(
"name,expected_cleaned_parts",
[
("boost-1.80.0", ["1", "80", "0"]),
("boost-1.79.0.beta1", ["1", "79", "0"]),
("Boost 1.80.9.beta", ["1", "80", "9"]),
("Version 1.82.0.beta1", ["1", "82", "0"]),
],
)
def test_cleaned_version_parts(name, expected_cleaned_parts, version):
"""Test the cleaned_version_parts property method"""
version.name = name
version.save()
assert version.cleaned_version_parts == expected_cleaned_parts
def test_release_notes_cache_key(version):
"""Test the release_notes_cache_key property method"""
expected = f"release_notes_{version.slug}"
assert version.release_notes_cache_key == expected
def test_version_file_creation(full_version_one):
assert full_version_one.downloads.count() == 3
@pytest.mark.parametrize(
"slug, expected",
[
("boost-1.75.0", "1_75_0"),
("develop", "develop"),
("boost_2.0.1", "2_0_1"),
],
)
def test_stripped_boost_url_slug(slug, expected, version):
version.slug = slug
version.save()
version.refresh_from_db()
assert version.stripped_boost_url_slug == expected
def test_get_absolute_url(version):
expected_url = f"/releases/{version.slug.replace('boost-', '').replace('-', '.')}/"
assert version.get_absolute_url() == expected_url
def test_review_results():
review = baker.make("versions.Review")
pending_result = baker.make(
"versions.ReviewResult", review=review, short_description="Pending"
)
assert pending_result.is_most_recent
accepted_result = baker.make(
"versions.ReviewResult", review=review, short_description="Accepted"
)
assert accepted_result.is_most_recent
pending_result.refresh_from_db()
assert not pending_result.is_most_recent
@pytest.mark.parametrize(
"version_name",
[
"boost-1.75.0",
"boost-1.81.0",
"boost-1.82.0.beta1",
"boost_1.75.0",
"boost_1_75_0",
"develop",
"master",
"1.75.0",
],
)
def test_report_configuration_slug_matches_version_slug_format(version_name):
"""
Test that ReportConfiguration.get_slug() produces the same format as
Version.get_slug() for the same version name.
This ensures consistency between the two models' slug generation.
"""
# Create a Version with the version name
version = baker.prepare("versions.Version", name=version_name, slug=None)
version_slug = version.get_slug()
# Create a ReportConfiguration with the same version name
report_config = baker.prepare("versions.ReportConfiguration", version=version_name)
report_config_slug = report_config.get_slug()
# Assert that both slugs match
assert version_slug == report_config_slug, (
f"Slug mismatch for version name '{version_name}': "
f"Version.get_slug() = '{version_slug}', "
f"ReportConfiguration.get_slug() = '{report_config_slug}'"
)