|
| 1 | +import copy |
1 | 2 | import uuid |
2 | 3 | from unittest.mock import patch |
3 | 4 |
|
4 | 5 | from django.contrib.admin.sites import AdminSite |
5 | 6 | from django.contrib.auth import get_user_model |
6 | 7 | from django.core.cache import cache |
7 | | -from django.forms.widgets import Media, MediaOrderConflictWarning |
| 8 | +from django.forms.widgets import MediaOrderConflictWarning |
8 | 9 | from django.test import TestCase, override_settings, tag |
9 | 10 | from django.urls import reverse |
10 | 11 |
|
@@ -311,38 +312,61 @@ def test_object_notification_setting_empty(self): |
311 | 312 | OPENWISP_NOTIFICATIONS_IGNORE_ENABLED_ADMIN=["openwisp_users.admin.UserAdmin"], |
312 | 313 | ) |
313 | 314 | def test_object_notification_setting_configured(self): |
314 | | - _add_object_notification_widget() |
315 | | - response = self.client.get( |
316 | | - reverse(f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)) |
317 | | - ) |
318 | | - self.assertContains( |
319 | | - response, |
320 | | - 'src="/static/openwisp-notifications/js/object-notifications.js"', |
321 | | - 1, |
322 | | - ) |
323 | 315 |
|
324 | | - # If a ModelAdmin already has a Media class |
325 | | - with self.assertWarns(MediaOrderConflictWarning): |
| 316 | + original_media = getattr(UserAdmin, "Media", None) |
| 317 | + if original_media: |
| 318 | + original_js = copy.deepcopy(getattr(original_media, "js", None)) |
| 319 | + original_css = copy.deepcopy(getattr(original_media, "css", None)) |
| 320 | + else: |
| 321 | + original_js = None |
| 322 | + original_css = None |
| 323 | + try: |
326 | 324 | _add_object_notification_widget() |
327 | 325 | response = self.client.get( |
328 | 326 | reverse( |
329 | 327 | f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,) |
330 | 328 | ) |
331 | 329 | ) |
332 | | - |
333 | | - # If a ModelAdmin has list instances of js and css |
334 | | - UserAdmin.Media.css = {"all": list()} |
335 | | - UserAdmin.Media.js = list() |
336 | | - _add_object_notification_widget() |
337 | | - response = self.client.get( |
338 | | - reverse(f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)) |
339 | | - ) |
340 | | - |
341 | | - # If ModelAdmin has empty attributes |
342 | | - UserAdmin.Media.js = [] |
343 | | - UserAdmin.Media.css = {} |
344 | | - _add_object_notification_widget() |
345 | | - response = self.client.get( |
346 | | - reverse(f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)) |
347 | | - ) |
348 | | - UserAdmin.Media = Media() |
| 330 | + self.assertContains( |
| 331 | + response, |
| 332 | + 'src="/static/openwisp-notifications/js/object-notifications.js"', |
| 333 | + 1, |
| 334 | + ) |
| 335 | + with self.assertWarns(MediaOrderConflictWarning): |
| 336 | + _add_object_notification_widget() |
| 337 | + response = self.client.get( |
| 338 | + reverse( |
| 339 | + f"admin:{self.users_app_label}_user_change", |
| 340 | + args=(self.admin.pk,), |
| 341 | + ) |
| 342 | + ) |
| 343 | + UserAdmin.Media.css = {"all": list()} |
| 344 | + UserAdmin.Media.js = list() |
| 345 | + _add_object_notification_widget() |
| 346 | + response = self.client.get( |
| 347 | + reverse( |
| 348 | + f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,) |
| 349 | + ) |
| 350 | + ) |
| 351 | + UserAdmin.Media.js = [] |
| 352 | + UserAdmin.Media.css = {} |
| 353 | + _add_object_notification_widget() |
| 354 | + response = self.client.get( |
| 355 | + reverse( |
| 356 | + f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,) |
| 357 | + ) |
| 358 | + ) |
| 359 | + finally: |
| 360 | + if original_media is not None: |
| 361 | + UserAdmin.Media = original_media |
| 362 | + if original_js is not None: |
| 363 | + UserAdmin.Media.js = original_js |
| 364 | + elif hasattr(UserAdmin.Media, "js"): |
| 365 | + del UserAdmin.Media.js |
| 366 | + |
| 367 | + if original_css is not None: |
| 368 | + UserAdmin.Media.css = original_css |
| 369 | + elif hasattr(UserAdmin.Media, "css"): |
| 370 | + del UserAdmin.Media.css |
| 371 | + elif hasattr(UserAdmin, "Media"): |
| 372 | + delattr(UserAdmin, "Media") |
0 commit comments