Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 55 additions & 30 deletions openwisp_notifications/tests/test_admin.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import copy
import uuid
from unittest.mock import patch

from django.contrib.admin.sites import AdminSite
from django.contrib.auth import get_user_model
from django.core.cache import cache
from django.forms.widgets import Media, MediaOrderConflictWarning
from django.forms.widgets import MediaOrderConflictWarning
from django.test import TestCase, override_settings, tag
from django.urls import reverse

Expand Down Expand Up @@ -311,38 +312,62 @@ def test_object_notification_setting_empty(self):
OPENWISP_NOTIFICATIONS_IGNORE_ENABLED_ADMIN=["openwisp_users.admin.UserAdmin"],
)
def test_object_notification_setting_configured(self):
_add_object_notification_widget()
response = self.client.get(
reverse(f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,))
)
self.assertContains(
response,
'src="/static/openwisp-notifications/js/object-notifications.js"',
1,
)

# If a ModelAdmin already has a Media class
with self.assertWarns(MediaOrderConflictWarning):
original_media = getattr(UserAdmin, "Media", None)
if original_media is not None:
original_js = copy.deepcopy(getattr(original_media, "js", None))
original_css = copy.deepcopy(getattr(original_media, "css", None))
else:
original_js = original_css = None
Comment thread
coderabbitai[bot] marked this conversation as resolved.
try:
_add_object_notification_widget()
response = self.client.get(
reverse(
f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)
)
)

# If a ModelAdmin has list instances of js and css
UserAdmin.Media.css = {"all": list()}
UserAdmin.Media.js = list()
_add_object_notification_widget()
response = self.client.get(
reverse(f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,))
)

# If ModelAdmin has empty attributes
UserAdmin.Media.js = []
UserAdmin.Media.css = {}
_add_object_notification_widget()
response = self.client.get(
reverse(f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,))
)
UserAdmin.Media = Media()
self.assertContains(
response,
'src="/static/openwisp-notifications/js/object-notifications.js"',
1,
)
with self.assertWarns(MediaOrderConflictWarning):
_add_object_notification_widget()
response = self.client.get(
reverse(
f"admin:{self.users_app_label}_user_change",
args=(self.admin.pk,),
)
)
self.assertContains(
response,
'src="/static/openwisp-notifications/js/object-notifications.js"',
)
UserAdmin.Media.css = {"all": list()}
UserAdmin.Media.js = list()
_add_object_notification_widget()
self.client.get(
reverse(
f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)
)
)
UserAdmin.Media.js = []
UserAdmin.Media.css = {}
_add_object_notification_widget()
self.client.get(
reverse(
f"admin:{self.users_app_label}_user_change", args=(self.admin.pk,)
)
)
Comment thread
coderabbitai[bot] marked this conversation as resolved.
finally:
if original_media is not None:
UserAdmin.Media = original_media
if original_js is not None:
UserAdmin.Media.js = original_js
elif hasattr(UserAdmin.Media, "js"):
delattr(UserAdmin.Media, "js")
if original_css is not None:
UserAdmin.Media.css = original_css
elif hasattr(UserAdmin.Media, "css"):
delattr(UserAdmin.Media, "css")
elif hasattr(UserAdmin, "Media"):
delattr(UserAdmin, "Media")
Comment thread
coderabbitai[bot] marked this conversation as resolved.
6 changes: 2 additions & 4 deletions openwisp_notifications/tests/test_selenium.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,11 @@ def test_email_unsubscribe_page(self):

with self.subTest("Network request fails"):
self.open(unsubscribe_link)
self.web_driver.execute_script(
"""
self.web_driver.execute_script("""
window.fetch = function() {
return Promise.reject(new Error('Simulated fetch failure'));
};
"""
)
""")
self.web_driver.find_element(By.ID, "toggle-btn").click()
self.wait_for_visibility(By.ID, "error-msg")
browser_logs = self.get_browser_logs()
Expand Down
Loading