Skip to content

Commit 1d6998b

Browse files
shivsubhnemesifier
andauthored
[tests:fix] Fixed test environment pollution in TestAdminMedia #405
Closes #405 --------- Co-authored-by: Federico Capoano <f.capoano@openwisp.io>
1 parent d5b5bb9 commit 1d6998b

2 files changed

Lines changed: 57 additions & 34 deletions

File tree

openwisp_notifications/tests/test_admin.py

Lines changed: 55 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import copy
12
import uuid
23
from unittest.mock import patch
34

45
from django.contrib.admin.sites import AdminSite
56
from django.contrib.auth import get_user_model
67
from django.core.cache import cache
7-
from django.forms.widgets import Media, MediaOrderConflictWarning
8+
from django.forms.widgets import MediaOrderConflictWarning
89
from django.test import TestCase, override_settings, tag
910
from django.urls import reverse
1011

@@ -311,38 +312,62 @@ def test_object_notification_setting_empty(self):
311312
OPENWISP_NOTIFICATIONS_IGNORE_ENABLED_ADMIN=["openwisp_users.admin.UserAdmin"],
312313
)
313314
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-
324-
# If a ModelAdmin already has a Media class
325-
with self.assertWarns(MediaOrderConflictWarning):
315+
original_media = getattr(UserAdmin, "Media", None)
316+
if original_media is not None:
317+
original_js = copy.deepcopy(getattr(original_media, "js", None))
318+
original_css = copy.deepcopy(getattr(original_media, "css", None))
319+
else:
320+
original_js = original_css = None
321+
try:
326322
_add_object_notification_widget()
327323
response = self.client.get(
328324
reverse(
329325
f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)
330326
)
331327
)
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()
328+
self.assertContains(
329+
response,
330+
'src="/static/openwisp-notifications/js/object-notifications.js"',
331+
1,
332+
)
333+
with self.assertWarns(MediaOrderConflictWarning):
334+
_add_object_notification_widget()
335+
response = self.client.get(
336+
reverse(
337+
f"admin:{self.users_app_label}_user_change",
338+
args=(self.admin.pk,),
339+
)
340+
)
341+
self.assertContains(
342+
response,
343+
'src="/static/openwisp-notifications/js/object-notifications.js"',
344+
)
345+
UserAdmin.Media.css = {"all": list()}
346+
UserAdmin.Media.js = list()
347+
_add_object_notification_widget()
348+
self.client.get(
349+
reverse(
350+
f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)
351+
)
352+
)
353+
UserAdmin.Media.js = []
354+
UserAdmin.Media.css = {}
355+
_add_object_notification_widget()
356+
self.client.get(
357+
reverse(
358+
f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)
359+
)
360+
)
361+
finally:
362+
if original_media is not None:
363+
UserAdmin.Media = original_media
364+
if original_js is not None:
365+
UserAdmin.Media.js = original_js
366+
elif hasattr(UserAdmin.Media, "js"):
367+
delattr(UserAdmin.Media, "js")
368+
if original_css is not None:
369+
UserAdmin.Media.css = original_css
370+
elif hasattr(UserAdmin.Media, "css"):
371+
delattr(UserAdmin.Media, "css")
372+
elif hasattr(UserAdmin, "Media"):
373+
delattr(UserAdmin, "Media")

openwisp_notifications/tests/test_selenium.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,11 @@ def test_email_unsubscribe_page(self):
171171

172172
with self.subTest("Network request fails"):
173173
self.open(unsubscribe_link)
174-
self.web_driver.execute_script(
175-
"""
174+
self.web_driver.execute_script("""
176175
window.fetch = function() {
177176
return Promise.reject(new Error('Simulated fetch failure'));
178177
};
179-
"""
180-
)
178+
""")
181179
self.web_driver.find_element(By.ID, "toggle-btn").click()
182180
self.wait_for_visibility(By.ID, "error-msg")
183181
browser_logs = self.get_browser_logs()

0 commit comments

Comments
 (0)