1+ from datetime import timedelta
2+
13from django .contrib .auth .models import Permission
24from django .test import TestCase
35from django .test .client import BOUNDARY , MULTIPART_CONTENT , encode_multipart
46from django .test .testcases import TransactionTestCase
57from django .urls import reverse
8+ from django .utils import timezone
69from swapper import load_model
710
811from openwisp_controller .config .api .serializers import BaseConfigSerializer
@@ -244,11 +247,31 @@ def test_device_create_with_devicegroup(self):
244247 self .assertEqual (response .data ["group" ], device_group .pk )
245248
246249 def test_device_list_api (self ):
247- self ._create_device ()
250+ device = self ._create_device ()
248251 path = reverse ("config_api:device_list" )
249252 with self .assertNumQueries (4 ):
250253 r = self .client .get (path )
251254 self .assertEqual (r .status_code , 200 )
255+ with self .subTest ("device list should show most recent first" ):
256+ org = self ._get_org ()
257+ recent = self ._create_device (
258+ name = "recent-device-2" ,
259+ mac_address = "00:00:00:00:00:02" ,
260+ organization = org ,
261+ )
262+ oldest = self ._create_device (
263+ name = "oldest-device" ,
264+ mac_address = "00:00:00:00:00:03" ,
265+ organization = org ,
266+ )
267+ oldest .created = timezone .now () - timedelta (days = 2 )
268+ oldest .save (update_fields = ["created" ])
269+ path = reverse ("config_api:device_list" )
270+ response = self .client .get (path )
271+ self .assertEqual (response .status_code , 200 )
272+ names = [d ["name" ] for d in response .data ["results" ]]
273+ expected = [recent .name , device .name , oldest .name ]
274+ self .assertEqual (names , expected )
252275
253276 def test_device_list_api_filter (self ):
254277 org1 = self ._create_org ()
@@ -1028,7 +1051,7 @@ def test_devicegroup_create_api(self):
10281051 self .assertEqual (response .data ["templates" ], [template .pk ])
10291052
10301053 def test_devicegroup_list_api (self ):
1031- self ._create_device_group ()
1054+ dg = self ._create_device_group ()
10321055 path = reverse ("config_api:devicegroup_list" )
10331056 with self .subTest ("assert number of queries" ):
10341057 with self .assertNumQueries (5 ):
@@ -1044,6 +1067,16 @@ def test_devicegroup_list_api(self):
10441067 self .assertNotContains (
10451068 r , f'<option value="{ t2 .id } ">{ t2 .name } </option>' , html = True
10461069 )
1070+ with self .subTest ("device group list should show most recent first" ):
1071+ dg_recent = self ._create_device_group (name = "Recent" )
1072+ dg_old = self ._create_device_group (name = "Oldest" )
1073+ old_date = timezone .now () - timedelta (days = 2 )
1074+ DeviceGroup .objects .filter (pk = dg_old .pk ).update (created = old_date )
1075+ response = self .client .get (path )
1076+ self .assertEqual (response .status_code , 200 )
1077+ returned_ids = [group ["id" ] for group in response .data ["results" ]]
1078+ expected_order = [str (dg_recent .pk ), str (dg .pk ), str (dg_old .pk )]
1079+ self .assertEqual (returned_ids , expected_order )
10471080
10481081 def test_devicegroup_list_api_filter (self ):
10491082 org1 = self ._create_org ()
0 commit comments