|
1 | 1 | from django.test import RequestFactory, TestCase |
2 | 2 |
|
| 3 | +from base.main import ObjectList |
3 | 4 | from base.pagination import Pagination |
4 | 5 |
|
5 | 6 | from .models import Fish |
6 | 7 |
|
7 | 8 |
|
| 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 | + |
8 | 76 | class PaginationTestCase(TestCase): |
9 | 77 | @classmethod |
10 | 78 | def setUpTestData(cls): |
|
0 commit comments