Skip to content

Commit 6ce44f5

Browse files
authored
Add test case for ObjectList. (#628)
1 parent 2d4be60 commit 6ce44f5

File tree

3 files changed

+73
-2
lines changed

3 files changed

+73
-2
lines changed

base/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def __init__(self, request, model, queryset, list_per_page):
1616
self.params = dict(request.GET.dict())
1717
self.current_tab = self.params.get(TAB_VAR, None)
1818
if self.opts.ordering:
19-
self.base_ordering = self.opts.ordering
19+
self.base_ordering = list(self.opts.ordering)
2020
if PAGE_VAR in self.params:
2121
del self.params[PAGE_VAR]
2222
self.result_objects = self.get_objects(request, queryset)
@@ -31,7 +31,7 @@ def tab_sort(self, queryset):
3131
result_queryset = result_queryset.order_by(*sort_value, *self.base_ordering)
3232
else:
3333
for tab_name, tab_order in self.sorting_tabs.items():
34-
if tab_order == self.base_ordering:
34+
if list(tab_order) == self.base_ordering:
3535
self.current_tab = tab_name
3636
break
3737

base/tests/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ class Fish(models.Model):
77
name = models.CharField(max_length=255)
88
price = models.IntegerField()
99

10+
class Meta:
11+
ordering = ("name",)
12+
1013

1114
class Food(models.Model):
1215
name = models.CharField(max_length=50)

base/tests/tests.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,78 @@
11
from django.test import RequestFactory, TestCase
22

3+
from base.main import ObjectList
34
from base.pagination import Pagination
45

56
from .models import Fish
67

78

9+
class FishList(ObjectList):
10+
sorting_tabs = {
11+
"name_asc": ("name",),
12+
"high_price": ("-price",),
13+
"low_price": ("price",),
14+
}
15+
16+
17+
class ObjectListTests(TestCase):
18+
19+
@classmethod
20+
def setUpTestData(cls):
21+
fishs = [
22+
Fish(name="Atlantic Salmon", price=80000),
23+
Fish(name="Bluefin Tuna", price=500000),
24+
Fish(name="Giant Squid", price=300000),
25+
Fish(name="King Crab", price=200000),
26+
Fish(name="Live Abalone", price=80000),
27+
Fish(name="Longtooth Grouper", price=250000),
28+
Fish(name="Red Seabream", price=90000),
29+
Fish(name="Tiger Prawn", price=70000),
30+
Fish(name="Wild Flatfish", price=180000),
31+
Fish(name="Yellow Corvina", price=150000),
32+
]
33+
Fish.objects.bulk_create(fishs)
34+
cls.queryset = Fish.objects.all()
35+
cls.fish_list = list(cls.queryset)
36+
cls.factory = RequestFactory()
37+
38+
def test_objects_paginate(self):
39+
request = self.factory.get("?page=2")
40+
object_list = ObjectList(request, Fish, self.queryset, 2)
41+
fish_names = [fish.name for fish in object_list]
42+
self.assertEqual(len(fish_names), 2)
43+
self.assertEqual(fish_names[0], "Giant Squid")
44+
self.assertEqual(fish_names[1], "King Crab")
45+
46+
request = self.factory.get("?page=4")
47+
object_list = ObjectList(request, Fish, self.queryset, 3)
48+
fish_names = [fish.name for fish in object_list]
49+
self.assertEqual(len(fish_names), 1)
50+
self.assertEqual(fish_names[0], "Yellow Corvina")
51+
52+
def test_select_default_tab(self):
53+
request = self.factory.get("")
54+
object_list = FishList(request, Fish, self.queryset, 5)
55+
self.assertEqual(object_list.base_ordering, ["name"])
56+
self.assertEqual(object_list.current_tab, "name_asc")
57+
58+
def test_objects_tab_sorting(self):
59+
request = self.factory.get("?tab=high_price")
60+
object_list = FishList(request, Fish, self.queryset, 5)
61+
self.assertEqual(object_list.current_tab, "high_price")
62+
high_price_fishs = list(object_list)
63+
self.assertEqual(high_price_fishs[0].name, "Bluefin Tuna")
64+
self.assertEqual(high_price_fishs[1].name, "Giant Squid")
65+
self.assertEqual(high_price_fishs[2].name, "Longtooth Grouper")
66+
67+
request = self.factory.get("?tab=low_price")
68+
object_list = FishList(request, Fish, self.queryset, 5)
69+
self.assertEqual(object_list.current_tab, "low_price")
70+
low_price_fishs = list(object_list)
71+
self.assertEqual(low_price_fishs[0].name, "Tiger Prawn")
72+
self.assertEqual(low_price_fishs[1].name, "Atlantic Salmon")
73+
self.assertEqual(low_price_fishs[2].name, "Live Abalone")
74+
75+
876
class PaginationTestCase(TestCase):
977
@classmethod
1078
def setUpTestData(cls):

0 commit comments

Comments
 (0)