Skip to content

Commit 085f8dd

Browse files
authored
Add test coverage to ensure that SQL tracker wrappers are applied only once to database cursors (#1478)
1 parent 3587052 commit 085f8dd

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

tests/panels/test_sql.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import datetime
22
import os
33
import unittest
4+
from unittest.mock import patch
45

56
import django
67
from django.contrib.auth.models import User
@@ -10,6 +11,7 @@
1011
from django.shortcuts import render
1112
from django.test.utils import override_settings
1213

14+
import debug_toolbar.panels.sql.tracking as sql_tracking
1315
from debug_toolbar import settings as dt_settings
1416

1517
from ..base import BaseTestCase
@@ -61,6 +63,20 @@ def test_recording_chunked_cursor(self):
6163
# ensure query was logged
6264
self.assertEqual(len(self.panel._queries), 1)
6365

66+
@patch("debug_toolbar.panels.sql.tracking.state", wraps=sql_tracking.state)
67+
def test_cursor_wrapper_singleton(self, mock_state):
68+
list(User.objects.all())
69+
70+
# ensure that cursor wrapping is applied only once
71+
self.assertEqual(mock_state.Wrapper.call_count, 1)
72+
73+
@patch("debug_toolbar.panels.sql.tracking.state", wraps=sql_tracking.state)
74+
def test_chunked_cursor_wrapper_singleton(self, mock_state):
75+
list(User.objects.all().iterator())
76+
77+
# ensure that cursor wrapping is applied only once
78+
self.assertEqual(mock_state.Wrapper.call_count, 1)
79+
6480
def test_generate_server_timing(self):
6581
self.assertEqual(len(self.panel._queries), 0)
6682

0 commit comments

Comments
 (0)