Skip to content
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
30 changes: 29 additions & 1 deletion cookie_consent/admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
from django.contrib import admin
from django.db.models import Count
from django.templatetags.l10n import localize
from django.templatetags.static import static
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _

from .conf import settings
from .models import Cookie, CookieGroup, LogItem
Expand All @@ -12,7 +17,14 @@ class CookieAdmin(admin.ModelAdmin):


class CookieGroupAdmin(admin.ModelAdmin):
list_display = ("varname", "name", "is_required", "is_deletable", "get_version")
list_display = (
"varname",
"name",
"is_required",
"is_deletable",
"num_cookies",
"get_version",
)
search_fields = (
"varname",
"name",
Expand All @@ -22,6 +34,22 @@ class CookieGroupAdmin(admin.ModelAdmin):
"is_deletable",
)

def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.annotate(num_cookies=Count("cookie"))

@admin.display(ordering="num_cookies", description=_("# cookies"))
def num_cookies(self, obj):
if (count := obj.num_cookies) > 0:
return localize(count)

return format_html(
'{count} <img src="{src}" alt="{alt}">',
count=localize(count),
src=static("admin/img/icon-alert.svg"),
alt=_("Warning icon for missing cookies in cookie group."),
)


class LogItemAdmin(admin.ModelAdmin):
list_display = ("action", "cookiegroup", "version", "created")
Expand Down
24 changes: 24 additions & 0 deletions tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from django.test import Client
from django.urls import reverse

import pytest
from pytest_django.asserts import assertContains

from cookie_consent.models import CookieGroup

pytestmark = pytest.mark.django_db


def test_warning_icon_for_missing_cookies(
admin_client: Client,
required_cookiegroup: CookieGroup,
optional_cookiegroup: CookieGroup,
):
optional_cookiegroup.cookie_set.all().delete()

admin_list_response = admin_client.get(
reverse("admin:cookie_consent_cookiegroup_changelist")
)

assert admin_list_response.status_code == 200
assertContains(admin_list_response, "admin/img/icon-alert", count=1)