def test_filter_fields_malformed(self):
        backend = DjangoFilterBackend()
        view = FilterableItemView()
        view.filter_fields = ['non_existent']
        queryset = FilterableItem.objects.all()

        msg = "'Meta.fields' contains fields that are not defined on this FilterSet: non_existent"
        with self.assertRaisesMessage(TypeError, msg):
            backend.get_filter_class(view, queryset)
    def test_filter_fields_no_queryset(self):
        backend = DjangoFilterBackend()
        view = FilterableItemView()
        view.filter_fields = ['text', 'decimal', 'date']

        filter_class = backend.get_filter_class(view, None)
        self.assertIsNone(filter_class)
    def test_filter_fields(self):
        backend = DjangoFilterBackend()
        view = FilterableItemView()
        view.filter_fields = ['text', 'decimal', 'date']
        queryset = FilterableItem.objects.all()

        filter_class = backend.get_filter_class(view, queryset)
        self.assertEqual(filter_class._meta.fields, view.filter_fields)
    def test_filter_class_no_meta(self):
        class Filter(FilterSet):
            pass

        backend = DjangoFilterBackend()
        view = FilterableItemView()
        view.filter_class = Filter
        queryset = FilterableItem.objects.all()

        filter_class = backend.get_filter_class(view, queryset)
        self.assertIs(filter_class, Filter)
    def test_filter_class_no_queryset(self):
        class Filter(FilterSet):
            class Meta:
                model = FilterableItem
                fields = '__all__'

        backend = DjangoFilterBackend()
        view = FilterableItemView()
        view.filter_class = Filter

        filter_class = backend.get_filter_class(view, None)
        self.assertIs(filter_class, Filter)
    def test_filter_class(self):
        class Filter(FilterSet):
            class Meta:
                model = FilterableItem
                fields = '__all__'

        backend = DjangoFilterBackend()
        view = FilterableItemView()
        view.filter_class = Filter
        queryset = FilterableItem.objects.all()

        filter_class = backend.get_filter_class(view, queryset)
        self.assertIs(filter_class, Filter)