Skip to content

Commit 263f3cc

Browse files
Merge pull request #153 from django-commons/feature/show-warning-in-admin
✨ Display warning icon when cookiegroup has no cookies
2 parents b6aec9f + 87faf7e commit 263f3cc

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

cookie_consent/admin.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
from django.contrib import admin
2+
from django.db.models import Count
3+
from django.templatetags.l10n import localize
4+
from django.templatetags.static import static
5+
from django.utils.html import format_html
6+
from django.utils.translation import gettext_lazy as _
27

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

1318

1419
class CookieGroupAdmin(admin.ModelAdmin):
15-
list_display = ("varname", "name", "is_required", "is_deletable", "get_version")
20+
list_display = (
21+
"varname",
22+
"name",
23+
"is_required",
24+
"is_deletable",
25+
"num_cookies",
26+
"get_version",
27+
)
1628
search_fields = (
1729
"varname",
1830
"name",
@@ -22,6 +34,22 @@ class CookieGroupAdmin(admin.ModelAdmin):
2234
"is_deletable",
2335
)
2436

37+
def get_queryset(self, request):
38+
qs = super().get_queryset(request)
39+
return qs.annotate(num_cookies=Count("cookie"))
40+
41+
@admin.display(ordering="num_cookies", description=_("# cookies"))
42+
def num_cookies(self, obj):
43+
if (count := obj.num_cookies) > 0:
44+
return localize(count)
45+
46+
return format_html(
47+
'{count} <img src="{src}" alt="{alt}">',
48+
count=localize(count),
49+
src=static("admin/img/icon-alert.svg"),
50+
alt=_("Warning icon for missing cookies in cookie group."),
51+
)
52+
2553

2654
class LogItemAdmin(admin.ModelAdmin):
2755
list_display = ("action", "cookiegroup", "version", "created")

tests/test_admin.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from django.test import Client
2+
from django.urls import reverse
3+
4+
import pytest
5+
from pytest_django.asserts import assertContains
6+
7+
from cookie_consent.models import CookieGroup
8+
9+
pytestmark = pytest.mark.django_db
10+
11+
12+
def test_warning_icon_for_missing_cookies(
13+
admin_client: Client,
14+
required_cookiegroup: CookieGroup,
15+
optional_cookiegroup: CookieGroup,
16+
):
17+
optional_cookiegroup.cookie_set.all().delete()
18+
19+
admin_list_response = admin_client.get(
20+
reverse("admin:cookie_consent_cookiegroup_changelist")
21+
)
22+
23+
assert admin_list_response.status_code == 200
24+
assertContains(admin_list_response, "admin/img/icon-alert", count=1)

0 commit comments

Comments
 (0)