rate_limit: Improve dummy request objects in RateLimitTestCase.

Django always sets request.user to a UserProfile or AnonymousUser
instance, so it's better to mimic that in the tests where we pass a
dummy request objects for rate limiter testing purposes.
This commit is contained in:
Mateusz Mandera
2020-08-21 16:40:40 +02:00
committed by Tim Abbott
parent 699c4e8549
commit 934bdb9651
2 changed files with 6 additions and 2 deletions

View File

@@ -796,6 +796,7 @@ def rate_limit(domain: str='api_by_user') -> Callable[[ViewFuncT], ViewFuncT]:
# TODO: implement per-IP non-authed rate limiting
return func(request, *args, **kwargs)
assert isinstance(user, UserProfile)
rate_limit_user(request, user, domain)
return func(request, *args, **kwargs)

View File

@@ -7,6 +7,7 @@ from unittest import mock
import orjson
from django.conf import settings
from django.contrib.auth.models import AnonymousUser
from django.core.exceptions import ValidationError
from django.http import HttpRequest, HttpResponse
@@ -619,6 +620,7 @@ class RateLimitTestCase(ZulipTestCase):
class Request:
client = Client()
META = {'REMOTE_ADDR': '127.0.0.1'}
user = AnonymousUser()
req = Request()
@@ -641,6 +643,7 @@ class RateLimitTestCase(ZulipTestCase):
class Request:
client = Client()
META = {'REMOTE_ADDR': '3.3.3.3'}
user = AnonymousUser()
req = Request()
@@ -664,7 +667,7 @@ class RateLimitTestCase(ZulipTestCase):
class Request:
client = Client()
META = {'REMOTE_ADDR': '3.3.3.3'}
user = 'stub' # any non-None value here exercises the correct code path
user = self.example_user("hamlet")
req = Request()
@@ -687,7 +690,7 @@ class RateLimitTestCase(ZulipTestCase):
class Request:
client = Client()
META = {'REMOTE_ADDR': '3.3.3.3'}
user = 'stub' # any non-None value here exercises the correct code path
user = self.example_user("hamlet")
req = Request()