Skip to content

Commit 9f919ba

Browse files
authored
Improve filter subset tests (#302)
1 parent 77b6e47 commit 9f919ba

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

tests/test_filterset.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -338,21 +338,35 @@ def test_get_subset(self):
338338
filter_subset = UserFilter.get_filter_subset(['email'])
339339

340340
# ensure that the FilterSet subset only contains the requested fields
341-
self.assertIn('email', filter_subset)
342-
self.assertEqual(len(filter_subset), 1)
341+
self.assertEqual(list(filter_subset), ['email'])
343342

344343
def test_related_subset(self):
345344
# related filters should only return the local RelatedFilter
346345
filter_subset = NoteFilter.get_filter_subset(['title', 'author', 'author__email'])
347346

348-
self.assertIn('title', filter_subset)
349-
self.assertIn('author', filter_subset)
350-
self.assertEqual(len(filter_subset), 2)
347+
self.assertEqual(list(filter_subset), ['title', 'author'])
351348

352349
def test_non_filter_subset(self):
353350
# non-filter params should be ignored
354351
filter_subset = NoteFilter.get_filter_subset(['foobar'])
355-
self.assertEqual(len(filter_subset), 0)
352+
self.assertEqual(list(filter_subset), [])
353+
354+
def test_subset_ordering(self):
355+
# sanity check ordering of base filters
356+
filter_subset = [f for f in NoteFilter.base_filters if f in ['title', 'author']]
357+
self.assertEqual(list(filter_subset), ['title', 'author'])
358+
359+
# ensure that the ordering of the subset is the same as the base filters
360+
filter_subset = NoteFilter.get_filter_subset(['title', 'author'])
361+
self.assertEqual(list(filter_subset), ['title', 'author'])
362+
363+
# ensure reverse argument order does not change subset ordering
364+
filter_subset = NoteFilter.get_filter_subset(['author', 'title'])
365+
self.assertEqual(list(filter_subset), ['title', 'author'])
366+
367+
# ensure related filters do not change subset ordering
368+
filter_subset = NoteFilter.get_filter_subset(['author__email', 'author', 'title'])
369+
self.assertEqual(list(filter_subset), ['title', 'author'])
356370

357371
def test_metaclass_inheritance(self):
358372
# See: https://github.com/philipn/django-rest-framework-filters/issues/132
@@ -372,9 +386,7 @@ class Meta:
372386
filter_subset = NoteFilter.get_filter_subset(['author', 'content'])
373387

374388
# ensure that the FilterSet subset only contains the requested fields
375-
self.assertIn('author', filter_subset)
376-
self.assertIn('content', filter_subset)
377-
self.assertEqual(len(filter_subset), 2)
389+
self.assertEqual(list(filter_subset), ['content', 'author'])
378390

379391

380392
class DisableSubsetTests(TestCase):

0 commit comments

Comments
 (0)