Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 35 additions & 2 deletions openwisp_controller/config/tests/test_api.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
from datetime import timedelta

from django.contrib.auth.models import Permission
from django.test import TestCase
from django.test.client import BOUNDARY, MULTIPART_CONTENT, encode_multipart
from django.test.testcases import TransactionTestCase
from django.urls import reverse
from django.utils import timezone
from swapper import load_model

from openwisp_controller.config.api.serializers import BaseConfigSerializer
Expand Down Expand Up @@ -244,11 +247,31 @@ def test_device_create_with_devicegroup(self):
self.assertEqual(response.data["group"], device_group.pk)

def test_device_list_api(self):
self._create_device()
device = self._create_device()
path = reverse("config_api:device_list")
with self.assertNumQueries(4):
r = self.client.get(path)
self.assertEqual(r.status_code, 200)
with self.subTest("device list should show most recent first"):
org = self._get_org()
recent = self._create_device(
name="recent-device-2",
mac_address="00:00:00:00:00:02",
organization=org,
)
oldest = self._create_device(
name="oldest-device",
mac_address="00:00:00:00:00:03",
organization=org,
)
oldest.created = timezone.now() - timedelta(days=2)
oldest.save(update_fields=["created"])
path = reverse("config_api:device_list")
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
names = [d["name"] for d in response.data["results"]]
expected = [recent.name, device.name, oldest.name]
self.assertEqual(names, expected)

def test_device_list_api_filter(self):
org1 = self._create_org()
Expand Down Expand Up @@ -1028,7 +1051,7 @@ def test_devicegroup_create_api(self):
self.assertEqual(response.data["templates"], [template.pk])

def test_devicegroup_list_api(self):
self._create_device_group()
dg = self._create_device_group()
path = reverse("config_api:devicegroup_list")
with self.subTest("assert number of queries"):
with self.assertNumQueries(5):
Expand All @@ -1044,6 +1067,16 @@ def test_devicegroup_list_api(self):
self.assertNotContains(
r, f'<option value="{t2.id}">{t2.name}</option>', html=True
)
with self.subTest("device group list should show most recent first"):
dg_recent = self._create_device_group(name="Recent")
dg_old = self._create_device_group(name="Oldest")
old_date = timezone.now() - timedelta(days=2)
DeviceGroup.objects.filter(pk=dg_old.pk).update(created=old_date)
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
returned_ids = [group["id"] for group in response.data["results"]]
expected_order = [str(dg_recent.pk), str(dg.pk), str(dg_old.pk)]
self.assertEqual(returned_ids, expected_order)

def test_devicegroup_list_api_filter(self):
org1 = self._create_org()
Expand Down
7 changes: 6 additions & 1 deletion openwisp_controller/connection/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@ def get_parent_queryset(self):
)

def get_queryset(self):
return super().get_queryset().filter(device_id=self.kwargs["device_id"])
return (
super()
.get_queryset()
.filter(device_id=self.kwargs["device_id"])
.order_by("-created")
)

def get_serializer_context(self):
context = super().get_serializer_context()
Expand Down
31 changes: 31 additions & 0 deletions openwisp_controller/connection/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.contrib.auth.models import Permission
from django.test import TestCase
from django.urls import reverse
from django.utils.timezone import now, timedelta
from packaging.version import parse as parse_version
from rest_framework import VERSION as REST_FRAMEWORK_VERSION
from rest_framework.exceptions import ErrorDetail
Expand Down Expand Up @@ -125,6 +126,13 @@ def test_command_list_api(self):
self.assertIn("device", command_obj)
self.assertIn("connection", command_obj)

with self.subTest("Test results ordering, recent first"):
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
created_list = [cmd["created"] for cmd in response.data["results"]]
sorted_created_list = sorted(created_list, reverse=True)
self.assertEqual(created_list, sorted_created_list)

def test_command_create_api(self):
def test_command_attributes(self, payload):
self.assertEqual(command_qs.count(), 1)
Expand Down Expand Up @@ -392,6 +400,16 @@ def test_get_credentials_list(self):
with self.assertNumQueries(4):
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
with self.subTest("Check ordering of credentials"):
cred_old = self._create_credentials(name="Old Credential")
cred_old.created = now() - timedelta(days=1)
cred_old.save()
self._create_credentials(name="Newest Credential")
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
created_list = [cred["created"] for cred in response.data["results"]]
sorted_created = sorted(created_list, reverse=True)
self.assertEqual(created_list, sorted_created)

def test_filter_credentials_list(self):
cred_1 = self._create_credentials(name="Credential One")
Expand Down Expand Up @@ -483,6 +501,19 @@ def test_get_deviceconnection_list(self):
response = self.client.get(path)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["count"], 0)
with self.subTest("Check ordering of device connections"):
self._create_config(device=d1)
creds = [self._create_credentials(name=f"Cred {i}") for i in range(3)]
creds[0].created = now() - timedelta(days=1)
creds[0].save()
for cred in creds:
DeviceConnection.objects.create(device=d1, credentials=cred)
response = self.client.get(path)
print(response.data)
self.assertEqual(response.status_code, 200)
created_list = [conn["created"] for conn in response.data["results"]]
sorted_created = sorted(created_list, reverse=True)
self.assertEqual(created_list, sorted_created)

def test_post_deviceconnection_list(self):
d1 = self._create_device()
Expand Down
Loading