From 96f2f3d93e165b02eebad618f13035a209f6cd4c Mon Sep 17 00:00:00 2001 From: Denis Date: Thu, 4 Jan 2018 17:49:39 +0100 Subject: [PATCH] Fixed resource_url to work with non-id models (#147) * Fixed resource_url to work with non-id models * Add tests for auditlog admin --- src/auditlog/mixins.py | 3 ++- src/auditlog_tests/test_settings.py | 30 ++++++++++++++++++++++++++--- src/auditlog_tests/tests.py | 28 +++++++++++++++++++++++++++ src/auditlog_tests/urls.py | 13 +++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 src/auditlog_tests/urls.py diff --git a/src/auditlog/mixins.py b/src/auditlog/mixins.py index 3bea200..469c008 100644 --- a/src/auditlog/mixins.py +++ b/src/auditlog/mixins.py @@ -34,7 +34,8 @@ class LogEntryAdminMixin(object): app_label, model = obj.content_type.app_label, obj.content_type.model viewname = 'admin:%s_%s_change' % (app_label, model) try: - link = urlresolvers.reverse(viewname, args=[obj.object_id]) + args = [obj.object_pk] if obj.object_id is None else [obj.object_id] + link = urlresolvers.reverse(viewname, args=args) except NoReverseMatch: return obj.object_repr else: diff --git a/src/auditlog_tests/test_settings.py b/src/auditlog_tests/test_settings.py index 59541a4..04b443a 100644 --- a/src/auditlog_tests/test_settings.py +++ b/src/auditlog_tests/test_settings.py @@ -1,6 +1,7 @@ """ Settings file for the Auditlog test suite. """ +import os import django SECRET_KEY = 'test' @@ -8,18 +9,27 @@ SECRET_KEY = 'test' INSTALLED_APPS = [ 'django.contrib.auth', 'django.contrib.contenttypes', + 'django.contrib.messages', 'django.contrib.sessions', + 'django.contrib.admin', 'auditlog', 'auditlog_tests', 'multiselectfield', ] -MIDDLEWARE_CLASSES = ( +middlewares = ( 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware' + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', 'auditlog.middleware.AuditlogMiddleware', ) +if django.VERSION < (1, 10): + MIDDLEWARE_CLASSES = middlewares +else: + MIDDLEWARE = middlewares + if django.VERSION <= (1, 9): POSTGRES_DRIVER = 'django.db.backends.postgresql_psycopg2' else: @@ -42,6 +52,20 @@ DATABASES = { } } -ROOT_URLCONF = [] +TEMPLATES = [ + { + 'APP_DIRS': True, + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'OPTIONS': { + 'context_processors': [ + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ] + }, + }, +] + +ROOT_URLCONF = 'auditlog_tests.urls' USE_TZ = True diff --git a/src/auditlog_tests/tests.py b/src/auditlog_tests/tests.py index 3ad6e7e..fc958f6 100644 --- a/src/auditlog_tests/tests.py +++ b/src/auditlog_tests/tests.py @@ -619,3 +619,31 @@ class CompatibilityTest(TestCase): else: assert not self.user.is_anonymous assert compat.is_authenticated(self.user) + + +class AdminPanelTest(TestCase): + @classmethod + def setUpTestData(cls): + cls.username = "test_admin" + cls.password = User.objects.make_random_password() + cls.user, created = User.objects.get_or_create(username=cls.username) + cls.user.set_password(cls.password) + cls.user.is_staff = True + cls.user.is_superuser = True + cls.user.is_active = True + cls.user.save() + cls.obj = SimpleModel.objects.create(text='For admin logentry test') + + def test_auditlog_admin(self): + self.client.login(username=self.username, password=self.password) + log_pk = self.obj.history.latest().pk + res = self.client.get("/admin/auditlog/logentry/") + assert res.status_code == 200 + res = self.client.get("/admin/auditlog/logentry/add/") + assert res.status_code == 200 + res = self.client.get("/admin/auditlog/logentry/{}/".format(log_pk), follow=True) + assert res.status_code == 200 + res = self.client.get("/admin/auditlog/logentry/{}/delete/".format(log_pk)) + assert res.status_code == 200 + res = self.client.get("/admin/auditlog/logentry/{}/history/".format(log_pk)) + assert res.status_code == 200 diff --git a/src/auditlog_tests/urls.py b/src/auditlog_tests/urls.py new file mode 100644 index 0000000..c9346f2 --- /dev/null +++ b/src/auditlog_tests/urls.py @@ -0,0 +1,13 @@ +import django +from django.conf.urls import include, url +from django.contrib import admin + + +if django.VERSION < (1, 9): + admin_urls = include(admin.site.urls) +else: + admin_urls = admin.site.urls + +urlpatterns = [ + url(r'^admin/', admin_urls), +]