From 8a3abe41ff0d2a6b04bbb40538e4a982cb75bb74 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 19 Jun 2021 17:57:12 +0100 Subject: [PATCH 1/3] Add test coverage to ensure that SQL tracker wrappers are applied only once to database cursors --- tests/panels/test_sql.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index 84b789868..04822732b 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -1,6 +1,7 @@ import datetime import os import unittest +from unittest.mock import patch import django from django.contrib.auth.models import User @@ -11,6 +12,7 @@ from django.test.utils import override_settings from debug_toolbar import settings as dt_settings +import debug_toolbar.panels.sql.tracking as sql_tracking from ..base import BaseTestCase @@ -61,6 +63,20 @@ def test_recording_chunked_cursor(self): # ensure query was logged self.assertEqual(len(self.panel._queries), 1) + @patch('debug_toolbar.panels.sql.tracking.state', wraps=sql_tracking.state) + def test_cursor_wrapper_singleton(self, mock_state): + list(User.objects.all()) + + # ensure that cursor wrapping is applied only once + self.assertEqual(mock_state.Wrapper.call_count, 1) + + @patch('debug_toolbar.panels.sql.tracking.state', wraps=sql_tracking.state) + def test_chunked_cursor_wrapper_singleton(self, mock_state): + list(User.objects.all().iterator()) + + # ensure that cursor wrapping is applied only once + self.assertEqual(mock_state.Wrapper.call_count, 1) + def test_generate_server_timing(self): self.assertEqual(len(self.panel._queries), 0) From 2653be37adfc55a8adfddee2254bec5f6a613ca0 Mon Sep 17 00:00:00 2001 From: James Addison Date: Tue, 22 Jun 2021 20:23:26 +0100 Subject: [PATCH 2/3] lint fixup: import order --- tests/panels/test_sql.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index 04822732b..d0b3fe56d 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -11,8 +11,8 @@ from django.shortcuts import render from django.test.utils import override_settings -from debug_toolbar import settings as dt_settings import debug_toolbar.panels.sql.tracking as sql_tracking +from debug_toolbar import settings as dt_settings from ..base import BaseTestCase From ca93f671ee3180f67c6ae06a50c5d4a61d8fb1f5 Mon Sep 17 00:00:00 2001 From: James Addison Date: Tue, 22 Jun 2021 20:24:23 +0100 Subject: [PATCH 3/3] lint fixup: apply black style --- tests/panels/test_sql.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/panels/test_sql.py b/tests/panels/test_sql.py index d0b3fe56d..08535a79e 100644 --- a/tests/panels/test_sql.py +++ b/tests/panels/test_sql.py @@ -63,14 +63,14 @@ def test_recording_chunked_cursor(self): # ensure query was logged self.assertEqual(len(self.panel._queries), 1) - @patch('debug_toolbar.panels.sql.tracking.state', wraps=sql_tracking.state) + @patch("debug_toolbar.panels.sql.tracking.state", wraps=sql_tracking.state) def test_cursor_wrapper_singleton(self, mock_state): list(User.objects.all()) # ensure that cursor wrapping is applied only once self.assertEqual(mock_state.Wrapper.call_count, 1) - @patch('debug_toolbar.panels.sql.tracking.state', wraps=sql_tracking.state) + @patch("debug_toolbar.panels.sql.tracking.state", wraps=sql_tracking.state) def test_chunked_cursor_wrapper_singleton(self, mock_state): list(User.objects.all().iterator())