|
17 | 17 | import django |
18 | 18 | from django.db import connection |
19 | 19 | from django.http import HttpRequest |
20 | | -from django.test import TestCase, override_settings |
| 20 | +from django.test import TestCase, override_settings, modify_settings |
21 | 21 | from django.urls import resolve, reverse |
22 | | -from google.cloud.sqlcommenter.django.middleware import SqlCommenter |
| 22 | +from google.cloud.sqlcommenter.django.middleware import SqlCommenter, QueryWrapper |
23 | 23 |
|
24 | 24 | from ..compat import mock |
25 | 25 | from ..opencensus_mock import mock_opencensus_tracer |
26 | 26 | from ..opentelemetry_mock import mock_opentelemetry_context |
27 | 27 | from . import views |
28 | 28 |
|
| 29 | +# Test middleware to call execute_wrapper again |
| 30 | +# Adding the middleware twice in modify_settings |
| 31 | +# doesn't work. The middleware is only used once |
| 32 | +# if used in modify_settings |
| 33 | +class TestMiddleware: |
| 34 | + def __init__(self, get_response): |
| 35 | + self.get_response = get_response |
| 36 | + |
| 37 | + def __call__(self, request): |
| 38 | + with connection.execute_wrapper(QueryWrapper(request)): |
| 39 | + return self.get_response(request) |
29 | 40 |
|
30 | 41 | # Query log only active if DEBUG=True. |
31 | 42 | @override_settings(DEBUG=True) |
@@ -98,6 +109,14 @@ def test_db_driver_disabled(self): |
98 | 109 | query = self.get_query() |
99 | 110 | self.assertNotIn('db_driver=', query) |
100 | 111 |
|
| 112 | + @modify_settings(MIDDLEWARE={ |
| 113 | + 'prepend': 'tests.django.tests.TestMiddleware', |
| 114 | + 'append': 'google.cloud.sqlcommenter.django.middleware.SqlCommenter', |
| 115 | + }) |
| 116 | + def test_multi_execute_wrappers(self): |
| 117 | + # Raises error if execute_wrappers fails |
| 118 | + self.client.get('/') |
| 119 | + |
101 | 120 | def test_opencensus_disabled(self): |
102 | 121 | """Opencensus fields are omitted by default.""" |
103 | 122 | with mock_opencensus_tracer(): |
|
0 commit comments