aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTom Christie2014-08-19 16:16:02 +0100
committerTom Christie2014-08-19 16:16:02 +0100
commit5358243ca5e35dcb28ce96175c4f8f58504513aa (patch)
treed717e4cb77089b3190ab79c82bec1fa34e8c8c8d /tests
parent390061bed0991892dfa6c9b953fffc1bd15564a9 (diff)
parent06b6b96f933088ba36d4c98e13893274f29bed6a (diff)
downloaddjango-rest-framework-5358243ca5e35dcb28ce96175c4f8f58504513aa.tar.bz2
Merge pull request #1778 from linovia/bugfix/1398
Bugfix/1398
Diffstat (limited to 'tests')
-rw-r--r--tests/models.py19
-rw-r--r--tests/test_filters.py26
2 files changed, 37 insertions, 8 deletions
diff --git a/tests/models.py b/tests/models.py
index fba3f8f7..fe064b46 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):
@@ -172,10 +184,3 @@ class NullableOneToOneSource(RESTFrameworkModel):
class BasicModelSerializer(serializers.ModelSerializer):
class Meta:
model = BasicModel
-
-
-# Models to test filters
-class FilterableItem(models.Model):
- text = models.CharField(max_length=100)
- decimal = models.DecimalField(max_digits=4, decimal_places=2)
- date = models.DateField()
diff --git a/tests/test_filters.py b/tests/test_filters.py
index b29760fa..47bffd43 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:
@@ -227,6 +239,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.