1- import pytest
21from celery import uuid
2+ from django .apps import apps
33from django .contrib import admin
44from django .contrib .auth import get_user_model
55from django .test import TestCase
6- from django .urls import reverse
6+ from django .urls import (
7+ clear_url_caches ,
8+ get_resolver ,
9+ path ,
10+ reverse ,
11+ )
712
813from django_celery_results .admin import TaskResultAdmin
914from django_celery_results .models import TaskResult
1015
1116User = get_user_model ()
1217
1318
14- @pytest .mark .usefixtures ("depends_on_current_app" )
1519class TaskResultAdminTests (TestCase ):
1620 app_name = "django_celery_results"
17- model_name = "taskresult"
21+ model = TaskResult
1822
1923 def setUp (self ):
2024 self .admin_user = User .objects .create_superuser (
@@ -26,27 +30,52 @@ def setUp(self):
2630 )
2731
2832 def test_add_view (self ):
29- url = reverse (f"admin:{ self .app_name } _{ self .model_name } _add" )
33+ url = reverse (
34+ f"admin:{ self .app_name } _{ self .model ._meta .model_name } _add"
35+ )
3036 response = self .client .get (url )
3137 self .assertEqual (response .status_code , 200 )
3238
3339 def test_change_view (self ):
3440 url = reverse (
35- f"admin:{ self .app_name } _{ self .model_name } _change" ,
41+ f"admin:{ self .app_name } _{ self .model . _meta . model_name } _change" ,
3642 args = [self .task_result .id ],
3743 )
3844 response = self .client .get (url )
3945 self .assertEqual (response .status_code , 200 )
4046
4147
42- class TaskResultProxy (TaskResult ):
43- class Meta :
44- proxy = True
45- app_label = "django_celery_results"
48+ class TaskResultProxyAdminTests (TaskResultAdminTests ):
49+ @classmethod
50+ def setUpClass (cls ):
51+ super ().setUpClass ()
52+
53+ class TaskResultProxy (TaskResult ):
54+ class Meta :
55+ proxy = True
56+ app_label = "django_celery_results"
4657
58+ cls .model = TaskResultProxy
59+ admin .site .register (TaskResultProxy , TaskResultAdmin )
4760
48- admin .site .register (TaskResultProxy , TaskResultAdmin )
61+ # The temporary registration of admin requires refreshing the URL cache
62+ # Otherwise, it cannot be resolved
63+ default_resover = get_resolver ()
64+ cls .ori_url_patterns_0 = default_resover .url_patterns [0 ]
65+ get_resolver ().url_patterns [0 ] = path ("admin/" , admin .site .urls )
66+ clear_url_caches ()
4967
68+ @classmethod
69+ def tearDownClass (cls ):
70+ super ().tearDownClass ()
5071
51- class TaskResultProxyAdminTests (TaskResultAdminTests ):
52- model_name = "taskresultproxy"
72+ # Unregister the proxy model
73+ admin .site .unregister (cls .model )
74+ app_config = apps .get_app_config (cls .app_name )
75+ model_name = cls .model ._meta .model_name
76+ if model_name in app_config .models :
77+ del app_config .models [model_name ]
78+
79+ # Restore the original URL patterns
80+ get_resolver ().url_patterns [0 ] = cls .ori_url_patterns_0
81+ clear_url_caches ()
0 commit comments