55import datetime
66
77from django .test import TestCase , override_settings
8- from django .contrib .auth .models import User
98from django .utils .dateparse import parse_time , parse_datetime
109
1110from rest_framework_filters import filters
1211
1312from .models import (
14- Note , Post , Cover , Page , A , B , C , Person , Tag , BlogPost ,
13+ User , Note , Post , Cover , Page , A , B , C , Person , Tag , BlogPost ,
1514)
1615
1716from .filters import (
1817 NoteFilterWithAll ,
19- # UserFilter,
18+ UserFilter ,
2019 # UserFilterWithAll,
2120 NoteFilterWithRelated ,
2221 NoteFilterWithRelatedAll ,
2322 NoteFilterWithRelatedAllDifferentFilterName ,
24- PostFilterWithRelated ,
25- PostFilterWithMethod ,
23+ PostFilter ,
2624 CoverFilterWithRelatedMethodFilter ,
2725 CoverFilterWithRelated ,
2826 # PageFilterWithRelated,
@@ -257,7 +255,7 @@ def test_double_relation_filter(self):
257255 GET = {
258256 'note__author__username__endswith' : 'user2'
259257 }
260- f = PostFilterWithRelated (GET , queryset = Post .objects .all ())
258+ f = PostFilter (GET , queryset = Post .objects .all ())
261259 self .assertEqual (len (list (f )), 1 )
262260 post = list (f )[0 ]
263261 self .assertEqual (post .content , "Test content in post 3" )
@@ -320,17 +318,8 @@ def test_get_filterset_subset(self):
320318
321319class MethodFilterTests (TestCase ):
322320
323- if django .VERSION >= (1 , 8 ):
324- @classmethod
325- def setUpTestData (cls ):
326- cls .generateTestData ()
327-
328- else :
329- def setUp (self ):
330- self .generateTestData ()
331-
332321 @classmethod
333- def generateTestData (cls ):
322+ def setUpTestData (cls ):
334323 user = User .objects .create (username = "user1" , email = "user1@example.org" )
335324
336325 note1 = Note .objects .create (title = "Test 1" , content = "Test content 1" , author = user )
@@ -346,7 +335,7 @@ def test_method_filter(self):
346335 GET = {
347336 'is_published' : 'true'
348337 }
349- filterset = PostFilterWithMethod (GET , queryset = Post .objects .all ())
338+ filterset = PostFilter (GET , queryset = Post .objects .all ())
350339 results = list (filterset )
351340 self .assertEqual (len (results ), 1 )
352341 self .assertEqual (results [0 ].content , "Test content in post 2" )
@@ -465,6 +454,9 @@ def setUpTestData(cls):
465454 john = Person .objects .create (name = "John" )
466455 Person .objects .create (name = "Mark" , best_friend = john )
467456
457+ User .objects .create (username = "user1" , email = "user1@example.org" , is_active = True , last_login = datetime .date .today ())
458+ User .objects .create (username = "user2" , email = "user2@example.org" , is_active = False )
459+
468460 def test_inset_number_filter (self ):
469461 p1 = Person .objects .get (name = "John" ).pk
470462 p2 = Person .objects .get (name = "Mark" ).pk
@@ -563,6 +555,69 @@ def test_dict_declaration(self):
563555 filters .BooleanFilter
564556 )
565557
558+ def test_boolean_filter (self ):
559+ # Capitalized True
560+ GET = {'is_active' : 'True' }
561+ filterset = UserFilter (GET , queryset = User .objects .all ())
562+ results = list (filterset )
563+ self .assertEqual (len (results ), 1 )
564+ self .assertEqual (results [0 ].username , 'user1' )
565+
566+ # Lowercase True
567+ GET = {'is_active' : 'true' }
568+ filterset = UserFilter (GET , queryset = User .objects .all ())
569+ results = list (filterset )
570+ self .assertEqual (len (results ), 1 )
571+ self .assertEqual (results [0 ].username , 'user1' )
572+
573+ # Uppercase True
574+ GET = {'is_active' : 'TRUE' }
575+ filterset = UserFilter (GET , queryset = User .objects .all ())
576+ results = list (filterset )
577+ self .assertEqual (len (results ), 1 )
578+ self .assertEqual (results [0 ].username , 'user1' )
579+
580+ # Capitalized False
581+ GET = {'is_active' : 'False' }
582+ filterset = UserFilter (GET , queryset = User .objects .all ())
583+ results = list (filterset )
584+ self .assertEqual (len (results ), 1 )
585+ self .assertEqual (results [0 ].username , 'user2' )
586+
587+ # Lowercase False
588+ GET = {'is_active' : 'false' }
589+ filterset = UserFilter (GET , queryset = User .objects .all ())
590+ results = list (filterset )
591+ self .assertEqual (len (results ), 1 )
592+ self .assertEqual (results [0 ].username , 'user2' )
593+
594+ # Uppercase False
595+ GET = {'is_active' : 'FALSE' }
596+ filterset = UserFilter (GET , queryset = User .objects .all ())
597+ results = list (filterset )
598+ self .assertEqual (len (results ), 1 )
599+ self .assertEqual (results [0 ].username , 'user2' )
600+
601+ def test_isnull_override (self ):
602+ import django_filters .filters
603+
604+ self .assertIsInstance (
605+ UserFilter ().filters ['last_login__isnull' ],
606+ django_filters .filters .BooleanFilter
607+ )
608+
609+ GET = {'last_login__isnull' : 'false' }
610+ filterset = UserFilter (GET , queryset = User .objects .all ())
611+ results = list (filterset )
612+ self .assertEqual (len (results ), 1 )
613+ self .assertEqual (results [0 ].username , 'user1' )
614+
615+ GET = {'last_login__isnull' : 'true' }
616+ filterset = UserFilter (GET , queryset = User .objects .all ())
617+ results = list (filterset )
618+ self .assertEqual (len (results ), 1 )
619+ self .assertEqual (results [0 ].username , 'user2' )
620+
566621
567622class FilterExclusionTests (TestCase ):
568623
0 commit comments