Skip to content

Commit 5a6fbd7

Browse files
authored
Merge pull request #7137 from readthedocs/fix-flaky-test
Proxito middleware: reset to original urlconf after request
2 parents 1baed97 + c275bdb commit 5a6fbd7

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

readthedocs/proxito/middleware.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from django.conf import settings
1212
from django.shortcuts import render
13+
from django.urls.base import set_urlconf
1314
from django.utils.deprecation import MiddlewareMixin
1415

1516
from readthedocs.projects.models import Domain, Project
@@ -199,6 +200,10 @@ def process_response(self, request, response): # noqa
199200
* For custom domains, check the HSTS values on the Domain object.
200201
The domain object should be saved already in request.domain.
201202
"""
203+
# Reset URLconf for this thread
204+
# to the original one.
205+
set_urlconf(None)
206+
202207
host = request.get_host().lower().split(':')[0]
203208
public_domain = settings.PUBLIC_DOMAIN.lower().split(':')[0]
204209

readthedocs/proxito/tests/test_middleware.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
import sys
44

55
import pytest
6-
from django.urls.base import set_urlconf, get_urlconf
76
from django.test import TestCase
87
from django.test.utils import override_settings
8+
from django.urls.base import get_urlconf, set_urlconf
99
from django_dynamic_fixture import get
1010

11+
from readthedocs.builds.models import Version
12+
from readthedocs.projects.constants import PUBLIC
1113
from readthedocs.projects.models import Domain, Project, ProjectRelationship
1214
from readthedocs.proxito.middleware import ProxitoMiddleware
1315
from readthedocs.rtd_tests.base import RequestFactoryTestMixin
@@ -159,16 +161,23 @@ def setUp(self):
159161
Project,
160162
slug='pip',
161163
users=[self.owner],
162-
privacy_level='public',
164+
privacy_level=PUBLIC,
163165
urlconf='subpath/to/$version/$language/$filename' # Flipped
164166
)
167+
self.testing_version = get(
168+
Version,
169+
slug='testing',
170+
project=self.pip,
171+
built=True,
172+
active=True,
173+
)
174+
self.pip.versions.update(privacy_level=PUBLIC)
165175

166-
self.old_urlconf = get_urlconf()
167176
sys.modules['fake_urlconf'] = self.pip.proxito_urlconf
168177
set_urlconf('fake_urlconf')
169178

170179
def tearDown(self):
171-
set_urlconf(self.old_urlconf)
180+
set_urlconf(None)
172181

173182
def test_proxied_api_methods(self):
174183
# This is mostly a unit test, but useful to make sure the below tests work
@@ -221,29 +230,38 @@ def setUp(self):
221230
name='pip',
222231
slug='pip',
223232
users=[self.owner],
224-
privacy_level='public',
233+
privacy_level=PUBLIC,
225234
urlconf='subpath/$subproject/$version/$language/$filename' # Flipped
226235
)
236+
self.pip.versions.update(privacy_level=PUBLIC)
227237
self.subproject = get(
228238
Project,
229239
name='subproject',
230240
slug='subproject',
231241
users=[self.owner],
232-
privacy_level='public',
242+
privacy_level=PUBLIC,
233243
main_language_project=None,
234244
)
245+
self.testing_version = get(
246+
Version,
247+
slug='testing',
248+
project=self.subproject,
249+
built=True,
250+
active=True,
251+
)
252+
self.subproject.versions.update(privacy_level=PUBLIC)
235253
self.relationship = get(
236254
ProjectRelationship,
237255
parent=self.pip,
238256
child=self.subproject,
239257
)
240258

241-
self.old_urlconf = get_urlconf()
242259
sys.modules['fake_urlconf'] = self.pip.proxito_urlconf
243260
set_urlconf('fake_urlconf')
244261

245-
# TODO: Figure out why this is failing in travis
246-
@pytest.mark.xfail(strict=True)
262+
def tearDown(self):
263+
set_urlconf(None)
264+
247265
def test_middleware_urlconf_subproject(self):
248266
resp = self.client.get('/subpath/subproject/testing/en/foodex.html', HTTP_HOST=self.domain)
249267
self.assertEqual(resp.status_code, 200)

0 commit comments

Comments
 (0)