From 160a175db940357f94c0248067fc4bd0152be294 Mon Sep 17 00:00:00 2001 From: Jirka Schaefer Date: Mon, 22 Jan 2024 17:25:22 +0100 Subject: [PATCH] svg must be in img file --- django_walletpass/admin.py | 40 +++++++++----- .../static/admin/passbook_icon.svg | 3 ++ django_walletpass/tests/main.py | 53 +++++++++++++++---- 3 files changed, 74 insertions(+), 22 deletions(-) create mode 100644 django_walletpass/static/admin/passbook_icon.svg diff --git a/django_walletpass/admin.py b/django_walletpass/admin.py index 36dbb36..f9a53e9 100644 --- a/django_walletpass/admin.py +++ b/django_walletpass/admin.py @@ -1,9 +1,9 @@ from django.contrib import admin +from django.template import Context, Template from django.urls import reverse from django.utils.html import format_html -from django.utils.safestring import mark_safe -from django_walletpass.models import Pass, Registration, Log +from django_walletpass.models import Log, Pass, Registration @admin.register(Log) @@ -20,7 +20,13 @@ class LogAdmin(admin.ModelAdmin): "msg", ) list_filter = ("status", "task_type", "pass_type_identifier") - search_fields = ("pass_type_identifier", "serial_number", "device_id", "msg", "message") + search_fields = ( + "pass_type_identifier", + "serial_number", + "device_id", + "msg", + "message", + ) readonly_fields = ("created_at", "pass_") raw_id_fields = ("pazz",) list_select_related = ("pazz",) @@ -28,7 +34,8 @@ class LogAdmin(admin.ModelAdmin): def pass_(self, obj: Log): if obj.pazz_id: url = reverse( - "admin:%s_%s_change" % (obj.pazz._meta.app_label, obj.pazz._meta.model_name), + "admin:%s_%s_change" + % (obj.pazz._meta.app_label, obj.pazz._meta.model_name), args=[obj.pazz_id], ) return format_html( @@ -43,22 +50,30 @@ def pass_(self, obj: Log): @admin.register(Pass) class PassAdmin(admin.ModelAdmin): - list_display = ("serial_number", "updated_at", "pass_type_identifier", "wallet_pass_") - search_fields = ("serial_number", "pass_type_identifier", "authentication_token", "data") + list_display = ( + "serial_number", + "updated_at", + "pass_type_identifier", + "wallet_pass_", + ) + search_fields = ( + "serial_number", + "pass_type_identifier", + "authentication_token", + "data", + ) list_filter = ("pass_type_identifier", "updated_at") date_hierarchy = "updated_at" readonly_fields = ("wallet_pass_", "updated_at") def wallet_pass_(self, obj: Pass): if obj.data: - svg_icon = '' \ - '' \ - '' return format_html( - "{icon}", + Template( + "{% load static %}" + ).render(Context({})), url=obj.data.url, title=obj.data.name, - icon=mark_safe(svg_icon), ) return @@ -75,7 +90,8 @@ class RegistrationAdmin(admin.ModelAdmin): def pass_(self, obj: Registration): if obj.pazz_id: url = reverse( - "admin:%s_%s_change" % (obj.pazz._meta.app_label, obj.pazz._meta.model_name), + "admin:%s_%s_change" + % (obj.pazz._meta.app_label, obj.pazz._meta.model_name), args=[obj.pazz_id], ) return format_html( diff --git a/django_walletpass/static/admin/passbook_icon.svg b/django_walletpass/static/admin/passbook_icon.svg new file mode 100644 index 0000000..555054e --- /dev/null +++ b/django_walletpass/static/admin/passbook_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/django_walletpass/tests/main.py b/django_walletpass/tests/main.py index b774f78..d5e659e 100644 --- a/django_walletpass/tests/main.py +++ b/django_walletpass/tests/main.py @@ -1,31 +1,64 @@ from unittest import mock from dateutil.parser import parse +from django.contrib import admin from django.test import TestCase from django.utils import timezone + from django_walletpass import crypto +from django_walletpass.admin import PassAdmin from django_walletpass.classviews import FORMAT from django_walletpass.models import Pass, PassBuilder, Registration from django_walletpass.settings import dwpconfig as WALLETPASS_CONF -class ClassViewsTestCase(TestCase): +class AdminTestCase(TestCase): + def test_wallet_pass(self): + admin_view = PassAdmin(Pass, admin.site) + builder = PassBuilder() + builder.pass_data = { + "formatVersion": 1, + "barcode": { + "message": "123456789", + "format": "PKBarcodeFormatPDF417", + "messageEncoding": "iso-8859-1", + }, + "organizationName": "Organic Produce", + "description": "Organic Produce Loyalty Card", + "logoText": "Organic Produce", + "foregroundColor": "rgb(255, 255, 255)", + "backgroundColor": "rgb(55, 117, 50)", + } + + builder.build() + + instance = builder.write_to_model() + instance.save() + + self.assertEqual( + admin_view.wallet_pass_(instance)[-48:], + "", + ) + +class ClassViewsTestCase(TestCase): def test_format_parse(self): - """ ensure dateutil reads FORMAT properly """ + """ensure dateutil reads FORMAT properly""" now = timezone.now() now_string = now.strftime(FORMAT) - self.assertEqual(parse(now_string), timezone.make_naive(now).replace(microsecond=0)) + self.assertEqual( + parse(now_string), timezone.make_naive(now).replace(microsecond=0) + ) class CryptoTestCase(TestCase): def test_smime_sign(self): crypto.pkcs7_sign( - certcontent=WALLETPASS_CONF['CERT_CONTENT'], - keycontent=WALLETPASS_CONF['KEY_CONTENT'], - wwdr_certificate=WALLETPASS_CONF['WWDRCA_PEM_CONTENT'], - data=b'data to be signed', - key_password=WALLETPASS_CONF['KEY_PASSWORD'], + certcontent=WALLETPASS_CONF["CERT_CONTENT"], + keycontent=WALLETPASS_CONF["KEY_CONTENT"], + wwdr_certificate=WALLETPASS_CONF["WWDRCA_PEM_CONTENT"], + data=b"data to be signed", + key_password=WALLETPASS_CONF["KEY_PASSWORD"], ) @@ -37,7 +70,7 @@ def test_build_pkpass(self): "barcode": { "message": "123456789", "format": "PKBarcodeFormatPDF417", - "messageEncoding": "iso-8859-1" + "messageEncoding": "iso-8859-1", }, "organizationName": "Organic Produce", "description": "Organic Produce Loyalty Card", @@ -57,7 +90,7 @@ def test_build_pkpass(self): self.assertEqual(builder.manifest_dict, builder2.manifest_dict) self.assertEqual(builder.pass_data, builder2.pass_data) - builder2.pass_data.update({"organizationName": 'test'}) + builder2.pass_data.update({"organizationName": "test"}) builder2.build() builder2.write_to_model(instance) instance.save()