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,49 @@ 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 (f"admin:{ self .app_name } _{ self .model . _meta . model_name } _add" )
3034 response = self .client .get (url )
3135 self .assertEqual (response .status_code , 200 )
3236
3337 def test_change_view (self ):
3438 url = reverse (
35- f"admin:{ self .app_name } _{ self .model_name } _change" ,
39+ f"admin:{ self .app_name } _{ self .model . _meta . model_name } _change" ,
3640 args = [self .task_result .id ],
3741 )
3842 response = self .client .get (url )
3943 self .assertEqual (response .status_code , 200 )
4044
4145
42- class TaskResultProxy ( TaskResult ):
43- class Meta :
44- proxy = True
45- app_label = "django_celery_results"
46+ class TaskResultProxyAdminTests ( TaskResultAdminTests ):
47+ @ classmethod
48+ def setUpClass ( cls ):
49+ super (). setUpClass ()
4650
51+ class TaskResultProxy (TaskResult ):
52+ class Meta :
53+ proxy = True
54+ app_label = "django_celery_results"
4755
48- admin .site .register (TaskResultProxy , TaskResultAdmin )
56+ cls .model = TaskResultProxy
57+ admin .site .register (TaskResultProxy , TaskResultAdmin )
4958
59+ # The temporary registration of admin requires refreshing the URL cache; otherwise, it cannot be resolved.
60+ default_resover = get_resolver ()
61+ cls .ori_url_patterns_0 = default_resover .url_patterns [0 ]
62+ get_resolver ().url_patterns [0 ] = path ("admin/" , admin .site .urls )
63+ clear_url_caches ()
5064
51- class TaskResultProxyAdminTests (TaskResultAdminTests ):
52- model_name = "taskresultproxy"
65+ @classmethod
66+ def tearDownClass (cls ):
67+ super ().tearDownClass ()
68+
69+ # Unregister the proxy model
70+ admin .site .unregister (cls .model )
71+ app_config = apps .get_app_config (cls .app_name )
72+ model_name = cls .model ._meta .model_name
73+ if model_name in app_config .models :
74+ del app_config .models [model_name ]
75+
76+ # Restore the original URL patterns
77+ get_resolver ().url_patterns [0 ] = cls .ori_url_patterns_0
78+ clear_url_caches ()
0 commit comments