From 3b04595c7a40ab84ea9b13d046d4b66867edd103 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sun, 7 May 2023 13:45:30 +0200 Subject: [PATCH] Add better handling for missing groups --- gnuviechadmin/hostingpackages/models.py | 12 ++++++-- .../hostingpackages/tests/test_models.py | 30 +++++++++++++++++-- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/gnuviechadmin/hostingpackages/models.py b/gnuviechadmin/hostingpackages/models.py index 6f04bf5..496083f 100644 --- a/gnuviechadmin/hostingpackages/models.py +++ b/gnuviechadmin/hostingpackages/models.py @@ -5,6 +5,7 @@ This module contains the hosting package models. from __future__ import absolute_import from django.conf import settings +from django.core.exceptions import ImproperlyConfigured from django.db import models, transaction from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -370,9 +371,14 @@ class CustomerHostingPackage(HostingPackageBase): self.copy_template_attributes() self.osuser = OsUser.objects.create_user(self.customer) for group in settings.OSUSER_DEFAULT_GROUPS: - AdditionalGroup.objects.create( - user=self.osuser, group=Group.objects.get(groupname=group) - ) + try: + AdditionalGroup.objects.create( + user=self.osuser, group=Group.objects.get(groupname=group) + ) + except Group.DoesNotExist as e: + raise ImproperlyConfigured( + f"group {group} has not been defined" + ) from e return super(CustomerHostingPackage, self).save(*args, **kwargs) diff --git a/gnuviechadmin/hostingpackages/tests/test_models.py b/gnuviechadmin/hostingpackages/tests/test_models.py index 66f579c..5db3c20 100644 --- a/gnuviechadmin/hostingpackages/tests/test_models.py +++ b/gnuviechadmin/hostingpackages/tests/test_models.py @@ -2,10 +2,17 @@ Test for models. """ +from django.contrib.auth import get_user_model +from django.core.exceptions import ImproperlyConfigured +from django.test import TestCase, override_settings -from django.test import TestCase +from hostingpackages.models import ( + DISK_SPACE_UNITS, + CustomerHostingPackage, + HostingPackageTemplate, +) -from hostingpackages.models import DISK_SPACE_UNITS, CustomerHostingPackage +User = get_user_model() class CustomerHostingPackageTest(TestCase): @@ -13,7 +20,7 @@ class CustomerHostingPackageTest(TestCase): package = CustomerHostingPackage( diskspace=10, diskspace_unit=DISK_SPACE_UNITS.G ) - self.assertEqual(package.get_disk_space(), 10 * 1024 ** 3) + self.assertEqual(package.get_disk_space(), 10 * 1024**3) def test_get_disk_space_mib(self): package = CustomerHostingPackage( @@ -26,3 +33,20 @@ class CustomerHostingPackageTest(TestCase): diskspace=256, diskspace_unit=DISK_SPACE_UNITS.M ) self.assertEqual(package.get_quota(), (262144, 275251)) + + @override_settings(OSUSER_DEFAULT_GROUPS=["testgroup"]) + def test_additional_group_not_defined(self): + user = User.objects.create(username="test") + template = HostingPackageTemplate.objects.create( + description="Test package 1 - Description", + mailboxcount=10, + diskspace=100, + diskspace_unit=DISK_SPACE_UNITS.M, + name="Test package 1", + ) + with self.assertRaises(ImproperlyConfigured) as ctx: + package = CustomerHostingPackage.objects.create_from_template( + customer=user, template=template, name="Test customer package" + ) + package.save() + self.assertIn("testgroup", str(ctx.exception))