Skip to content

Commit 9d2a9c6

Browse files
committed
Add some basic asyncio tests for sql tracking
1 parent bb8a388 commit 9d2a9c6

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

tests/panels/test_sql.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import asyncio
12
import datetime
23
import os
34
import unittest
45
from unittest.mock import patch
6+
from asgiref.sync import sync_to_async
57

68
import django
79
from django.contrib.auth.models import User
@@ -74,6 +76,33 @@ def test_chunked_cursor_wrapper_singleton(self, mock_wrapper):
7476
# ensure that cursor wrapping is applied only once
7577
self.assertEqual(mock_wrapper.call_count, 1)
7678

79+
@patch(
80+
"debug_toolbar.panels.sql.tracking.NormalCursorWrapper",
81+
wraps=sql_tracking.NormalCursorWrapper,
82+
)
83+
async def test_cursor_wrapper_async(self, mock_wrapper):
84+
await sync_to_async(list)(User.objects.all())
85+
86+
self.assertEqual(mock_wrapper.call_count, 1)
87+
88+
@patch(
89+
"debug_toolbar.panels.sql.tracking.NormalCursorWrapper",
90+
wraps=sql_tracking.NormalCursorWrapper,
91+
)
92+
async def test_cursor_wrapper_asyncio_ctx(self, mock_wrapper):
93+
self.assertTrue(sql_tracking.recording.get())
94+
await sync_to_async(list)(User.objects.all())
95+
96+
async def task():
97+
sql_tracking.recording.set(False)
98+
await sync_to_async(list)(User.objects.all())
99+
100+
# Ensure this is called in another context
101+
await asyncio.create_task(task())
102+
# Because it was called in another context, it should not have affected ours
103+
self.assertTrue(sql_tracking.recording.get())
104+
self.assertEqual(mock_wrapper.call_count, 1)
105+
77106
def test_generate_server_timing(self):
78107
self.assertEqual(len(self.panel._queries), 0)
79108

0 commit comments

Comments
 (0)