aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorXavier Ordoquy2014-08-19 11:12:36 +0200
committerXavier Ordoquy2014-08-19 11:12:36 +0200
commitc9535c036bc65082622ecb596e6579a43d441f4d (patch)
treeb050e8d874fa4843248a7fd00422922a5fa4700b /tests
parent4876bec9f529cac69aede8e51746d8a0fd6b0d88 (diff)
parent4d45865bd73ba16801950e3f47199aa6da0f7c19 (diff)
downloaddjango-rest-framework-c9535c036bc65082622ecb596e6579a43d441f4d.tar.bz2
Merged #1398 against 2.4 branch.
Diffstat (limited to 'tests')
-rw-r--r--tests/models.py12
-rw-r--r--tests/test_filters.py26
2 files changed, 37 insertions, 1 deletions
diff --git a/tests/models.py b/tests/models.py
index fba3f8f7..e378c1cf 100644
--- a/tests/models.py
+++ b/tests/models.py
@@ -60,6 +60,18 @@ class ReadOnlyManyToManyModel(RESTFrameworkModel):
rel = models.ManyToManyField(Anchor)
+class BaseFilterableItem(RESTFrameworkModel):
+ text = models.CharField(max_length=100)
+
+ class Meta:
+ abstract = True
+
+
+class FilterableItem(BaseFilterableItem):
+ decimal = models.DecimalField(max_digits=4, decimal_places=2)
+ date = models.DateField()
+
+
# Model for regression test for #285
class Comment(RESTFrameworkModel):
diff --git a/tests/test_filters.py b/tests/test_filters.py
index 85840e01..38ddf4e4 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -9,7 +9,7 @@ from django.conf.urls import patterns, url
from rest_framework import generics, serializers, status, filters
from rest_framework.compat import django_filters
from rest_framework.test import APIRequestFactory
-from .models import FilterableItem, BasicModel
+from .models import BaseFilterableItem, FilterableItem, BasicModel
from .utils import temporary_setting
factory = APIRequestFactory()
@@ -55,6 +55,18 @@ if django_filters:
filter_class = SeveralFieldsFilter
filter_backends = (filters.DjangoFilterBackend,)
+ # These classes are used to test base model filter support
+ class BaseFilterableItemFilter(django_filters.FilterSet):
+ text = django_filters.CharFilter()
+
+ class Meta:
+ model = BaseFilterableItem
+
+ class BaseFilterableItemFilterRootView(generics.ListCreateAPIView):
+ model = FilterableItem
+ filter_class = BaseFilterableItemFilter
+ filter_backends = (filters.DjangoFilterBackend,)
+
# Regression test for #814
class FilterableItemSerializer(serializers.ModelSerializer):
class Meta:
@@ -226,6 +238,18 @@ class IntegrationTestFiltering(CommonFilteringTestCase):
self.assertRaises(AssertionError, view, request)
@unittest.skipUnless(django_filters, 'django-filter not installed')
+ def test_base_model_filter(self):
+ """
+ The `get_filter_class` model checks should allow base model filters.
+ """
+ view = BaseFilterableItemFilterRootView.as_view()
+
+ request = factory.get('/?text=aaa')
+ response = view(request).render()
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(len(response.data), 1)
+
+ @unittest.skipUnless(django_filters, 'django-filter not installed')
def test_unknown_filter(self):
"""
GET requests with filters that aren't configured should return 200.