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
22+ urlconf = None
1823
1924 def setUp (self ):
2025 self .admin_user = User .objects .create_superuser (
@@ -26,27 +31,49 @@ def setUp(self):
2631 )
2732
2833 def test_add_view (self ):
29- url = reverse (f"admin:{ self .app_name } _{ self .model_name } _add" )
34+ url = reverse (f"admin:{ self .app_name } _{ self .model . _meta . model_name } _add" )
3035 response = self .client .get (url )
3136 self .assertEqual (response .status_code , 200 )
3237
3338 def test_change_view (self ):
3439 url = reverse (
35- f"admin:{ self .app_name } _{ self .model_name } _change" ,
40+ f"admin:{ self .app_name } _{ self .model . _meta . model_name } _change" ,
3641 args = [self .task_result .id ],
3742 )
3843 response = self .client .get (url )
3944 self .assertEqual (response .status_code , 200 )
4045
4146
42- class TaskResultProxy ( TaskResult ):
43- class Meta :
44- proxy = True
45- app_label = "django_celery_results"
47+ class TaskResultProxyAdminTests ( TaskResultAdminTests ):
48+ @ classmethod
49+ def setUpClass ( cls ):
50+ super (). setUpClass ()
4651
52+ class TaskResultProxy (TaskResult ):
53+ class Meta :
54+ proxy = True
55+ app_label = "django_celery_results"
4756
48- admin .site .register (TaskResultProxy , TaskResultAdmin )
57+ cls .model = TaskResultProxy
58+ admin .site .register (TaskResultProxy , TaskResultAdmin )
4959
60+ # The temporary registration of admin requires refreshing the URL cache; otherwise, it cannot be resolved.
61+ default_resover = get_resolver ()
62+ cls .ori_url_patterns_0 = default_resover .url_patterns [0 ]
63+ get_resolver ().url_patterns [0 ] = path ("admin/" , admin .site .urls )
64+ clear_url_caches ()
5065
51- class TaskResultProxyAdminTests (TaskResultAdminTests ):
52- model_name = "taskresultproxy"
66+ @classmethod
67+ def tearDownClass (cls ):
68+ super ().tearDownClass ()
69+
70+ # Unregister the proxy model
71+ admin .site .unregister (cls .model )
72+ app_config = apps .get_app_config (cls .app_name )
73+ model_name = cls .model ._meta .model_name
74+ if model_name in app_config .models :
75+ del app_config .models [model_name ]
76+
77+ # Restore the original URL patterns
78+ get_resolver ().url_patterns [0 ] = cls .ori_url_patterns_0
79+ clear_url_caches ()
0 commit comments