aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorCarlton Gibson2015-02-10 10:50:35 +0100
committerCarlton Gibson2015-02-10 10:50:35 +0100
commitd87bb67d11918683425af1c1d56c0c57f50e81b3 (patch)
tree1a2df4d1c2881da1140ee84d4f2ae7b0742bd3fd /tests
parent7b639c0cd0676172cc8502e833f5b708f39f9a83 (diff)
downloaddjango-rest-framework-d87bb67d11918683425af1c1d56c0c57f50e81b3.tar.bz2
Failing test case for #1488
Diffstat (limited to 'tests')
-rw-r--r--tests/test_filters.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/test_filters.py b/tests/test_filters.py
index 355f02ce..e7cb0c79 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -429,6 +429,56 @@ class SearchFilterTests(TestCase):
reload_module(filters)
+class AttributeModel(models.Model):
+ label = models.CharField(max_length=32)
+
+
+class SearchFilterModelM2M(models.Model):
+ title = models.CharField(max_length=20)
+ text = models.CharField(max_length=100)
+ attributes = models.ManyToManyField(AttributeModel)
+
+
+class SearchFilterM2MSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = SearchFilterModelM2M
+
+
+class SearchFilterM2MTests(TestCase):
+ def setUp(self):
+ # Sequence of title/text/attributes is:
+ #
+ # z abc [1, 2, 3]
+ # zz bcd [1, 2, 3]
+ # zzz cde [1, 2, 3]
+ # ...
+ for idx in range(3):
+ label = 'w' * (idx + 1)
+ AttributeModel(label=label)
+
+ for idx in range(10):
+ title = 'z' * (idx + 1)
+ text = (
+ chr(idx + ord('a')) +
+ chr(idx + ord('b')) +
+ chr(idx + ord('c'))
+ )
+ SearchFilterModelM2M(title=title, text=text).save()
+ SearchFilterModelM2M.objects.get(title='zz').attributes.add(1, 2, 3)
+
+ def test_m2m_search(self):
+ class SearchListView(generics.ListAPIView):
+ queryset = SearchFilterModelM2M.objects.all()
+ serializer_class = SearchFilterM2MSerializer
+ filter_backends = (filters.SearchFilter,)
+ search_fields = ('=title', 'text', 'attributes__label')
+
+ view = SearchListView.as_view()
+ request = factory.get('/', {'search': 'zz'})
+ response = view(request)
+ self.assertEqual(len(response.data), 1)
+
+
class OrderingFilterModel(models.Model):
title = models.CharField(max_length=20)
text = models.CharField(max_length=100)