Browse Source

Improve testing around django-sudo to avoid dealing with cookies

Matt Robenolt 10 years ago
parent
commit
051dec2ece
4 changed files with 18 additions and 6 deletions
  1. 7 0
      conftest.py
  2. 1 2
      src/sentry/api/decorators.py
  3. 0 4
      src/sentry/testutils/cases.py
  4. 10 0
      tests/middleware.py

+ 7 - 0
conftest.py

@@ -68,6 +68,13 @@ def pytest_configure(config):
         'django.contrib.auth.hashers.MD5PasswordHasher',
     ]
 
+    # Replace real sudo middleware with our mock sudo middleware
+    # to assert that the user is always in sudo mode
+    middleware = list(settings.MIDDLEWARE_CLASSES)
+    sudo = middleware.index('sentry.middleware.sudo.SudoMiddleware')
+    middleware[sudo] = 'tests.middleware.SudoMiddleware'
+    settings.MIDDLEWARE_CLASSES = tuple(middleware)
+
     # enable draft features
     settings.SENTRY_ENABLE_EXPLORE_CODE = True
     settings.SENTRY_ENABLE_EXPLORE_USERS = True

+ 1 - 2
src/sentry/api/decorators.py

@@ -1,14 +1,13 @@
 import json
 
 from django.http import HttpResponse
-from sudo.utils import has_sudo_privileges
 from functools import wraps
 
 
 def sudo_required(func):
     @wraps(func)
     def wrapped(self, request, *args, **kwargs):
-        if not has_sudo_privileges(request):
+        if not request.is_sudo():
             # TODO(dcramer): support some kind of auth flow to allow this
             # externally
             data = {

+ 0 - 4
src/sentry/testutils/cases.py

@@ -27,8 +27,6 @@ from django.utils.importlib import import_module
 from exam import Exam
 from nydus.db import create_cluster
 from rest_framework.test import APITestCase as BaseAPITestCase
-from sudo.settings import COOKIE_NAME as SUDO_COOKIE_NAME
-from sudo.utils import grant_sudo_privileges
 
 from sentry.constants import MODULE_ROOT
 from sentry.models import ProjectOption
@@ -74,7 +72,6 @@ class BaseTestCase(Fixtures, Exam):
 
         login(request, user)
         request.user = user
-        sudo_token = grant_sudo_privileges(request)
 
         # Save the session values.
         request.session.save()
@@ -90,7 +87,6 @@ class BaseTestCase(Fixtures, Exam):
             'expires': None,
         }
         self.client.cookies[session_cookie].update(cookie_data)
-        self.client.cookies[SUDO_COOKIE_NAME] = sudo_token
 
     def login(self):
         self.login_as(self.user)

+ 10 - 0
tests/middleware.py

@@ -1,3 +1,8 @@
+from __future__ import absolute_import
+
+from sentry.middleware.sudo import SudoMiddleware as BaseSudoMiddleware
+
+
 class BrokenRequestMiddleware(object):
     def process_request(self, request):
         raise ImportError('request')
@@ -11,3 +16,8 @@ class BrokenResponseMiddleware(object):
 class BrokenViewMiddleware(object):
     def process_view(self, request, func, args, kwargs):
         raise ImportError('view')
+
+
+class SudoMiddleware(BaseSudoMiddleware):
+    def has_sudo_privileges(self, request):
+        return True