diff options
| author | Xavier Ordoquy | 2014-08-19 11:12:36 +0200 |
|---|---|---|
| committer | Xavier Ordoquy | 2014-08-19 11:12:36 +0200 |
| commit | c9535c036bc65082622ecb596e6579a43d441f4d (patch) | |
| tree | b050e8d874fa4843248a7fd00422922a5fa4700b /tests | |
| parent | 4876bec9f529cac69aede8e51746d8a0fd6b0d88 (diff) | |
| parent | 4d45865bd73ba16801950e3f47199aa6da0f7c19 (diff) | |
| download | django-rest-framework-c9535c036bc65082622ecb596e6579a43d441f4d.tar.bz2 | |
Merged #1398 against 2.4 branch.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/models.py | 12 | ||||
| -rw-r--r-- | tests/test_filters.py | 26 |
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. |
