Source code for trustpoint.tests.test_views.test_sortable_table
"""Tests for the SortableTableMixin class."""fromtypingimportAnyfromdevices.modelsimportDeviceModelfromdjango.db.modelsimportModel,QuerySetfromdjango.httpimportHttpRequestfromdjango.testimportRequestFactory,TestCasefromtrustpoint.views.baseimportSortableTableMixin,SortableTableFromListMixin
[docs]classAbstractSortableTableView:"""Simple view class inheriting from SortableTableMixin."""def__init__(self,queryset:QuerySet[Any]|None=None,model:type[Model]|None=None,default_sort_param:str='id')->None:""""Initialize the view with optional queryset, model, and default sort parameter."""
[docs]defget_context_data(self,**kwargs:dict[str,Any])->dict[str,Any]:"""Call get_context_data from SortableTableMixin."""returnsuper().get_context_data(**kwargs)
[docs]classSortableTableView(AbstractSortableTableView,SortableTableMixin):"""Concrete view class for testing SortableTableMixin."""
[docs]classSortableTableFromListView(AbstractSortableTableView,SortableTableFromListMixin):"""Concrete view class for testing SortableTableFromListMixin."""
[docs]classTestSortableTableMixin(TestCase):"""Test cases for SortableTableMixin."""@classmethod
[docs]defsetUpTestData(cls)->None:"""Create test data for the test class."""cls.device1=DeviceModel.objects.create(common_name='Device A',serial_number='12345')cls.device2=DeviceModel.objects.create(common_name='Device C',serial_number='67890')cls.device3=DeviceModel.objects.create(common_name='Device B',serial_number='54321')cls.device_list=[{'common_name':'Device A','serial_number':'12345'},{'common_name':'Device C','serial_number':'67890'},{'common_name':'Device B','serial_number':'54321'},]
[docs]defsetUp(self)->None:"""Set up the test environment for each test case."""self.factory=RequestFactory()
[docs]deftest_sort_queryset_ascending(self)->None:"""Test sorting of queryset in ascending order."""view=SortableTableView(queryset=DeviceModel.objects.all(),model=DeviceModel,default_sort_param='common_name')view.request=self.factory.get('/?sort=common_name')sorted_queryset=view.get_queryset()expected_queryset=DeviceModel.objects.all().order_by('common_name')self.assertQuerySetEqual(sorted_queryset,expected_queryset,transform=lambdax:x,msg="Queryset should be sorted by 'common_name' ascending.")
[docs]deftest_sort_queryset_descending(self)->None:"""Test sorting of queryset in descending order."""view=SortableTableView(queryset=DeviceModel.objects.all(),model=DeviceModel,default_sort_param='common_name')view.request=self.factory.get('/?sort=-common_name')sorted_queryset=view.get_queryset()expected_queryset=DeviceModel.objects.all().order_by('-common_name')self.assertQuerySetEqual(sorted_queryset,expected_queryset,transform=lambdax:x,msg="Queryset should be sorted by 'common_name' descending.")
[docs]deftest_sort_list_of_dicts(self)->None:"""Test sorting of a list of dictionaries."""view=SortableTableFromListView(queryset=self.device_list,default_sort_param='common_name')view.request=self.factory.get('/?sort=common_name')sorted_list=view.get_queryset()expected_list=sorted(self.device_list,key=lambdax:x['common_name'],reverse=False)assertsorted_list==expected_list,"List of dictionaries should be sorted by 'common_name' ascending."
[docs]deftest_sort_list_of_dicts_descending(self)->None:"""Test sorting of a list of dictionaries in descending order."""view=SortableTableFromListView(queryset=self.device_list,default_sort_param='common_name')view.request=self.factory.get('/?sort=-common_name')sorted_list=view.get_queryset()expected_list=sorted(self.device_list,key=lambdax:x['common_name'],reverse=True)assertsorted_list==expected_list, \
"List of dictionaries should be sorted by 'common_name' descending."
[docs]deftest_default_sort_param(self)->None:"""Test sorting using the default sort parameter."""view=SortableTableFromListView(queryset=self.device_list,default_sort_param='serial_number')view.request=self.factory.get('/')# No sort parameter in the URLsorted_list=view.get_queryset()expected_list=sorted(self.device_list,key=lambdax:x['serial_number'],reverse=False)assertsorted_list==expected_list, \
"List of dictionaries should be sorted by default 'serial_number' ascending."