1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00

fix(instances): the grouped instance list without computes has a table body

The grouped list opens one tbody per compute, so with no compute the
sortable table had none, and sortable.js threw on page load ("Cannot read
properties of undefined (reading 'rows')"). An empty tbody is rendered
in that case.
This commit is contained in:
catborise 2026-10-19 15:54:04 +03:00
parent 6f44461c28
commit ea7030d2a1
2 changed files with 11 additions and 0 deletions

View file

@ -88,6 +88,8 @@
{% endfor %}
{% endif %}
</tbody>
{% empty %}
<tbody></tbody>{# sortable.js needs a table body #}
{% endfor %}
</table>

View file

@ -2,11 +2,13 @@
from unittest.mock import PropertyMock, patch
from appsettings.models import AppSettings
from computes.models import Compute
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from instances.models import Instance
from lxml import html
class InstancesIndexTests(TestCase):
@ -42,3 +44,10 @@ class InstancesIndexTests(TestCase):
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, "test4")
self.assertEqual(list(response.context["computes"][0].instance_set.all()), [])
def test_the_grouped_list_without_computes_has_a_table_body(self):
# sortable.js reads the first tbody's rows: without one it throws and leaves the table unsortable
AppSettings.objects.filter(key="VIEW_INSTANCES_LIST_STYLE").update(value="grouped")
self.client.force_login(get_user_model().objects.create_superuser("grouped-admin", "g@example.com", "pw"))
page = html.fromstring(self.client.get(reverse("instances:index")).content)
self.assertEqual(len(page.xpath("//table[@data-sortable]/tbody")), 1)