mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-09 11:46:49 +00:00
131 test modules sat next to the code they test; instances alone had 51 of them beside views.py and utils.py. They move into a tests/ package per app, and the JavaScript checks into webvirtcloud/tests/js. Each non-empty tests.py becomes tests/test_views.py; the empty generated stubs are removed. Imports of the app's own modules become absolute, paths built from __file__ go one level up, the live helper is instances.tests.livetest, and coverage omits */tests/*. The suite discovers the same 960 tests as before.
56 lines
2.5 KiB
Python
56 lines
2.5 KiB
Python
"""Superusers list the ownership kept for VMs that vanished and can remove it."""
|
|
|
|
from datetime import timedelta
|
|
|
|
from django.contrib.auth.models import User
|
|
from django.test import TestCase, override_settings
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
|
|
from instances.models import InstanceTombstone
|
|
|
|
UUID = "00000000-0000-4000-8000-000000000001"
|
|
|
|
|
|
class TombstoneTests(TestCase):
|
|
def setUp(self):
|
|
self.client.force_login(User.objects.create_superuser("ts-admin", "ts@example.com", "pw"))
|
|
self.owner = User.objects.create_user("ts-owner", password="pw")
|
|
self.tombstone = InstanceTombstone.objects.create(
|
|
uuid=UUID,
|
|
name="ts-vm",
|
|
owners=[
|
|
{"user": self.owner.id, "is_change": True, "is_delete": False, "is_vnc": True},
|
|
{"user": 999999, "is_change": False, "is_delete": False, "is_vnc": False},
|
|
],
|
|
)
|
|
|
|
@override_settings(INSTANCE_OWNERSHIP_RETENTION_DAYS=7)
|
|
def test_the_list_shows_the_vm_its_owners_and_when_it_expires(self):
|
|
removed = timezone.now() - timedelta(days=2)
|
|
InstanceTombstone.objects.filter(pk=self.tombstone.pk).update(removed=removed)
|
|
response = self.client.get(reverse("admin:tombstone_list"))
|
|
self.assertEqual(response.status_code, 200)
|
|
row = response.context["tombstones"][0]
|
|
self.assertEqual(row.owner_names, ["ts-owner", "deleted user"])
|
|
self.assertEqual(row.expires, removed + timedelta(days=7))
|
|
self.assertContains(response, "ts-vm")
|
|
self.assertContains(response, UUID)
|
|
self.assertContains(response, "ts-owner")
|
|
|
|
def test_only_superusers_see_or_remove_them(self):
|
|
self.client.force_login(self.owner)
|
|
self.assertEqual(self.client.get(reverse("admin:tombstone_list")).status_code, 403)
|
|
url = reverse("admin:tombstone_delete", args=[self.tombstone.pk])
|
|
self.assertEqual(self.client.post(url).status_code, 403)
|
|
self.assertTrue(InstanceTombstone.objects.exists())
|
|
|
|
def test_a_get_only_asks_for_confirmation(self):
|
|
response = self.client.get(reverse("admin:tombstone_delete", args=[self.tombstone.pk]))
|
|
self.assertContains(response, "ts-vm")
|
|
self.assertTrue(InstanceTombstone.objects.exists())
|
|
|
|
def test_a_post_removes_it(self):
|
|
response = self.client.post(reverse("admin:tombstone_delete", args=[self.tombstone.pk]))
|
|
self.assertRedirects(response, reverse("admin:tombstone_list"))
|
|
self.assertFalse(InstanceTombstone.objects.exists())
|