Skip to content

Commit 1008558

Browse files
committed
Add test case for ObjectList.
1 parent 08d08c1 commit 1008558

File tree

3 files changed

+72
-2
lines changed

3 files changed

+72
-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 = ("-price",)
12+
1013

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

base/tests/tests.py

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

0 commit comments

Comments
 (0)