Skip to content

Commit f44ab85

Browse files
Add URLMixin tests for staticfiles panel
- Test storage state preservation to ensure URLMixin doesn't affect storage attributes - Test context variable lifecycle for static file tracking - Test multiple initialization safety to prevent URLMixin stacking
1 parent 5e98abd commit f44ab85

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

tests/panels/test_staticfiles.py

+45-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
from pathlib import Path
22

33
from django.conf import settings
4-
from django.contrib.staticfiles import finders
4+
from django.contrib.staticfiles import finders, storage
55
from django.shortcuts import render
66
from django.test import AsyncRequestFactory, RequestFactory
77

8+
from debug_toolbar.panels.staticfiles import URLMixin
89
from ..base import BaseTestCase
910

1011

@@ -76,3 +77,46 @@ def get_response(request):
7677
self.panel.generate_stats(self.request, response)
7778
self.assertEqual(self.panel.num_used, 1)
7879
self.assertIn('"/static/additional_static/base.css"', self.panel.content)
80+
81+
def test_storage_state_preservation(self):
82+
"""Ensure the URLMixin doesn't affect storage state"""
83+
original_storage = storage.staticfiles_storage
84+
original_attrs = dict(original_storage.__dict__)
85+
86+
# Trigger mixin injection
87+
self.panel.ready()
88+
89+
# Verify all original attributes are preserved
90+
self.assertEqual(original_attrs, dict(original_storage.__dict__))
91+
92+
def test_context_variable_lifecycle(self):
93+
"""Test the request_id context variable lifecycle"""
94+
from debug_toolbar.panels.staticfiles import request_id_context_var
95+
96+
# Should not raise when context not set
97+
url = storage.staticfiles_storage.url("test.css")
98+
self.assertTrue(url.startswith("/static/"))
99+
100+
# Should track when context is set
101+
token = request_id_context_var.set("test-request-id")
102+
try:
103+
url = storage.staticfiles_storage.url("test.css")
104+
self.assertTrue(url.startswith("/static/"))
105+
# Verify file was tracked
106+
self.assertIn("test.css", [f.path for f in self.panel.used_paths])
107+
finally:
108+
request_id_context_var.reset(token)
109+
110+
def test_multiple_initialization(self):
111+
"""Ensure multiple panel initializations don't stack URLMixin"""
112+
storage_class = storage.staticfiles_storage.__class__
113+
114+
# Initialize panel multiple times
115+
for _ in range(3):
116+
self.panel.ready()
117+
118+
# Verify URLMixin appears exactly once in bases
119+
mixin_count = sum(
120+
1 for base in storage_class.__bases__ if base == URLMixin
121+
)
122+
self.assertEqual(mixin_count, 1)

0 commit comments

Comments
 (0)