mirror of
https://github.com/boostorg/website-v2.git
synced 2026-02-27 17:42:08 +00:00
Filter out versions without libraries
- Create a get_versions() method in the LibraryListView that filters out versions that don't have any libraries from the drop-down menu - Ensure that the active() manager is unaffected, so the versions are still valid for the query string, only hidden in the drop-down menu
This commit is contained in:
@@ -5,21 +5,34 @@ from dateutil.relativedelta import relativedelta
|
||||
|
||||
from model_bakery import baker
|
||||
|
||||
from versions.models import Version
|
||||
|
||||
|
||||
def test_library_list(library_version, tp, url_name="libraries"):
|
||||
"""GET /libraries/"""
|
||||
last_year = datetime.date.today() - datetime.timedelta(days=365)
|
||||
# Create a version with a library
|
||||
last_year = library_version.version.release_date - datetime.timedelta(days=365)
|
||||
v2 = baker.make("versions.Version", name="Version 1.78.0", release_date=last_year)
|
||||
lib2 = baker.make(
|
||||
"libraries.Library",
|
||||
name="sample",
|
||||
)
|
||||
baker.make("libraries.LibraryVersion", library=lib2, version=v2)
|
||||
|
||||
# Create a version with no libraries
|
||||
v_no_libraries = baker.make(
|
||||
"versions.Version", name="No Libraries", release_date=last_year
|
||||
)
|
||||
|
||||
# Confirm that you know which version is the most recent
|
||||
assert library_version.version == Version.objects.most_recent()
|
||||
|
||||
res = tp.get(url_name)
|
||||
tp.response_200(res)
|
||||
assert "library_list" in res.context
|
||||
assert library_version.library in res.context["library_list"]
|
||||
assert lib2 not in res.context["library_list"]
|
||||
assert v_no_libraries not in res.context["versions"]
|
||||
|
||||
|
||||
def test_library_list_mini(library_version, tp):
|
||||
|
||||
@@ -3,6 +3,7 @@ import structlog
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.http import Http404
|
||||
from django.db.models import Count
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
from django.views.generic import DetailView, ListView
|
||||
from django.views.generic.edit import FormMixin
|
||||
@@ -52,7 +53,7 @@ class LibraryList(VersionAlertMixin, ListView):
|
||||
else:
|
||||
context["version"] = Version.objects.most_recent()
|
||||
context["categories"] = self.get_categories(context["version"])
|
||||
context["versions"] = Version.objects.active().order_by("-release_date")
|
||||
context["versions"] = self.get_versions()
|
||||
context["library_list"] = self.get_queryset()
|
||||
return context
|
||||
|
||||
@@ -63,6 +64,28 @@ class LibraryList(VersionAlertMixin, ListView):
|
||||
.order_by("name")
|
||||
)
|
||||
|
||||
def get_versions(self):
|
||||
"""
|
||||
Return a queryset of all versions to display in the version dropdown.
|
||||
"""
|
||||
versions = Version.objects.active().order_by("-release_date")
|
||||
|
||||
# Annotate each version with the number of libraries it has
|
||||
versions = versions.annotate(
|
||||
library_count=Count("library_version", distinct=True)
|
||||
).order_by("-release_date")
|
||||
|
||||
# Filter out versions with no libraries
|
||||
versions = versions.filter(library_count__gt=0)
|
||||
|
||||
most_recent_version = Version.objects.most_recent()
|
||||
|
||||
# Confirm the most recent v is in the queryset, even if it has no libraries
|
||||
if most_recent_version not in versions:
|
||||
versions = versions | Version.objects.filter(pk=most_recent_version.pk)
|
||||
|
||||
return versions
|
||||
|
||||
|
||||
class LibraryListMini(LibraryList):
|
||||
"""Flat list version of LibraryList"""
|
||||
|
||||
Reference in New Issue
Block a user