Skip to content

Commit 5ac705d

Browse files
author
Ryan P Kilby
committed
Add failing test for request + exclude
1 parent ac68223 commit 5ac705d

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

tests/test_filterset.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from __future__ import absolute_import
33
from __future__ import unicode_literals
44

5+
import sys
6+
57
from django.test import TestCase
68
from django.utils import six
79

@@ -11,7 +13,7 @@
1113
from django_filters.filters import BaseInFilter
1214

1315
from .testapp.models import (
14-
User, Note, Post, Person, Tag, BlogPost,
16+
Note, Post, Person, Tag, BlogPost,
1517
)
1618

1719
from .testapp.filters import (
@@ -24,6 +26,21 @@
2426
BlogPostOverrideFilter,
2527
)
2628

29+
from rest_framework.views import APIView
30+
from rest_framework.test import APIRequestFactory
31+
factory = APIRequestFactory()
32+
33+
34+
class limit_recursion:
35+
def __init__(self):
36+
self.original_limit = sys.getrecursionlimit()
37+
38+
def __enter__(self):
39+
sys.setrecursionlimit(100)
40+
41+
def __exit__(self, *args):
42+
sys.setrecursionlimit(self.original_limit)
43+
2744

2845
class LookupsFilterTests(TestCase):
2946
"""
@@ -429,3 +446,19 @@ def test_related_exclusion_results(self):
429446

430447
self.assertEqual(len(results), 1)
431448
self.assertEqual(results[0], 'Post 2')
449+
450+
def test_exclude_and_request_interaction(self):
451+
# See: https://github.com/philipn/django-rest-framework-filters/issues/171
452+
request = APIView().initialize_request(factory.get('/?tags__name__contains!=Tag'))
453+
filterset = BlogPostFilter(request.query_params, request=request, queryset=BlogPost.objects.all())
454+
455+
try:
456+
with limit_recursion():
457+
qs = filterset.qs
458+
except RuntimeError:
459+
self.fail('Recursion limit reached')
460+
461+
results = [r.title for r in qs]
462+
463+
self.assertEqual(len(results), 1)
464+
self.assertEqual(results[0], 'Post 2')

0 commit comments

Comments
 (0)