diff --git a/gnuviechadmin/contact_form/tests/test_forms.py b/gnuviechadmin/contact_form/tests/test_forms.py index 61eb115..b546657 100644 --- a/gnuviechadmin/contact_form/tests/test_forms.py +++ b/gnuviechadmin/contact_form/tests/test_forms.py @@ -2,26 +2,18 @@ Tests for :py:mod:`contact_form.forms`. """ -from __future__ import absolute_import, unicode_literals +from unittest.mock import MagicMock, Mock, patch -import mock -from mock import MagicMock, Mock - -from django.core.urlresolvers import reverse -from django.test import TestCase from django.contrib.sites.models import Site +from django.test import TestCase +from django.urls import reverse from contact_form.forms import ContactForm -TEST_DATA = { - 'name': 'Test User', - 'email': 'test@example.org', - 'body': 'Test message' -} +TEST_DATA = {"name": "Test User", "email": "test@example.org", "body": "Test message"} class ContactFormTest(TestCase): - def test_constructor_needs_request(self): with self.assertRaises(KeyError): ContactForm() @@ -29,63 +21,63 @@ class ContactFormTest(TestCase): def test_constructor(self): request = MagicMock() form = ContactForm(request=request) - self.assertTrue(hasattr(form, 'request')) + self.assertTrue(hasattr(form, "request")) self.assertEqual(form.request, request) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse('contact_form')) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual(form.helper.form_action, reverse("contact_form")) self.assertEqual(len(form.helper.inputs), 1) - self.assertEqual(form.helper.inputs[0].name, 'submit') + self.assertEqual(form.helper.inputs[0].name, "submit") def test_constructor_fields(self): request = MagicMock() form = ContactForm(request=request) self.assertEqual(len(form.fields), 3) - self.assertIn('email', form.fields) - self.assertIn('name', form.fields) - self.assertIn('body', form.fields) + self.assertIn("email", form.fields) + self.assertIn("name", form.fields) + self.assertIn("body", form.fields) self.assertEqual(len(form.data), 0) def test_get_context_invalid(self): request = MagicMock() form = ContactForm(request=request) with self.assertRaisesMessage( - ValueError, - 'Cannot generate context from invalid contact form'): + ValueError, "Cannot generate context from invalid contact form" + ): form.get_context() def test_get_context_valid_site_installed(self): request = MagicMock() form = ContactForm(request=request, data=TEST_DATA) context = form.get_context() - self.assertIn('site', context) - self.assertIn('name', context) - self.assertIn('email', context) - self.assertIn('body', context) + self.assertIn("site", context) + self.assertIn("name", context) + self.assertIn("email", context) + self.assertIn("body", context) def test_get_context_valid_site_not_installed(self): request = MagicMock() form = ContactForm(request=request, data=TEST_DATA) - with mock.patch('contact_form.forms.Site') as sitemock: + with patch("contact_form.forms.Site") as sitemock: sitemock._meta.installed = False context = form.get_context() - self.assertIn('site', context) - self.assertIn('name', context) - self.assertIn('email', context) - self.assertIn('body', context) + self.assertIn("site", context) + self.assertIn("name", context) + self.assertIn("email", context) + self.assertIn("body", context) def test_message(self): request = Mock() - request.META = {'REMOTE_ADDR': '127.0.0.1'} + request.META = {"REMOTE_ADDR": "127.0.0.1"} form = ContactForm(request=request, data=TEST_DATA) message = form.message() - self.assertIn(TEST_DATA['name'], message) - self.assertIn(TEST_DATA['email'], message) - self.assertIn(TEST_DATA['body'], message) - self.assertIn('127.0.0.1', message) + self.assertIn(TEST_DATA["name"], message) + self.assertIn(TEST_DATA["email"], message) + self.assertIn(TEST_DATA["body"], message) + self.assertIn("127.0.0.1", message) def test_subject(self): request = Mock() form = ContactForm(request=request, data=TEST_DATA) subject = form.subject() self.assertIn(Site.objects.get_current().name, subject) - self.assertIn(TEST_DATA['name'], subject) + self.assertIn(TEST_DATA["name"], subject) diff --git a/gnuviechadmin/contact_form/tests/test_views.py b/gnuviechadmin/contact_form/tests/test_views.py index 41d98b7..f7df680 100644 --- a/gnuviechadmin/contact_form/tests/test_views.py +++ b/gnuviechadmin/contact_form/tests/test_views.py @@ -2,126 +2,122 @@ Tests for :py:mod:`contact_form.views`. """ -from __future__ import absolute_import, unicode_literals - -from django.core import mail -from django.core.urlresolvers import reverse -from django.test import TestCase - from django.contrib.auth import get_user_model - +from django.core import mail +from django.test import TestCase +from django.urls import reverse User = get_user_model() -TEST_USER = 'test' -TEST_PASSWORD = 'secret' -TEST_EMAIL = 'test@example.org' -TEST_NAME = 'Example Tester'.split() -TEST_MESSAGE = ''' +TEST_USER = "test" +TEST_PASSWORD = "secret" +TEST_EMAIL = "test@example.org" +TEST_NAME = "Example Tester".split() +TEST_MESSAGE = """ This is a really unimportant test message. -''' +""" class ContactFormViewTest(TestCase): - def _setup_user(self, **kwargs): return User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD, - **kwargs) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD, **kwargs + ) def test_get_contact_form_template(self): - response = self.client.get(reverse('contact_form')) - self.assertTemplateUsed(response, 'contact_form/contact_form.html') + response = self.client.get(reverse("contact_form")) + self.assertTemplateUsed(response, "contact_form/contact_form.html") def test_get_contact_form_anonymous_status(self): - response = self.client.get(reverse('contact_form')) + response = self.client.get(reverse("contact_form")) self.assertEqual(response.status_code, 200) def test_get_contact_form_anonymous_has_empty_form(self): - response = self.client.get(reverse('contact_form')) - self.assertIn('form', response.context) - form = response.context['form'] + response = self.client.get(reverse("contact_form")) + self.assertIn("form", response.context) + form = response.context["form"] self.assertEqual(len(form.initial), 0) def test_get_contact_form_fields_anonymous(self): - response = self.client.get(reverse('contact_form')) - for name in ('name', 'email', 'body'): - self.assertIn(name, response.context['form'].fields) + response = self.client.get(reverse("contact_form")) + for name in ("name", "email", "body"): + self.assertIn(name, response.context["form"].fields) def test_post_empty_form_template(self): - response = self.client.post(reverse('contact_form'), {}) - self.assertTemplateUsed(response, 'contact_form/contact_form.html') + response = self.client.post(reverse("contact_form"), {}) + self.assertTemplateUsed(response, "contact_form/contact_form.html") def test_post_empty_form_status(self): - response = self.client.post(reverse('contact_form'), {}) + response = self.client.post(reverse("contact_form"), {}) self.assertEqual(response.status_code, 200) def test_post_empty_form_validation_errors(self): - response = self.client.post(reverse('contact_form'), {}) - self.assertIn('form', response.context) - form = response.context['form'] + response = self.client.post(reverse("contact_form"), {}) + self.assertIn("form", response.context) + form = response.context["form"] self.assertFalse(form.is_valid()) self.assertEqual(len(form.errors), 3) def test_post_empty_form_no_mail(self): - self.client.post(reverse('contact_form'), {}) + self.client.post(reverse("contact_form"), {}) self.assertEqual(len(mail.outbox), 0) def test_get_contact_form_logged_in_no_fullname_initial(self): self._setup_user() self.client.login(username=TEST_USER, password=TEST_PASSWORD) - response = self.client.get(reverse('contact_form')) - self.assertIn('form', response.context) - form = response.context['form'] - self.assertEqual( - form.initial, {'name': TEST_USER, 'email': TEST_EMAIL}) + response = self.client.get(reverse("contact_form")) + self.assertIn("form", response.context) + form = response.context["form"] + self.assertEqual(form.initial, {"name": TEST_USER, "email": TEST_EMAIL}) def test_get_contact_form_logged_in_fullname_initial(self): - self._setup_user( - first_name=TEST_NAME[0], last_name=TEST_NAME[1]) + self._setup_user(first_name=TEST_NAME[0], last_name=TEST_NAME[1]) self.client.login(username=TEST_USER, password=TEST_PASSWORD) - response = self.client.get(reverse('contact_form')) - self.assertIn('form', response.context) - form = response.context['form'] + response = self.client.get(reverse("contact_form")) + self.assertIn("form", response.context) + form = response.context["form"] self.assertEqual( - form.initial, - {'name': " ".join(TEST_NAME), 'email': TEST_EMAIL}) + form.initial, {"name": " ".join(TEST_NAME), "email": TEST_EMAIL} + ) def test_post_filled_form_anonymous_redirects(self): - response = self.client.post(reverse('contact_form'), { - 'name': TEST_USER, 'email': TEST_EMAIL, 'body': TEST_MESSAGE}) - self.assertRedirects(response, reverse('contact_success')) + response = self.client.post( + reverse("contact_form"), + {"name": TEST_USER, "email": TEST_EMAIL, "body": TEST_MESSAGE}, + ) + self.assertRedirects(response, reverse("contact_success")) def test_post_filled_form_anonymous_mail(self): - self.client.post(reverse('contact_form'), { - 'name': TEST_USER, 'email': TEST_EMAIL, 'body': TEST_MESSAGE}) + self.client.post( + reverse("contact_form"), + {"name": TEST_USER, "email": TEST_EMAIL, "body": TEST_MESSAGE}, + ) self.assertEqual(len(mail.outbox), 1) def test_post_filled_form_logged_in_redirects(self): - self._setup_user( - first_name=TEST_NAME[0], last_name=TEST_NAME[1]) + self._setup_user(first_name=TEST_NAME[0], last_name=TEST_NAME[1]) self.client.login(username=TEST_USER, password=TEST_PASSWORD) - response = self.client.post(reverse('contact_form'), { - 'name': " ".join(TEST_NAME), 'email': TEST_EMAIL, - 'body': TEST_MESSAGE}) - self.assertRedirects(response, reverse('contact_success')) + response = self.client.post( + reverse("contact_form"), + {"name": " ".join(TEST_NAME), "email": TEST_EMAIL, "body": TEST_MESSAGE}, + ) + self.assertRedirects(response, reverse("contact_success")) def test_post_filled_form_logged_in_mail(self): - self._setup_user( - first_name=TEST_NAME[0], last_name=TEST_NAME[1]) + self._setup_user(first_name=TEST_NAME[0], last_name=TEST_NAME[1]) self.client.login(username=TEST_USER, password=TEST_PASSWORD) - self.client.post(reverse('contact_form'), { - 'name': " ".join(TEST_NAME), 'email': TEST_EMAIL, - 'body': TEST_MESSAGE}) + self.client.post( + reverse("contact_form"), + {"name": " ".join(TEST_NAME), "email": TEST_EMAIL, "body": TEST_MESSAGE}, + ) self.assertEqual(len(mail.outbox), 1) class ContactSuccessViewTest(TestCase): - def test_get_template(self): - response = self.client.get(reverse('contact_success')) - self.assertTemplateUsed(response, 'contact_form/contact_success.html') + response = self.client.get(reverse("contact_success")) + self.assertTemplateUsed(response, "contact_form/contact_success.html") def test_get_status(self): - response = self.client.get(reverse('contact_success')) + response = self.client.get(reverse("contact_success")) self.assertEqual(response.status_code, 200) diff --git a/gnuviechadmin/dashboard/tests/test_views.py b/gnuviechadmin/dashboard/tests/test_views.py index dcf5e17..2ff835b 100644 --- a/gnuviechadmin/dashboard/tests/test_views.py +++ b/gnuviechadmin/dashboard/tests/test_views.py @@ -3,66 +3,65 @@ Tests for :py:mod:`dashboard.views`. """ -from django.core.urlresolvers import reverse -from django.test import TestCase from django.contrib.auth import get_user_model - +from django.test import TestCase +from django.urls import reverse User = get_user_model() -TEST_USER = 'test' -TEST_PASSWORD = 'secret' +TEST_USER = "test" +TEST_PASSWORD = "secret" class IndexViewTest(TestCase): - def test_index_view(self): - response = self.client.get(reverse('dashboard')) + response = self.client.get(reverse("dashboard")) self.assertEqual(response.status_code, 200) - self.assertTemplateUsed(response, 'dashboard/index.html') + self.assertTemplateUsed(response, "dashboard/index.html") class UserDashboardViewTest(TestCase): - def _create_test_user(self): self.user = User.objects.create(username=TEST_USER) self.user.set_password(TEST_PASSWORD) self.user.save() def test_user_dashboard_view_no_user(self): - response = self.client.get(reverse( - 'customer_dashboard', kwargs={'slug': TEST_USER})) + response = self.client.get( + reverse("customer_dashboard", kwargs={"slug": TEST_USER}) + ) self.assertEqual(response.status_code, 404) def test_user_dashboard_view_anonymous(self): User.objects.create(username=TEST_USER) - response = self.client.get(reverse( - 'customer_dashboard', kwargs={'slug': TEST_USER})) + response = self.client.get( + reverse("customer_dashboard", kwargs={"slug": TEST_USER}) + ) self.assertEqual(response.status_code, 403) def test_user_dashboard_view_logged_in_ok(self): self._create_test_user() - self.assertTrue( - self.client.login(username=TEST_USER, password=TEST_PASSWORD)) - response = self.client.get(reverse( - 'customer_dashboard', kwargs={'slug': TEST_USER})) + self.assertTrue(self.client.login(username=TEST_USER, password=TEST_PASSWORD)) + response = self.client.get( + reverse("customer_dashboard", kwargs={"slug": TEST_USER}) + ) self.assertEqual(response.status_code, 200) def test_user_dashboard_view_logged_in_template(self): self._create_test_user() - self.assertTrue( - self.client.login(username=TEST_USER, password=TEST_PASSWORD)) - response = self.client.get(reverse( - 'customer_dashboard', kwargs={'slug': TEST_USER})) - self.assertTemplateUsed(response, 'dashboard/user_dashboard.html') + self.assertTrue(self.client.login(username=TEST_USER, password=TEST_PASSWORD)) + response = self.client.get( + reverse("customer_dashboard", kwargs={"slug": TEST_USER}) + ) + self.assertTemplateUsed(response, "dashboard/user_dashboard.html") def test_user_dashboard_view_logged_in_context_fresh(self): self._create_test_user() - self.assertTrue( - self.client.login(username=TEST_USER, password=TEST_PASSWORD)) - response = self.client.get(reverse( - 'customer_dashboard', kwargs={'slug': TEST_USER})) - self.assertIn('dashboard_user', response.context) - self.assertEqual(self.user, response.context['dashboard_user']) - self.assertIn('hosting_packages', response.context) - self.assertEqual(len(response.context['hosting_packages']), 0) + self.assertTrue(self.client.login(username=TEST_USER, password=TEST_PASSWORD)) + response = self.client.get( + reverse("customer_dashboard", kwargs={"slug": TEST_USER}) + ) + self.assertIn("dashboard_user", response.context) + self.assertEqual(self.user, response.context["dashboard_user"]) + self.assertIn("hosting_packages", response.context) + self.assertEqual(len(response.context["hosting_packages"]), 0) diff --git a/gnuviechadmin/domains/tests/test_admin.py b/gnuviechadmin/domains/tests/test_admin.py index aa717a9..15bfaac 100644 --- a/gnuviechadmin/domains/tests/test_admin.py +++ b/gnuviechadmin/domains/tests/test_admin.py @@ -1,8 +1,8 @@ from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse class TestMailDomainAdmin(TestCase): def test_admin_for_maildomain(self): - admin_url = reverse('admin:domains_maildomain_changelist') + admin_url = reverse("admin:domains_maildomain_changelist") self.assertIsNotNone(admin_url) diff --git a/gnuviechadmin/domains/tests/test_forms.py b/gnuviechadmin/domains/tests/test_forms.py index 746432f..7bc1f64 100644 --- a/gnuviechadmin/domains/tests/test_forms.py +++ b/gnuviechadmin/domains/tests/test_forms.py @@ -2,51 +2,42 @@ Tests for :py:mod:`domains.forms`. """ -from __future__ import absolute_import, unicode_literals +from unittest.mock import MagicMock, Mock, patch -from mock import MagicMock, Mock, patch - -from django.core.urlresolvers import reverse from django.forms import ValidationError from django.test import TestCase +from django.urls import reverse from django.utils.translation import ugettext as _ from domains.forms import relative_domain_validator, CreateHostingDomainForm class RelativeDomainValidatorTest(TestCase): - def test_valid_domainname(self): - relative_domain_validator('example.org') + relative_domain_validator("example.org") def test_domain_name_too_long(self): - with self.assertRaisesMessage( - ValidationError, _('host name too long')): - relative_domain_validator('e' * 255) + with self.assertRaisesMessage(ValidationError, _("host name too long")): + relative_domain_validator("e" * 255) def test_domain_name_part_too_long(self): - with self.assertRaisesMessage( - ValidationError, _('invalid domain name')): - relative_domain_validator('a' * 64 + '.org') + with self.assertRaisesMessage(ValidationError, _("invalid domain name")): + relative_domain_validator("a" * 64 + ".org") def test_domain_name_illegal_characters(self): - with self.assertRaisesMessage( - ValidationError, _('invalid domain name')): - relative_domain_validator('eXampl3.org') + with self.assertRaisesMessage(ValidationError, _("invalid domain name")): + relative_domain_validator("eXampl3.org") def test_domain_name_starts_with_dash(self): - with self.assertRaisesMessage( - ValidationError, _('invalid domain name')): - relative_domain_validator('-example.org') + with self.assertRaisesMessage(ValidationError, _("invalid domain name")): + relative_domain_validator("-example.org") def test_domain_name_ends_with_dash(self): - with self.assertRaisesMessage( - ValidationError, _('invalid domain name')): - relative_domain_validator('example-.org') + with self.assertRaisesMessage(ValidationError, _("invalid domain name")): + relative_domain_validator("example-.org") class CreateHostingDomainFormTest(TestCase): - def test_constructor_needs_hostingpackage(self): instance = MagicMock() with self.assertRaises(KeyError): @@ -56,50 +47,53 @@ class CreateHostingDomainFormTest(TestCase): hostingpackage = Mock(id=42) instance = MagicMock() form = CreateHostingDomainForm(instance, hostingpackage=hostingpackage) - self.assertTrue(hasattr(form, 'hosting_package')) + self.assertTrue(hasattr(form, "hosting_package")) self.assertEqual(form.hosting_package, hostingpackage) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'create_hosting_domain', kwargs={'package': 42})) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("create_hosting_domain", kwargs={"package": 42}), + ) self.assertEqual(len(form.helper.layout.fields), 2) - self.assertEqual(form.helper.layout.fields[1].name, 'submit') + self.assertEqual(form.helper.layout.fields[1].name, "submit") def test_domain_field_has_relative_domain_validator(self): hostingpackage = Mock(id=42) instance = MagicMock() form = CreateHostingDomainForm(instance, hostingpackage=hostingpackage) - self.assertIn( - relative_domain_validator, form.fields['domain'].validators) + self.assertIn(relative_domain_validator, form.fields["domain"].validators) def test_clean(self): hostingpackage = Mock(id=42) instance = MagicMock() form = CreateHostingDomainForm( - instance, hostingpackage=hostingpackage, - data={'domain': 'example.org'}) + instance, hostingpackage=hostingpackage, data={"domain": "example.org"} + ) self.assertTrue(form.is_valid()) - self.assertIn('hosting_package', form.cleaned_data) - self.assertEqual(hostingpackage, form.cleaned_data['hosting_package']) + self.assertIn("hosting_package", form.cleaned_data) + self.assertEqual(hostingpackage, form.cleaned_data["hosting_package"]) def test_save(self): hostingpackage = Mock(id=42) instance = MagicMock() form = CreateHostingDomainForm( - instance, hostingpackage=hostingpackage, - data={'domain': 'example.org'}) + instance, hostingpackage=hostingpackage, data={"domain": "example.org"} + ) self.assertTrue(form.is_valid()) - with patch('domains.forms.HostingDomain') as domain: + with patch("domains.forms.HostingDomain") as domain: form.save() domain.objects.create_for_hosting_package.assert_called_with( - commit=True, **form.cleaned_data) + commit=True, **form.cleaned_data + ) form.save(commit=False) domain.objects.create_for_hosting_package.assert_called_with( - commit=False, **form.cleaned_data) + commit=False, **form.cleaned_data + ) def test_save_m2m(self): hostingpackage = Mock(id=42) instance = MagicMock() form = CreateHostingDomainForm( - instance, hostingpackage=hostingpackage, - data={'domain': 'example.org'}) + instance, hostingpackage=hostingpackage, data={"domain": "example.org"} + ) form.save_m2m() diff --git a/gnuviechadmin/domains/tests/test_models.py b/gnuviechadmin/domains/tests/test_models.py index abe4614..fd6d645 100644 --- a/gnuviechadmin/domains/tests/test_models.py +++ b/gnuviechadmin/domains/tests/test_models.py @@ -2,9 +2,7 @@ Tests for :py:mod:`domains.models`. """ -from __future__ import absolute_import, unicode_literals - -from mock import patch +from unittest.mock import patch from django.test import TestCase from django.contrib.auth import get_user_model @@ -20,41 +18,38 @@ from domains.models import ( HostingDomain, MailDomain, ) -from hostingpackages.models import ( - CustomerHostingPackage, - HostingPackageTemplate, -) +from hostingpackages.models import CustomerHostingPackage, HostingPackageTemplate User = get_user_model() -TEST_USER = 'test' +TEST_USER = "test" class MailDomainTest(TestCase): - def test___str__(self): - md = MailDomain.objects.create(domain='example.org') - self.assertEqual(str(md), 'example.org') + md = MailDomain.objects.create(domain="example.org") + self.assertEqual(str(md), "example.org") def test_get_mailaddresses(self): - md = MailDomain.objects.create(domain='example.org') + md = MailDomain.objects.create(domain="example.org") from managemails.models import MailAddress - addrmock = MailAddress.objects.create(localpart='info', domain=md) + + addrmock = MailAddress.objects.create(localpart="info", domain=md) self.assertIn(addrmock, md.get_mailaddresses()) self.assertIn(addrmock, md.mailaddresses) class HostingDomainManagerTest(TestCase): - def _setup_hosting_package(self): template = HostingPackageTemplate.objects.create( - name='testpackagetemplate', mailboxcount=0, diskspace=1, - diskspace_unit=0) + name="testpackagetemplate", mailboxcount=0, diskspace=1, diskspace_unit=0 + ) customer = User.objects.create_user(username=TEST_USER) package = CustomerHostingPackage.objects.create_from_template( - customer, template, 'testpackage') - with patch('hostingpackages.models.settings') as hmsettings: + customer, template, "testpackage" + ) + with patch("hostingpackages.models.settings") as hmsettings: hmsettings.OSUSER_DEFAULT_GROUPS = [] package.save() return package @@ -62,7 +57,8 @@ class HostingDomainManagerTest(TestCase): def test_create_for_hosting_package_with_commit(self): package = self._setup_hosting_package() hostingdomain = HostingDomain.objects.create_for_hosting_package( - package, 'example.org', True) + package, "example.org", True + ) self.assertIsNotNone(hostingdomain) self.assertTrue(hostingdomain.customer, package.customer) @@ -70,70 +66,60 @@ class HostingDomainManagerTest(TestCase): def test_create_for_hosting_package_no_commit(self): package = self._setup_hosting_package() hostingdomain = HostingDomain.objects.create_for_hosting_package( - package, 'example.org', False) + package, "example.org", False + ) self.assertIsNotNone(hostingdomain) self.assertTrue(hostingdomain.customer, package.customer) class HostingDomainTest(TestCase): - def test___str__(self): - hostingdomain = HostingDomain(domain='test') - self.assertEqual(str(hostingdomain), 'test') + hostingdomain = HostingDomain(domain="test") + self.assertEqual(str(hostingdomain), "test") class DNSDomainTest(TestCase): - def test___str__(self): - dnsdomain = DNSDomain(domain='test') - self.assertEqual(str(dnsdomain), 'test') + dnsdomain = DNSDomain(domain="test") + self.assertEqual(str(dnsdomain), "test") class DNSRecordTest(TestCase): - def test___str__(self): - dnsrecord = DNSRecord( - name='localhost', recordtype='A', content='127.0.0.1') - self.assertEqual(str(dnsrecord), 'localhost IN A 127.0.0.1') + dnsrecord = DNSRecord(name="localhost", recordtype="A", content="127.0.0.1") + self.assertEqual(str(dnsrecord), "localhost IN A 127.0.0.1") class DNSSupermasterTest(TestCase): - def test___str__(self): - dnssupermaster = DNSSupermaster( - ip='127.0.0.1', nameserver='dns.example.org') - self.assertEqual(str(dnssupermaster), '127.0.0.1 dns.example.org') + dnssupermaster = DNSSupermaster(ip="127.0.0.1", nameserver="dns.example.org") + self.assertEqual(str(dnssupermaster), "127.0.0.1 dns.example.org") class DNSCommentTest(TestCase): - def test___str__(self): - dnscomment = DNSComment( - name='localhost', commenttype='A', comment='good stuff') - self.assertEqual(str(dnscomment), 'localhost IN A: good stuff') + dnscomment = DNSComment(name="localhost", commenttype="A", comment="good stuff") + self.assertEqual(str(dnscomment), "localhost IN A: good stuff") class DNSDomainMetadataTest(TestCase): - def test___str__(self): - dnsdomain = DNSDomain(domain='test') + dnsdomain = DNSDomain(domain="test") dnsdomainmetadata = DNSDomainMetadata( - domain=dnsdomain, kind='SOA-EDIT', content='INCEPTION') - self.assertEqual(str(dnsdomainmetadata), 'test SOA-EDIT INCEPTION') + domain=dnsdomain, kind="SOA-EDIT", content="INCEPTION" + ) + self.assertEqual(str(dnsdomainmetadata), "test SOA-EDIT INCEPTION") class DNSCryptoKeyTest(TestCase): - def test___str__(self): - dnsdomain = DNSDomain(domain='test') - dnscryptokey = DNSCryptoKey(domain=dnsdomain, content='testvalue') - self.assertEqual(str(dnscryptokey), 'test testvalue') + dnsdomain = DNSDomain(domain="test") + dnscryptokey = DNSCryptoKey(domain=dnsdomain, content="testvalue") + self.assertEqual(str(dnscryptokey), "test testvalue") class DNSTSIGKeyTest(TestCase): - def test___str__(self): - dnstsigkey = DNSTSIGKey( - name='testkey', algorithm='hmac-md5', secret='dummykey') - self.assertEqual(str(dnstsigkey), 'testkey hmac-md5 XXXX') + dnstsigkey = DNSTSIGKey(name="testkey", algorithm="hmac-md5", secret="dummykey") + self.assertEqual(str(dnstsigkey), "testkey hmac-md5 XXXX") diff --git a/gnuviechadmin/domains/tests/test_views.py b/gnuviechadmin/domains/tests/test_views.py index 567f227..cc4e099 100644 --- a/gnuviechadmin/domains/tests/test_views.py +++ b/gnuviechadmin/domains/tests/test_views.py @@ -2,149 +2,152 @@ Tests for :py:mod:`domains.views`. """ -from __future__ import absolute_import, unicode_literals - -from mock import patch, MagicMock - -from django.core.urlresolvers import reverse -from django.test import TestCase +from unittest.mock import MagicMock, patch from django.contrib.auth import get_user_model - -from hostingpackages.models import ( - CustomerHostingPackage, - HostingPackageTemplate, -) +from django.test import TestCase +from django.urls import reverse from domains.views import CreateHostingDomain - +from hostingpackages.models import CustomerHostingPackage, HostingPackageTemplate User = get_user_model() -TEST_USER = 'test' -TEST_PASSWORD = 'secret' -TEST_EMAIL = 'test@example.org' -TEST_NAME = 'Example Tester'.split() +TEST_USER = "test" +TEST_PASSWORD = "secret" +TEST_EMAIL = "test@example.org" +TEST_NAME = "Example Tester".split() class CreateHostingDomainTest(TestCase): - def _setup_hosting_package(self, customer): template = HostingPackageTemplate.objects.create( - name='testpackagetemplate', mailboxcount=0, diskspace=1, - diskspace_unit=0) + name="testpackagetemplate", mailboxcount=0, diskspace=1, diskspace_unit=0 + ) package = CustomerHostingPackage.objects.create_from_template( - customer, template, 'testpackage') - with patch('hostingpackages.models.settings') as hmsettings: + customer, template, "testpackage" + ) + with patch("hostingpackages.models.settings") as hmsettings: hmsettings.OSUSER_DEFAULT_GROUPS = [] package.save() return package def test_get_anonymous(self): response = self.client.get( - reverse('create_hosting_domain', kwargs={'package': 1})) + reverse("create_hosting_domain", kwargs={"package": 1}) + ) self.assertEqual(response.status_code, 403) def test_get_regular_user(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_hosting_domain', - kwargs={'package': package.id})) + reverse("create_hosting_domain", kwargs={"package": package.id}) + ) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_hosting_domain', - kwargs={'package': package.id})) + reverse("create_hosting_domain", kwargs={"package": package.id}) + ) self.assertEqual(response.status_code, 200) def test_get_template(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_hosting_domain', - kwargs={'package': package.id})) - self.assertTemplateUsed(response, 'domains/hostingdomain_create.html') + reverse("create_hosting_domain", kwargs={"package": package.id}) + ) + self.assertTemplateUsed(response, "domains/hostingdomain_create.html") def test_get_no_package_found(self): User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_hosting_domain', - kwargs={'package': 1})) + reverse("create_hosting_domain", kwargs={"package": 1}) + ) self.assertEqual(response.status_code, 404) def test_get_get_form_kwargs(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = CreateHostingDomain( - request=MagicMock(), kwargs={'package': str(package.id)}) + request=MagicMock(), kwargs={"package": str(package.id)} + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], package) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], package) def test_get_context_data_has_hosting_package(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_hosting_domain', - kwargs={'package': package.id})) - self.assertIn('hostingpackage', response.context) - self.assertEqual(response.context['hostingpackage'], package) + reverse("create_hosting_domain", kwargs={"package": package.id}) + ) + self.assertIn("hostingpackage", response.context) + self.assertEqual(response.context["hostingpackage"], package) def test_get_context_data_has_customer(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_hosting_domain', - kwargs={'package': package.id})) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], customer) + reverse("create_hosting_domain", kwargs={"package": package.id}) + ) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], customer) def test_form_valid_redirect(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('create_hosting_domain', - kwargs={'package': package.id}), - data={'domain': 'example.org'}) + reverse("create_hosting_domain", kwargs={"package": package.id}), + data={"domain": "example.org"}, + ) self.assertRedirects(response, package.get_absolute_url()) def test_form_valid_message(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('create_hosting_domain', - kwargs={'package': package.id}), follow=True, - data={'domain': 'example.org'}) - messages = list(response.context['messages']) + reverse("create_hosting_domain", kwargs={"package": package.id}), + follow=True, + data={"domain": "example.org"}, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) - self.assertEqual( - 'Successfully created domain example.org', str(messages[0])) + self.assertEqual("Successfully created domain example.org", str(messages[0])) diff --git a/gnuviechadmin/domains/views.py b/gnuviechadmin/domains/views.py index 6ab3b78..41ca975 100644 --- a/gnuviechadmin/domains/views.py +++ b/gnuviechadmin/domains/views.py @@ -5,54 +5,49 @@ This module defines views related to domains. from __future__ import absolute_import, unicode_literals from braces.views import StaffuserRequiredMixin -from django.contrib.auth.mixins import LoginRequiredMixin -from django.shortcuts import redirect, get_object_or_404 -from django.views.generic.edit import CreateView -from django.utils.translation import ugettext as _ from django.contrib import messages +from django.shortcuts import get_object_or_404, redirect +from django.utils.translation import ugettext as _ +from django.views.generic.edit import CreateView from hostingpackages.models import CustomerHostingPackage - from .forms import CreateHostingDomainForm from .models import HostingDomain -class CreateHostingDomain( - LoginRequiredMixin, StaffuserRequiredMixin, CreateView -): +class CreateHostingDomain(StaffuserRequiredMixin, CreateView): """ This view is used for creating a new HostingDomain instance for an existing hosting package. - """ + model = HostingDomain raise_exception = True - template_name_suffix = '_create' + template_name_suffix = "_create" form_class = CreateHostingDomainForm def _get_hosting_package(self): - return get_object_or_404( - CustomerHostingPackage, pk=int(self.kwargs['package'])) + return get_object_or_404(CustomerHostingPackage, pk=int(self.kwargs["package"])) def get_form_kwargs(self): kwargs = super(CreateHostingDomain, self).get_form_kwargs() - kwargs['hostingpackage'] = self._get_hosting_package() + kwargs["hostingpackage"] = self._get_hosting_package() return kwargs def get_context_data(self, **kwargs): context = super(CreateHostingDomain, self).get_context_data(**kwargs) hosting_package = self._get_hosting_package() - context.update({ - 'hostingpackage': hosting_package, - 'customer': hosting_package.customer, - }) + context.update( + {"hostingpackage": hosting_package, "customer": hosting_package.customer} + ) return context def form_valid(self, form): hostingdomain = form.save() messages.success( self.request, - _('Successfully created domain {domainname}').format( - domainname=hostingdomain.domain) + _("Successfully created domain {domainname}").format( + domainname=hostingdomain.domain + ), ) return redirect(self._get_hosting_package()) diff --git a/gnuviechadmin/gnuviechadmin/settings.py b/gnuviechadmin/gnuviechadmin/settings.py index 169683e..26b5b9d 100644 --- a/gnuviechadmin/gnuviechadmin/settings.py +++ b/gnuviechadmin/gnuviechadmin/settings.py @@ -38,8 +38,10 @@ DEBUG = False # ######### MANAGER CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#admins ADMINS = ( - (get_env_variable('GVA_ADMIN_NAME', default='Admin'), - get_env_variable('GVA_ADMIN_EMAIL', default='admin@example.org')), + ( + get_env_variable("GVA_ADMIN_NAME", default="Admin"), + get_env_variable("GVA_ADMIN_EMAIL", default="admin@example.org"), + ), ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#managers @@ -50,13 +52,13 @@ MANAGERS = ADMINS # ######### DATABASE CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#databases DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql', - 'NAME': get_env_variable('GVA_PGSQL_DATABASE', default='gnuviechadmin'), - 'USER': get_env_variable('GVA_PGSQL_USER', default='gnuviechadmin'), - 'PASSWORD': get_env_variable('GVA_PGSQL_PASSWORD'), - 'HOST': get_env_variable('GVA_PGSQL_HOSTNAME', default='db'), - 'PORT': get_env_variable('GVA_PGSQL_PORT', int, default=5432), + "default": { + "ENGINE": "django.db.backends.postgresql", + "NAME": get_env_variable("GVA_PGSQL_DATABASE", default="gnuviechadmin"), + "USER": get_env_variable("GVA_PGSQL_USER", default="gnuviechadmin"), + "PASSWORD": get_env_variable("GVA_PGSQL_PASSWORD"), + "HOST": get_env_variable("GVA_PGSQL_HOSTNAME", default="db"), + "PORT": get_env_variable("GVA_PGSQL_PORT", int, default=5432), } } # ######### END DATABASE CONFIGURATION @@ -64,15 +66,15 @@ DATABASES = { # ######### GENERAL CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#time-zone -TIME_ZONE = 'Europe/Berlin' +TIME_ZONE = "Europe/Berlin" # See: https://docs.djangoproject.com/en/dev/ref/settings/#language-code -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = "en-us" # See: https://docs.djangoproject.com/en/dev/ref/settings/#site-id SITE_ID = 1 -SITES_DOMAIN_NAME = get_env_variable('GVA_DOMAIN_NAME') -SITES_SITE_NAME = get_env_variable('GVA_SITE_NAME') +SITES_DOMAIN_NAME = get_env_variable("GVA_DOMAIN_NAME") +SITES_SITE_NAME = get_env_variable("GVA_SITE_NAME") # See: https://docs.djangoproject.com/en/dev/ref/settings/#use-i18n USE_I18N = True @@ -85,33 +87,28 @@ USE_TZ = True # ######### END GENERAL CONFIGURATION -LOCALE_PATHS = ( - normpath(join(SITE_ROOT, 'gnuviechadmin', 'locale')), -) +LOCALE_PATHS = (normpath(join(SITE_ROOT, "gnuviechadmin", "locale")),) # ######### MEDIA CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root -MEDIA_ROOT = normpath(join(SITE_ROOT, 'media')) +MEDIA_ROOT = normpath(join(SITE_ROOT, "media")) # See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url -MEDIA_URL = '/media/' +MEDIA_URL = "/media/" # ######### END MEDIA CONFIGURATION - # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url -STATIC_URL = '/static/' +STATIC_URL = "/static/" # See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS # noqa -STATICFILES_DIRS = ( - normpath(join(SITE_ROOT, 'gnuviechadmin', 'assets')), -) +STATICFILES_DIRS = (normpath(join(SITE_ROOT, "gnuviechadmin", "assets")),) # See: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-finders # noqa STATICFILES_FINDERS = ( - 'django.contrib.staticfiles.finders.FileSystemFinder', - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', + "django.contrib.staticfiles.finders.FileSystemFinder", + "django.contrib.staticfiles.finders.AppDirectoriesFinder", ) # ######### END STATIC FILE CONFIGURATION @@ -119,7 +116,7 @@ STATICFILES_FINDERS = ( # ######### SECRET CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#secret-key # Note: This key should only be used for development and testing. -SECRET_KEY = get_env_variable('GVA_SITE_SECRET') +SECRET_KEY = get_env_variable("GVA_SITE_SECRET") # ######### END SECRET CONFIGURATION @@ -132,9 +129,7 @@ ALLOWED_HOSTS = [] # ######### FIXTURE CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-FIXTURE_DIRS # noqa -FIXTURE_DIRS = ( - normpath(join(SITE_ROOT, 'fixtures')), -) +FIXTURE_DIRS = (normpath(join(SITE_ROOT, "fixtures")),) # ######### END FIXTURE CONFIGURATION @@ -142,27 +137,25 @@ FIXTURE_DIRS = ( # See: https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-TEMPLATES # noqa TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - normpath(join(DJANGO_ROOT, 'templates')), - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.contrib.auth.context_processors.auth', - 'django.template.context_processors.debug', - 'django.template.context_processors.i18n', - 'django.template.context_processors.media', - 'django.template.context_processors.static', - 'django.template.context_processors.tz', - 'django.contrib.messages.context_processors.messages', - 'django.template.context_processors.request', + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [normpath(join(DJANGO_ROOT, "templates"))], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.contrib.auth.context_processors.auth", + "django.template.context_processors.debug", + "django.template.context_processors.i18n", + "django.template.context_processors.media", + "django.template.context_processors.static", + "django.template.context_processors.tz", + "django.contrib.messages.context_processors.messages", + "django.template.context_processors.request", # custom context processors - 'gnuviechadmin.context_processors.navigation', - 'gnuviechadmin.context_processors.version_info', - ], + "gnuviechadmin.context_processors.navigation", + "gnuviechadmin.context_processors.version_info", + ] }, - }, + } ] # ######### END TEMPLATE CONFIGURATION @@ -171,14 +164,14 @@ TEMPLATES = [ # See: https://docs.djangoproject.com/en/dev/ref/settings/#middleware-classes MIDDLEWARE = [ # Default Django middleware. - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.middleware.locale.LocaleMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', + "django.middleware.common.CommonMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.middleware.locale.LocaleMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", # uncomment next line to enable translation to browser locale - 'django.middleware.clickjacking.XFrameOptionsMiddleware', + "django.middleware.clickjacking.XFrameOptionsMiddleware", ] # ######### END MIDDLEWARE CONFIGURATION @@ -186,7 +179,6 @@ MIDDLEWARE = [ AUTHENTICATION_BACKENDS = ( # Needed to login by username in Django admin, regardless of `allauth` "django.contrib.auth.backends.ModelBackend", - # `allauth` specific authentication methods, such as login by e-mail "allauth.account.auth_backends.AuthenticationBackend", ) @@ -194,87 +186,83 @@ AUTHENTICATION_BACKENDS = ( # ######### URL CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#root-urlconf -ROOT_URLCONF = '%s.urls' % SITE_NAME +ROOT_URLCONF = "%s.urls" % SITE_NAME # ######### END URL CONFIGURATION # ######### TEST RUNNER CONFIGURATION -TEST_RUNNER = 'django.test.runner.DiscoverRunner' +TEST_RUNNER = "django.test.runner.DiscoverRunner" # ######### END TEST RUNNER CONFIGURATION # ######### APP CONFIGURATION DJANGO_APPS = ( # Default Django apps: - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.messages', - 'django.contrib.staticfiles', - + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.sites", + "django.contrib.messages", + "django.contrib.staticfiles", # Useful template tags: - 'django.contrib.humanize', - + "django.contrib.humanize", # Admin panel and documentation: - 'django.contrib.admin', - + "django.contrib.admin", # Flatpages for about page - 'django.contrib.flatpages', - - 'crispy_forms', + "django.contrib.flatpages", + "crispy_forms", ) ALLAUTH_APPS = ( - 'allauth', - 'allauth.account', - 'allauth.socialaccount', - 'allauth.socialaccount.providers.google', - 'allauth.socialaccount.providers.linkedin_oauth2', - 'allauth.socialaccount.providers.twitter', + "allauth", + "allauth.account", + "allauth.socialaccount", + "allauth.socialaccount.providers.google", + "allauth.socialaccount.providers.linkedin_oauth2", + "allauth.socialaccount.providers.twitter", ) # Apps specific for this project go here. LOCAL_APPS = ( - 'dashboard', - 'taskresults', - 'ldaptasks', - 'mysqltasks', - 'pgsqltasks', - 'fileservertasks', - 'webtasks', - 'domains', - 'osusers', - 'managemails', - 'userdbs', - 'hostingpackages', - 'websites', - 'contact_form', + "dashboard", + "taskresults", + "ldaptasks", + "mysqltasks", + "pgsqltasks", + "fileservertasks", + "webtasks", + "domains", + "osusers", + "managemails", + "userdbs", + "hostingpackages", + "websites", + "contact_form", ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps INSTALLED_APPS = DJANGO_APPS + ALLAUTH_APPS + LOCAL_APPS MESSAGE_TAGS = { - messages.DEBUG: '', - messages.ERROR: 'alert-danger', - messages.INFO: 'alert-info', - messages.SUCCESS: 'alert-success', - messages.WARNING: 'alert-warning', + messages.DEBUG: "", + messages.ERROR: "alert-danger", + messages.INFO: "alert-info", + messages.SUCCESS: "alert-success", + messages.WARNING: "alert-warning", } # ######### END APP CONFIGURATION # ######### ALLAUTH CONFIGURATION ACCOUNT_EMAIL_REQUIRED = True -ACCOUNT_EMAIL_VERIFICATION = 'mandatory' -LOGIN_REDIRECT_URL = '/' +ACCOUNT_EMAIL_VERIFICATION = "mandatory" +LOGIN_REDIRECT_URL = "/" SOCIALACCOUNT_QUERY_EMAIL = True # ######### END ALLAUTH CONFIGURATION # ######### CRISPY FORMS CONFIGURATION -CRISPY_TEMPLATE_PACK = 'bootstrap3' +CRISPY_TEMPLATE_PACK = "bootstrap3" # ######### END CRISPY_FORMS CONFIGURATION @@ -286,170 +274,197 @@ CRISPY_TEMPLATE_PACK = 'bootstrap3' # See http://docs.djangoproject.com/en/dev/topics/logging for # more details on how to customize your logging configuration. LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'verbose': { - 'format': '%(levelname)s %(asctime)s %(name)s ' - '%(module)s:%(lineno)d %(process)d %(thread)d %(message)s', - }, - 'simple': { - 'format': '%(levelname)s %(name)s:%(lineno)d %(message)s', + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "verbose": { + "format": "%(levelname)s %(asctime)s %(name)s " + "%(module)s:%(lineno)d %(process)d %(thread)d %(message)s" }, + "simple": {"format": "%(levelname)s %(name)s:%(lineno)d %(message)s"}, }, - 'filters': { - 'require_debug_false': { - '()': 'django.utils.log.RequireDebugFalse' + "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, + "handlers": { + "mail_admins": { + "level": "ERROR", + "filters": ["require_debug_false"], + "class": "django.utils.log.AdminEmailHandler", } }, - 'handlers': { - 'mail_admins': { - 'level': 'ERROR', - 'filters': ['require_debug_false'], - 'class': 'django.utils.log.AdminEmailHandler' + "loggers": { + "django.request": { + "handlers": ["mail_admins"], + "level": "ERROR", + "propagate": True, } }, - 'loggers': { - 'django.request': { - 'handlers': ['mail_admins'], - 'level': 'ERROR', - 'propagate': True, - }, - } } # ######### END LOGGING CONFIGURATION # ######### WSGI CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#wsgi-application -WSGI_APPLICATION = '%s.wsgi.application' % SITE_NAME +WSGI_APPLICATION = "%s.wsgi.application" % SITE_NAME # ######### END WSGI CONFIGURATION # ######### CELERY CONFIGURATION BROKER_URL = get_env_variable( - 'GVA_BROKER_URL', - default='amqp://gnuviechadmin:gnuviechadmin@mq/gnuviechadmin') -CELERY_RESULT_BACKEND = get_env_variable( - 'GVA_RESULTS_REDIS_URL', - default='redis://:gnuviechadmin@redis:6379/0') -CELERY_TASK_RESULT_EXPIRES = None -CELERY_ROUTES = ( - 'gvacommon.celeryrouters.GvaRouter', + "GVA_BROKER_URL", default="amqp://gnuviechadmin:gnuviechadmin@mq/gnuviechadmin" ) -CELERY_TIMEZONE = 'Europe/Berlin' +BROKER_TRANSPORT_OPTIONS = { + "max_retries": 3, + "interval_start": 0, + "interval_step": 0.2, + "interval_max": 0.2, +} +CELERY_RESULT_BACKEND = get_env_variable( + "GVA_RESULTS_REDIS_URL", default="redis://:gnuviechadmin@redis:6379/0" +) +CELERY_TASK_RESULT_EXPIRES = None +CELERY_ROUTES = ("gvacommon.celeryrouters.GvaRouter",) +CELERY_TIMEZONE = "Europe/Berlin" CELERY_ENABLE_UTC = True -CELERY_ACCEPT_CONTENT = ['json'] -CELERY_TASK_SERIALIZER = 'json' -CELERY_RESULT_SERIALIZER = 'json' +CELERY_ACCEPT_CONTENT = ["json"] +CELERY_TASK_SERIALIZER = "json" +CELERY_RESULT_SERIALIZER = "json" # ######### END CELERY CONFIGURATION # ######### CUSTOM APP CONFIGURATION -OSUSER_MINUID = get_env_variable('GVA_MIN_OS_UID', int, default=10000) -OSUSER_MINGID = get_env_variable('GVA_MIN_OS_GID', int, default=10000) -OSUSER_USERNAME_PREFIX = get_env_variable('GVA_OSUSER_PREFIX', default='usr') -OSUSER_HOME_BASEPATH = get_env_variable( - 'GVA_OSUSER_HOME_BASEPATH', default='/home') +OSUSER_MINUID = get_env_variable("GVA_MIN_OS_UID", int, default=10000) +OSUSER_MINGID = get_env_variable("GVA_MIN_OS_GID", int, default=10000) +OSUSER_USERNAME_PREFIX = get_env_variable("GVA_OSUSER_PREFIX", default="usr") +OSUSER_HOME_BASEPATH = get_env_variable("GVA_OSUSER_HOME_BASEPATH", default="/home") OSUSER_DEFAULT_SHELL = get_env_variable( - 'GVA_OSUSER_DEFAULT_SHELL', default='/usr/bin/rssh') -OSUSER_SFTP_GROUP = 'sftponly' -OSUSER_SSH_GROUP = 'sshusers' + "GVA_OSUSER_DEFAULT_SHELL", default="/usr/bin/rssh" +) +OSUSER_SFTP_GROUP = "sftponly" +OSUSER_SSH_GROUP = "sshusers" OSUSER_DEFAULT_GROUPS = [OSUSER_SFTP_GROUP] -OSUSER_UPLOAD_SERVER = get_env_variable( - 'GVA_OSUSER_UPLOADSERVER', default='file') +OSUSER_UPLOAD_SERVER = get_env_variable("GVA_OSUSER_UPLOADSERVER", default="file") GVA_LINK_WEBMAIL = get_env_variable( - 'GVA_WEBMAIL_URL', default='https://webmail.example.org/') + "GVA_WEBMAIL_URL", default="https://webmail.example.org/" +) GVA_LINK_PHPMYADMIN = get_env_variable( - 'GVA_PHPMYADMIN_URL', default='https://phpmyadmin.example.org/') + "GVA_PHPMYADMIN_URL", default="https://phpmyadmin.example.org/" +) GVA_LINK_PHPPGADMIN = get_env_variable( - 'GVA_PHPPGADMIN_URL', default='https://phppgadmin.example.org/') + "GVA_PHPPGADMIN_URL", default="https://phppgadmin.example.org/" +) # ######### END CUSTOM APP CONFIGURATION -GVA_ENVIRONMENT = get_env_variable('GVA_ENVIRONMENT', default='prod') +GVA_ENVIRONMENT = get_env_variable("GVA_ENVIRONMENT", default="prod") # ######### STATIC FILE CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#static-root -STATIC_ROOT = '/srv/gnuviechadmin/static/' +STATIC_ROOT = "/srv/gnuviechadmin/static/" + def show_debug_toolbar(request): - return DEBUG == True and GVA_ENVIRONMENT == 'local' + return DEBUG == True and GVA_ENVIRONMENT == "local" -if GVA_ENVIRONMENT == 'local': +if GVA_ENVIRONMENT == "local": # ######### DEBUG CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#debug DEBUG = True - + # See: https://docs.djangoproject.com/en/dev/ref/settings/#template-debug - TEMPLATES[0]['OPTIONS']['debug'] = DEBUG + TEMPLATES[0]["OPTIONS"]["debug"] = DEBUG # ######### END DEBUG CONFIGURATION - + # ######### EMAIL CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend - EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" # ######### END EMAIL CONFIGURATION - + # ######### CACHE CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#caches - CACHES = { - 'default': { - 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', - } - } + CACHES = {"default": {"BACKEND": "django.core.cache.backends.locmem.LocMemCache"}} # ######### END CACHE CONFIGURATION - + # ######### TOOLBAR CONFIGURATION # See: http://django-debug-toolbar.readthedocs.org/en/latest/installation.html#explicit-setup # noqa - INSTALLED_APPS += ( - 'debug_toolbar', - ) - - MIDDLEWARE += [ - 'debug_toolbar.middleware.DebugToolbarMiddleware', - ] - - LOGGING['handlers'].update({ - 'console': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'simple', + INSTALLED_APPS += ("debug_toolbar",) + + MIDDLEWARE += ["debug_toolbar.middleware.DebugToolbarMiddleware"] + + LOGGING["handlers"].update( + { + "console": { + "level": "DEBUG", + "class": "logging.StreamHandler", + "formatter": "simple", + } } - }) - LOGGING['loggers'].update(dict( - [(key, {'handlers': ['console'], 'level': 'DEBUG', 'propagate': True, }) - for key in [ - 'dashboard', 'domains', 'fileservertasks', 'gvacommon', - 'gvawebcore', 'hostingpackages', 'ldaptasks', 'managemails', - 'mysqltasks', 'osusers', 'pgsqltasks', 'taskresults', - 'userdbs', 'websites']])) - + ) + LOGGING["loggers"].update( + dict( + [ + (key, {"handlers": ["console"], "level": "DEBUG", "propagate": True}) + for key in [ + "dashboard", + "domains", + "fileservertasks", + "gvacommon", + "gvawebcore", + "hostingpackages", + "ldaptasks", + "managemails", + "mysqltasks", + "osusers", + "pgsqltasks", + "taskresults", + "userdbs", + "websites", + ] + ] + ) + ) + DEBUG_TOOLBAR_PATCH_SETTINGS = False DEBUG_TOOLBAR_CONFIG = { - 'SHOW_TOOLBAR_CALLBACK': 'gnuviechadmin.settings.show_debug_toolbar', + "SHOW_TOOLBAR_CALLBACK": "gnuviechadmin.settings.show_debug_toolbar" } - + # ######### END TOOLBAR CONFIGURATION -elif GVA_ENVIRONMENT == 'test': - PASSWORD_HASHERS = ( - 'django.contrib.auth.hashers.MD5PasswordHasher', - ) - LOGGING['handlers'].update({ - 'console': { - 'level': 'ERROR', - 'class': 'logging.StreamHandler', - 'formatter': 'simple', +elif GVA_ENVIRONMENT == "test": + PASSWORD_HASHERS = ("django.contrib.auth.hashers.MD5PasswordHasher",) + LOGGING["handlers"].update( + { + "console": { + "level": "ERROR", + "class": "logging.StreamHandler", + "formatter": "simple", + } } - }) - LOGGING['loggers'].update(dict( - [(key, {'handlers': ['console'], 'level': 'ERROR', 'propagate': True, }) - for key in [ - 'dashboard', 'domains', 'fileservertasks', 'gvacommon', - 'gvawebcore', 'hostingpackages', 'ldaptasks', 'managemails', - 'mysqltasks', 'osusers', 'pgsqltasks', 'taskresults', - 'userdbs', 'websites']])) - BROKER_URL = BROKER_URL + '_test' + ) + LOGGING["loggers"].update( + dict( + [ + (key, {"handlers": ["console"], "level": "ERROR", "propagate": True}) + for key in [ + "dashboard", + "domains", + "fileservertasks", + "gvacommon", + "gvawebcore", + "hostingpackages", + "ldaptasks", + "managemails", + "mysqltasks", + "osusers", + "pgsqltasks", + "taskresults", + "userdbs", + "websites", + ] + ] + ) + ) + BROKER_URL = BROKER_URL + "_test" CELERY_RESULT_PERSISTENT = False else: # ######### HOST CONFIGURATION @@ -459,18 +474,18 @@ else: # ######### EMAIL CONFIGURATION # See: https://docs.djangoproject.com/en/dev/ref/settings/#email-backend - EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' + EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" # See: https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix - EMAIL_SUBJECT_PREFIX = '[%s] ' % SITE_NAME + EMAIL_SUBJECT_PREFIX = "[%s] " % SITE_NAME # See: https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email DEFAULT_FROM_EMAIL = get_env_variable( - 'GVA_SITE_ADMINMAIL', default='admin@example.org') + "GVA_SITE_ADMINMAIL", default="admin@example.org" + ) # See: https://docs.djangoproject.com/en/dev/ref/settings/#server-email - SERVER_EMAIL = get_env_variable( - 'GVA_SITE_ADMINMAIL', default='admin@example.org') + SERVER_EMAIL = get_env_variable("GVA_SITE_ADMINMAIL", default="admin@example.org") # ######### END EMAIL CONFIGURATION # ######### CACHE CONFIGURATION @@ -479,6 +494,6 @@ else: # ######### END CACHE CONFIGURATION # ######### ALLAUTH PRODUCTION CONFIGURATION - ACCOUNT_EMAIL_SUBJECT_PREFIX = '[Jan Dittberner IT-Consulting & -Solutions] ' - ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https' + ACCOUNT_EMAIL_SUBJECT_PREFIX = "[Jan Dittberner IT-Consulting & -Solutions] " + ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https" # ######### END ALLAUTH PRODUCTION CONFIGURATION diff --git a/gnuviechadmin/gnuviechadmin/tests/test_contextprocessors.py b/gnuviechadmin/gnuviechadmin/tests/test_contextprocessors.py index 9379ad3..664e8d2 100644 --- a/gnuviechadmin/gnuviechadmin/tests/test_contextprocessors.py +++ b/gnuviechadmin/gnuviechadmin/tests/test_contextprocessors.py @@ -5,14 +5,13 @@ This module contains tests for :py:mod:`gnuviechadmin.context_processors`. """ -from mock import MagicMock +from unittest.mock import MagicMock from django.conf import settings -from django.core.urlresolvers import reverse +from django.contrib.auth import get_user_model from django.http import HttpRequest from django.test import TestCase - -from django.contrib.auth import get_user_model +from django.urls import reverse from gnuviechadmin import __version__ as gvaversion from gnuviechadmin.context_processors import navigation @@ -22,48 +21,40 @@ User = get_user_model() class NavigationContextProcessorTest(TestCase): - EXPECTED_ITEMS = ( - 'webmail_url', 'phpmyadmin_url', 'phppgadmin_url', - 'active_item' - ) + EXPECTED_ITEMS = ("webmail_url", "phpmyadmin_url", "phppgadmin_url", "active_item") def test_ajax_request(self): - response = self.client.get( - '/', HTTP_X_REQUESTED_WITH='XMLHttpRequest') + response = self.client.get("/", HTTP_X_REQUESTED_WITH="XMLHttpRequest") for item in self.EXPECTED_ITEMS: self.assertNotIn(item, response.context) def _check_static_urls(self, context): - self.assertEqual( - context['webmail_url'], settings.GVA_LINK_WEBMAIL) - self.assertEqual( - context['phpmyadmin_url'], settings.GVA_LINK_PHPMYADMIN) - self.assertEqual( - context['phppgadmin_url'], settings.GVA_LINK_PHPPGADMIN) + self.assertEqual(context["webmail_url"], settings.GVA_LINK_WEBMAIL) + self.assertEqual(context["phpmyadmin_url"], settings.GVA_LINK_PHPMYADMIN) + self.assertEqual(context["phppgadmin_url"], settings.GVA_LINK_PHPPGADMIN) def test_index_page_context(self): - response = self.client.get('/') + response = self.client.get("/") for item in self.EXPECTED_ITEMS: self.assertIn(item, response.context) self._check_static_urls(response.context) - self.assertEqual(response.context['active_item'], 'dashboard') + self.assertEqual(response.context["active_item"], "dashboard") def test_contact_page_context(self): - response = self.client.get(reverse('contact_form')) + response = self.client.get(reverse("contact_form")) for item in self.EXPECTED_ITEMS: self.assertIn(item, response.context) self._check_static_urls(response.context) - self.assertEqual(response.context['active_item'], 'contact') + self.assertEqual(response.context["active_item"], "contact") def test_hostingpackage_page_context(self): - User.objects.create_user('test', password='test') - self.client.login(username='test', password='test') - response = self.client.get( - reverse('hosting_packages', kwargs={'user': 'test'})) + User.objects.create_user("test", password="test") + self.client.login(username="test", password="test") + response = self.client.get(reverse("hosting_packages", kwargs={"user": "test"})) for item in self.EXPECTED_ITEMS: self.assertIn(item, response.context) self._check_static_urls(response.context) - self.assertEqual(response.context['active_item'], 'hostingpackage') + self.assertEqual(response.context["active_item"], "hostingpackage") def _test_page_context_by_viewmodule(self, viewmodule, expecteditem): request = HttpRequest() @@ -73,57 +64,48 @@ class NavigationContextProcessorTest(TestCase): for item in self.EXPECTED_ITEMS: self.assertIn(item, context) self._check_static_urls(context) - self.assertEqual(context['active_item'], expecteditem) + self.assertEqual(context["active_item"], expecteditem) def test_osusers_page_context(self): - self._test_page_context_by_viewmodule( - 'osusers.views', 'hostingpackage') + self._test_page_context_by_viewmodule("osusers.views", "hostingpackage") def test_userdbs_page_context(self): - self._test_page_context_by_viewmodule( - 'userdbs.views', 'hostingpackage') + self._test_page_context_by_viewmodule("userdbs.views", "hostingpackage") def test_managemails_page_context(self): - self._test_page_context_by_viewmodule( - 'managemails.views', 'hostingpackage') + self._test_page_context_by_viewmodule("managemails.views", "hostingpackage") def test_websites_page_context(self): - self._test_page_context_by_viewmodule( - 'websites.views', 'hostingpackage') + self._test_page_context_by_viewmodule("websites.views", "hostingpackage") def test_domains_page_context(self): - self._test_page_context_by_viewmodule( - 'domains.views', 'hostingpackage') + self._test_page_context_by_viewmodule("domains.views", "hostingpackage") def test_allauth_account_page_context(self): - self._test_page_context_by_viewmodule( - 'allauth.account.views', 'account') + self._test_page_context_by_viewmodule("allauth.account.views", "account") def test_allauth_socialaccount_page_context(self): - self._test_page_context_by_viewmodule( - 'allauth.socialaccount.views', 'account') + self._test_page_context_by_viewmodule("allauth.socialaccount.views", "account") def test_imprint_page_context(self): - response = self.client.get(reverse('imprint')) + response = self.client.get(reverse("imprint")) for item in self.EXPECTED_ITEMS: self.assertIn(item, response.context) self._check_static_urls(response.context) - self.assertEqual(response.context['active_item'], 'imprint') + self.assertEqual(response.context["active_item"], "imprint") def test_no_resolver_match(self): request = HttpRequest() context = navigation(request) self._check_static_urls(context) - self.assertEqual(context['active_item'], 'dashboard') + self.assertEqual(context["active_item"], "dashboard") def test_admin_module(self): - self._test_page_context_by_viewmodule( - 'django.contrib.admin.foo', 'dashboard') + self._test_page_context_by_viewmodule("django.contrib.admin.foo", "dashboard") class VersionInfoContextProcessorTest(TestCase): - def test_version_info_in_context(self): - response = self.client.get('/') - self.assertIn('gnuviechadmin_version', response.context) - self.assertEqual(response.context['gnuviechadmin_version'], gvaversion) + response = self.client.get("/") + self.assertIn("gnuviechadmin_version", response.context) + self.assertEqual(response.context["gnuviechadmin_version"], gvaversion) diff --git a/gnuviechadmin/gvawebcore/tests/test_forms.py b/gnuviechadmin/gvawebcore/tests/test_forms.py index e657829..b4bb213 100644 --- a/gnuviechadmin/gvawebcore/tests/test_forms.py +++ b/gnuviechadmin/gvawebcore/tests/test_forms.py @@ -5,25 +5,26 @@ This module contains tests for :py:mod:`gvawebcore.forms`. from unittest import TestCase -from gvawebcore.forms import PasswordModelFormMixin, PASSWORD_MISMATCH_ERROR +from gvawebcore.forms import PASSWORD_MISMATCH_ERROR, PasswordModelFormMixin class PasswordModelFormMixinTest(TestCase): - def test_form_properties(self): form = PasswordModelFormMixin() - self.assertIn('password1', form.fields) - self.assertIn('password2', form.fields) + self.assertIn("password1", form.fields) + self.assertIn("password2", form.fields) def test_clean_password_same(self): - form = PasswordModelFormMixin(data={ - 'password1': 'secret', 'password2': 'secret'}) + form = PasswordModelFormMixin( + data={"password1": "secret", "password2": "secret"} + ) self.assertTrue(form.is_valid()) - self.assertEqual('secret', form.clean_password2()) + self.assertEqual("secret", form.clean_password2()) def test_clean_password_different(self): - form = PasswordModelFormMixin(data={ - 'password1': 'onesecret', 'password2': 'other'}) + form = PasswordModelFormMixin( + data={"password1": "onesecret", "password2": "other"} + ) self.assertFalse(form.is_valid()) - self.assertIn('password2', form.errors) - self.assertIn(PASSWORD_MISMATCH_ERROR, form.errors['password2']) + self.assertIn("password2", form.errors) + self.assertIn(PASSWORD_MISMATCH_ERROR, form.errors["password2"]) diff --git a/gnuviechadmin/gvawebcore/tests/test_views.py b/gnuviechadmin/gvawebcore/tests/test_views.py index 6c4ca4b..30cd39c 100644 --- a/gnuviechadmin/gvawebcore/tests/test_views.py +++ b/gnuviechadmin/gvawebcore/tests/test_views.py @@ -4,31 +4,29 @@ This model contains tests for :py:mod:`gvawebcore.views`. """ from unittest import TestCase - -from mock import patch, Mock +from unittest.mock import Mock, patch from gvawebcore.views import HostingPackageAndCustomerMixin class HostingPackageAndCustomerMixinTest(TestCase): - class TestView(HostingPackageAndCustomerMixin): - kwargs = {'package': '1'} + kwargs = {"package": "1"} - @patch('gvawebcore.views.get_object_or_404') + @patch("gvawebcore.views.get_object_or_404") def test_get_hosting_package(self, get_object_or_404): - get_object_or_404.return_value = 'A package' + get_object_or_404.return_value = "A package" view = self.TestView() - self.assertEqual('A package', view.get_hosting_package()) + self.assertEqual("A package", view.get_hosting_package()) def test_get_hosting_package_cached(self): view = self.TestView() - view.hostingpackage = 'Cached package' - self.assertEqual('Cached package', view.get_hosting_package()) + view.hostingpackage = "Cached package" + self.assertEqual("Cached package", view.get_hosting_package()) - @patch('gvawebcore.views.get_object_or_404') + @patch("gvawebcore.views.get_object_or_404") def test_get_customer_object(self, get_object_or_404): - get_object_or_404.return_value = Mock(customer='A customer') + get_object_or_404.return_value = Mock(customer="A customer") view = self.TestView() - self.assertEqual('A customer', view.get_customer_object()) + self.assertEqual("A customer", view.get_customer_object()) diff --git a/gnuviechadmin/hostingpackages/models.py b/gnuviechadmin/hostingpackages/models.py index 71c648f..c1a5267 100644 --- a/gnuviechadmin/hostingpackages/models.py +++ b/gnuviechadmin/hostingpackages/models.py @@ -16,37 +16,24 @@ from model_utils.models import TimeStampedModel from domains.models import HostingDomain from managemails.models import Mailbox -from osusers.models import ( - AdditionalGroup, - Group, - User as OsUser, -) -from userdbs.models import ( - DB_TYPES, - UserDatabase, -) +from osusers.models import AdditionalGroup, Group, User as OsUser +from userdbs.models import DB_TYPES, UserDatabase -DISK_SPACE_UNITS = Choices( - (0, 'M', _('MiB')), - (1, 'G', _('GiB')), - (2, 'T', _('TiB')), -) +DISK_SPACE_UNITS = Choices((0, "M", _("MiB")), (1, "G", _("GiB")), (2, "T", _("TiB"))) -DISK_SPACE_FACTORS = ( - (1, None, None), - (1024, 1, None), - (1024 * 1024, 1024, 1), -) +DISK_SPACE_FACTORS = ((1, None, None), (1024, 1, None), (1024 * 1024, 1024, 1)) @python_2_unicode_compatible class HostingPackageBase(TimeStampedModel): - description = models.TextField(_('description'), blank=True) - mailboxcount = models.PositiveIntegerField(_('mailbox count')) + description = models.TextField(_("description"), blank=True) + mailboxcount = models.PositiveIntegerField(_("mailbox count")) diskspace = models.PositiveIntegerField( - _('disk space'), help_text=_('disk space for the hosting package')) + _("disk space"), help_text=_("disk space for the hosting package") + ) diskspace_unit = models.PositiveSmallIntegerField( - _('unit of disk space'), choices=DISK_SPACE_UNITS) + _("unit of disk space"), choices=DISK_SPACE_UNITS + ) class Meta: abstract = True @@ -56,11 +43,11 @@ class HostingPackageBase(TimeStampedModel): class HostingPackageTemplate(HostingPackageBase): - name = models.CharField(_('name'), max_length=128, unique=True) + name = models.CharField(_("name"), max_length=128, unique=True) class Meta: - verbose_name = _('Hosting package') - verbose_name_plural = _('Hosting packages') + verbose_name = _("Hosting package") + verbose_name_plural = _("Hosting packages") class HostingOption(TimeStampedModel): @@ -72,19 +59,21 @@ class HostingOption(TimeStampedModel): @python_2_unicode_compatible class DiskSpaceOptionBase(models.Model): - diskspace = models.PositiveIntegerField(_('disk space')) + diskspace = models.PositiveIntegerField(_("disk space")) diskspace_unit = models.PositiveSmallIntegerField( - _('unit of disk space'), choices=DISK_SPACE_UNITS) + _("unit of disk space"), choices=DISK_SPACE_UNITS + ) class Meta: abstract = True - ordering = ['diskspace_unit', 'diskspace'] - verbose_name = _('Disk space option') - verbose_name_plural = _('Disk space options') + ordering = ["diskspace_unit", "diskspace"] + verbose_name = _("Disk space option") + verbose_name_plural = _("Disk space options") def __str__(self): return _("Additional disk space {space} {unit}").format( - space=self.diskspace, unit=self.get_diskspace_unit_display()) + space=self.diskspace, unit=self.get_diskspace_unit_display() + ) class DiskSpaceOption(DiskSpaceOptionBase, HostingOption): @@ -95,30 +84,24 @@ class DiskSpaceOption(DiskSpaceOptionBase, HostingOption): """ class Meta: - unique_together = ['diskspace', 'diskspace_unit'] + unique_together = ["diskspace", "diskspace_unit"] @python_2_unicode_compatible class UserDatabaseOptionBase(models.Model): - number = models.PositiveIntegerField( - _('number of databases'), default=1) - db_type = models.PositiveSmallIntegerField( - _('database type'), choices=DB_TYPES) + number = models.PositiveIntegerField(_("number of databases"), default=1) + db_type = models.PositiveSmallIntegerField(_("database type"), choices=DB_TYPES) class Meta: abstract = True - ordering = ['db_type', 'number'] - verbose_name = _('Database option') - verbose_name_plural = _('Database options') + ordering = ["db_type", "number"] + verbose_name = _("Database option") + verbose_name_plural = _("Database options") def __str__(self): return ungettext( - '{type} database', - '{count} {type} databases', - self.number - ).format( - type=self.get_db_type_display(), count=self.number - ) + "{type} database", "{count} {type} databases", self.number + ).format(type=self.get_db_type_display(), count=self.number) class UserDatabaseOption(UserDatabaseOptionBase, HostingOption): @@ -129,7 +112,7 @@ class UserDatabaseOption(UserDatabaseOptionBase, HostingOption): """ class Meta: - unique_together = ['number', 'db_type'] + unique_together = ["number", "db_type"] @python_2_unicode_compatible @@ -138,23 +121,19 @@ class MailboxOptionBase(models.Model): Base class for mailbox options. """ - number = models.PositiveIntegerField( - _('number of mailboxes'), unique=True) + + number = models.PositiveIntegerField(_("number of mailboxes"), unique=True) class Meta: abstract = True - ordering = ['number'] - verbose_name = _('Mailbox option') - verbose_name_plural = _('Mailbox options') + ordering = ["number"] + verbose_name = _("Mailbox option") + verbose_name_plural = _("Mailbox options") def __str__(self): return ungettext( - '{count} additional mailbox', - '{count} additional mailboxes', - self.number - ).format( - count=self.number - ) + "{count} additional mailbox", "{count} additional mailboxes", self.number + ).format(count=self.number) class MailboxOption(MailboxOptionBase, HostingOption): @@ -189,10 +168,11 @@ class CustomerHostingPackageManager(models.Manager): """ package = CustomerHostingPackage( - customer=customer, template=template, name=name) + customer=customer, template=template, name=name + ) package.description = template.description package.copy_template_attributes() - if 'commit' in kwargs and kwargs['commit'] is True: + if "commit" in kwargs and kwargs["commit"] is True: package.save(**kwargs) return package @@ -203,45 +183,49 @@ class CustomerHostingPackage(HostingPackageBase): This class defines customer specific hosting packages. """ + customer = models.ForeignKey( - settings.AUTH_USER_MODEL, verbose_name=_('customer'), - on_delete=models.CASCADE) + settings.AUTH_USER_MODEL, verbose_name=_("customer"), on_delete=models.CASCADE + ) template = models.ForeignKey( - HostingPackageTemplate, verbose_name=_('hosting package template'), + HostingPackageTemplate, + verbose_name=_("hosting package template"), help_text=_( - 'The hosting package template that this hosting package is based' - ' on' + "The hosting package template that this hosting package is based" " on" ), - on_delete=models.CASCADE) - name = models.CharField(_('name'), max_length=128) + on_delete=models.CASCADE, + ) + name = models.CharField(_("name"), max_length=128) osuser = models.OneToOneField( - OsUser, verbose_name=_('Operating system user'), - blank=True, null=True, on_delete=models.CASCADE) + OsUser, + verbose_name=_("Operating system user"), + blank=True, + null=True, + on_delete=models.CASCADE, + ) objects = CustomerHostingPackageManager() class Meta: - unique_together = ['customer', 'name'] - verbose_name = _('customer hosting package') - verbose_name_plural = _('customer hosting packages') + unique_together = ["customer", "name"] + verbose_name = _("customer hosting package") + verbose_name_plural = _("customer hosting packages") def __str__(self): - return _("{name} for {customer}").format( - name=self.name, customer=self.customer - ) + return _("{name} for {customer}").format(name=self.name, customer=self.customer) def get_absolute_url(self): - return reverse('hosting_package_details', kwargs={ - 'user': self.customer.username, - 'pk': self.id, - }) + return reverse( + "hosting_package_details", + kwargs={"user": self.customer.username, "pk": self.id}, + ) def copy_template_attributes(self): """ Copy the attributes of the hosting package's template to the package. """ - for attrname in ('diskspace', 'diskspace_unit', 'mailboxcount'): + for attrname in ("diskspace", "diskspace_unit", "mailboxcount"): setattr(self, attrname, getattr(self.template, attrname)) def get_hostingoptions(self): @@ -249,7 +233,7 @@ class CustomerHostingPackage(HostingPackageBase): for opt_type in [ CustomerDiskSpaceOption, CustomerMailboxOption, - CustomerUserDatabaseOption + CustomerUserDatabaseOption, ]: opts.extend(opt_type.objects.filter(hosting_package=self)) return opts @@ -276,13 +260,13 @@ class CustomerHostingPackage(HostingPackageBase): diskspace += option.diskspace elif option.diskspace_unit > min_unit: diskspace += ( - DISK_SPACE_FACTORS[option.diskspace_unit][min_unit] * - option.diskspace) + DISK_SPACE_FACTORS[option.diskspace_unit][min_unit] + * option.diskspace + ) else: diskspace = ( - DISK_SPACE_FACTORS[min_unit][ - option.diskspace_unit] * - diskspace) + option.diskspace + DISK_SPACE_FACTORS[min_unit][option.diskspace_unit] * diskspace + ) + option.diskspace min_unit = option.diskspace_unit if unit is None: return DISK_SPACE_FACTORS[min_unit][0] * diskspace * 1024 ** 2 @@ -302,16 +286,16 @@ class CustomerHostingPackage(HostingPackageBase): """ if unit is None: - return (DISK_SPACE_FACTORS[self.diskspace_unit][0] * - self.diskspace * 1024 ** 2) + return ( + DISK_SPACE_FACTORS[self.diskspace_unit][0] * self.diskspace * 1024 ** 2 + ) if unit > self.diskspace_unit: - return (DISK_SPACE_FACTORS[unit][self.diskspace_unit] * - self.diskspace) + return DISK_SPACE_FACTORS[unit][self.diskspace_unit] * self.diskspace return DISK_SPACE_FACTORS[self.diskspace_unit][unit] * self.diskspace def get_quota(self): soft = 1024 * self.get_disk_space(DISK_SPACE_UNITS.M) - hard = soft * 105 / 100 + hard = soft * 105 // 100 return (soft, hard) def get_mailboxes(self): @@ -337,12 +321,10 @@ class CustomerHostingPackage(HostingPackageBase): of its mailbox options. """ - result = CustomerMailboxOption.objects.filter( - hosting_package=self - ).aggregate( - mailbox_sum=models.Sum('number') + result = CustomerMailboxOption.objects.filter(hosting_package=self).aggregate( + mailbox_sum=models.Sum("number") ) - return self.mailboxcount + (result['mailbox_sum'] or 0) + return self.mailboxcount + (result["mailbox_sum"] or 0) mailbox_count = property(get_mailbox_count) @@ -355,25 +337,23 @@ class CustomerHostingPackage(HostingPackageBase): options for this hosting package. """ - return CustomerUserDatabaseOption.objects.values( - 'db_type' - ).filter(hosting_package=self).annotate( - number=models.Sum('number') - ).all() + return ( + CustomerUserDatabaseOption.objects.values("db_type") + .filter(hosting_package=self) + .annotate(number=models.Sum("number")) + .all() + ) def get_databases_flat(self): if self.osuser: - return UserDatabase.objects.filter( - db_user__osuser=self.osuser).all() + return UserDatabase.objects.filter(db_user__osuser=self.osuser).all() databases = property(get_databases_flat) def may_add_database(self): return ( - CustomerUserDatabaseOption.objects.filter( - hosting_package=self).count() > - UserDatabase.objects.filter( - db_user__osuser=self.osuser).count() + CustomerUserDatabaseOption.objects.filter(hosting_package=self).count() + > UserDatabase.objects.filter(db_user__osuser=self.osuser).count() ) @transaction.atomic @@ -409,12 +389,16 @@ class CustomerHostingPackageDomain(TimeStampedModel): domain. """ + hosting_package = models.ForeignKey( - CustomerHostingPackage, verbose_name=_('hosting package'), - related_name='domains', on_delete=models.CASCADE) + CustomerHostingPackage, + verbose_name=_("hosting package"), + related_name="domains", + on_delete=models.CASCADE, + ) domain = models.OneToOneField( - HostingDomain, verbose_name=_('hosting domain'), - on_delete=models.CASCADE) + HostingDomain, verbose_name=_("hosting domain"), on_delete=models.CASCADE + ) def __str__(self): return self.domain.domain @@ -432,60 +416,62 @@ class CustomerHostingPackageOption(TimeStampedModel): This class defines options for customer hosting packages. """ + hosting_package = models.ForeignKey( - CustomerHostingPackage, verbose_name=_('hosting package'), - on_delete=models.CASCADE) + CustomerHostingPackage, + verbose_name=_("hosting package"), + on_delete=models.CASCADE, + ) class Meta: - verbose_name = _('customer hosting option') - verbose_name_plural = _('customer hosting options') + verbose_name = _("customer hosting option") + verbose_name_plural = _("customer hosting options") -class CustomerDiskSpaceOption(DiskSpaceOptionBase, - CustomerHostingPackageOption): +class CustomerDiskSpaceOption(DiskSpaceOptionBase, CustomerHostingPackageOption): """ This is a class for customer hosting package options adding additional disk space to existing customer hosting package. """ + template = models.ForeignKey( DiskSpaceOption, - verbose_name=_('disk space option template'), + verbose_name=_("disk space option template"), help_text=_( - 'The disk space option template that this disk space option is' - ' based on' + "The disk space option template that this disk space option is" " based on" ), - on_delete=models.CASCADE) + on_delete=models.CASCADE, + ) -class CustomerUserDatabaseOption(UserDatabaseOptionBase, - CustomerHostingPackageOption): +class CustomerUserDatabaseOption(UserDatabaseOptionBase, CustomerHostingPackageOption): """ This is a class for customer hosting package options adding user databases to existing customer hosting packages. """ + template = models.ForeignKey( UserDatabaseOption, - verbose_name=_('user database option template'), + verbose_name=_("user database option template"), help_text=_( - 'The user database option template that this database option is' - ' based on' + "The user database option template that this database option is" " based on" ), - on_delete=models.CASCADE) + on_delete=models.CASCADE, + ) -class CustomerMailboxOption(MailboxOptionBase, - CustomerHostingPackageOption): +class CustomerMailboxOption(MailboxOptionBase, CustomerHostingPackageOption): """ This is a class for customer hosting package options adding additional mailboxes to existing customer hosting packages. """ + template = models.ForeignKey( MailboxOption, - verbose_name=_('mailbox option template'), - help_text=_( - 'The mailbox option template that this mailbox option is based on' - ), - on_delete=models.CASCADE) + verbose_name=_("mailbox option template"), + help_text=_("The mailbox option template that this mailbox option is based on"), + on_delete=models.CASCADE, + ) diff --git a/gnuviechadmin/hostingpackages/tests/test_models.py b/gnuviechadmin/hostingpackages/tests/test_models.py index b762d05..66f579c 100644 --- a/gnuviechadmin/hostingpackages/tests/test_models.py +++ b/gnuviechadmin/hostingpackages/tests/test_models.py @@ -5,10 +5,7 @@ Test for models. from django.test import TestCase -from hostingpackages.models import ( - DISK_SPACE_UNITS, - CustomerHostingPackage, -) +from hostingpackages.models import DISK_SPACE_UNITS, CustomerHostingPackage class CustomerHostingPackageTest(TestCase): @@ -16,7 +13,7 @@ class CustomerHostingPackageTest(TestCase): package = CustomerHostingPackage( diskspace=10, diskspace_unit=DISK_SPACE_UNITS.G ) - self.assertEqual(package.get_disk_space(), 10 * 1024 * 1024**2) + self.assertEqual(package.get_disk_space(), 10 * 1024 ** 3) def test_get_disk_space_mib(self): package = CustomerHostingPackage( diff --git a/gnuviechadmin/managemails/tests/test_admin.py b/gnuviechadmin/managemails/tests/test_admin.py index 67496d6..ddacf4b 100644 --- a/gnuviechadmin/managemails/tests/test_admin.py +++ b/gnuviechadmin/managemails/tests/test_admin.py @@ -1,14 +1,14 @@ from django import forms -from django.core.urlresolvers import reverse from django.test import TestCase from django.test.utils import override_settings +from django.urls import reverse from django.utils.html import format_html from django.utils.translation import ugettext as _ from django.contrib.admin import AdminSite from django.contrib.auth import get_user_model -from mock import Mock +from unittest.mock import Mock from osusers.models import User @@ -21,9 +21,7 @@ from managemails.admin import ( ReadOnlyPasswordHashField, ReadOnlyPasswordHashWidget, ) -from managemails.models import ( - Mailbox, -) +from managemails.models import Mailbox Customer = get_user_model() @@ -31,14 +29,14 @@ Customer = get_user_model() class ReadOnlyPasswordHashWidgetTest(TestCase): def test_render(self): widget = ReadOnlyPasswordHashWidget() - rendered = widget.render('password', 'secret', {'class': 'test'}) + rendered = widget.render("password", "secret", {"class": "test"}) self.assertEqual( rendered, format_html( '
{0}
', - format_html('{0}: secret ', - _('Hash')) - )) + format_html("{0}: secret ", _("Hash")), + ), + ) class ReadOnlyPasswordHashFieldTest(TestCase): @@ -48,24 +46,24 @@ class ReadOnlyPasswordHashFieldTest(TestCase): def test_bound_data(self): field = ReadOnlyPasswordHashField() - self.assertEqual(field.bound_data('new', 'old'), 'old') + self.assertEqual(field.bound_data("new", "old"), "old") def test__has_changed(self): field = ReadOnlyPasswordHashField() - self.assertFalse(field.has_changed('new', 'old')) + self.assertFalse(field.has_changed("new", "old")) class CustomerTestCase(TestCase): def setUp(self): super(CustomerTestCase, self).setUp() - self.customer = Customer.objects.create(username='test') + self.customer = Customer.objects.create(username="test") class MailboxCreationFormTest(CustomerTestCase): def test_clean_password2_same(self): form = MailboxCreationForm() - form.cleaned_data = {'password1': 'secret', 'password2': 'secret'} - self.assertEqual(form.clean_password2(), 'secret') + form.cleaned_data = {"password1": "secret", "password2": "secret"} + self.assertEqual(form.clean_password2(), "secret") def test_clean_password2_empty(self): form = MailboxCreationForm() @@ -74,59 +72,47 @@ class MailboxCreationFormTest(CustomerTestCase): def test_clean_password2_mismatch(self): form = MailboxCreationForm() - form.cleaned_data = {'password1': 'secretx', 'password2': 'secrety'} + form.cleaned_data = {"password1": "secretx", "password2": "secrety"} with self.assertRaises(forms.ValidationError) as cm: form.clean_password2() self.assertEqual(cm.exception.message, PASSWORD_MISMATCH_ERROR) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_save_commit(self): user = User.objects.create_user(customer=self.customer) - form = MailboxCreationForm(data={ - 'osuser': user.uid, - 'password1': 'secret', - 'password2': 'secret', - }) + form = MailboxCreationForm( + data={"osuser": user.uid, "password1": "secret", "password2": "secret"} + ) mailbox = form.save() self.assertIsNotNone(mailbox) - self.assertEqual( - len(Mailbox.objects.filter(osuser=user)), 1) + self.assertEqual(len(Mailbox.objects.filter(osuser=user)), 1) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_save_no_commit(self): user = User.objects.create_user(customer=self.customer) - form = MailboxCreationForm(data={ - 'osuser': user.uid, - 'password1': 'secret', - 'password2': 'secret', - }) + form = MailboxCreationForm( + data={"osuser": user.uid, "password1": "secret", "password2": "secret"} + ) mailbox = form.save(commit=False) self.assertIsNotNone(mailbox) - self.assertEqual( - len(Mailbox.objects.filter(osuser=user)), 0) + self.assertEqual(len(Mailbox.objects.filter(osuser=user)), 0) class MailboxChangeFormTest(CustomerTestCase): @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_clean_password(self): mailbox = Mailbox( - username='test', - osuser=User.objects.create_user(customer=self.customer)) - mailbox.set_password('test') + username="test", osuser=User.objects.create_user(customer=self.customer) + ) + mailbox.set_password("test") mailbox.save() - form = MailboxChangeForm(instance=mailbox, data={'password': 'blub'}) + form = MailboxChangeForm(instance=mailbox, data={"password": "blub"}) self.assertEqual(form.clean_password(), mailbox.password) @@ -151,55 +137,43 @@ class MailBoxAdminTest(CustomerTestCase): self.mbadmin = MailboxAdmin(Mailbox, site) def test_get_fieldsets_without_object(self): - self.assertEqual( - self.mbadmin.get_fieldsets(Mock()), - self.mbadmin.add_fieldsets) + self.assertEqual(self.mbadmin.get_fieldsets(Mock()), self.mbadmin.add_fieldsets) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_get_fieldsets_with_object(self): mailbox = Mailbox( - username='test', - osuser=User.objects.create_user(customer=self.customer)) - mailbox.set_password('test') + username="test", osuser=User.objects.create_user(customer=self.customer) + ) + mailbox.set_password("test") mailbox.save() self.assertEqual( - self.mbadmin.get_fieldsets(Mock(), mailbox), - self.mbadmin.fieldsets) + self.mbadmin.get_fieldsets(Mock(), mailbox), self.mbadmin.fieldsets + ) def test_get_form_without_object(self): form = self.mbadmin.get_form(Mock) - self.assertEqual( - form.Meta.fields, - ['osuser', 'password1', 'password2'] - ) + self.assertEqual(form.Meta.fields, ["osuser", "password1", "password2"]) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_get_form_with_object(self): mailbox = Mailbox( - username='test', - osuser=User.objects.create_user(customer=self.customer)) - mailbox.set_password('test') + username="test", osuser=User.objects.create_user(customer=self.customer) + ) + mailbox.set_password("test") mailbox.save() form = self.mbadmin.get_form(Mock, mailbox) - self.assertEqual( - form.Meta.fields, - ['osuser', 'username', 'password', 'active'] - ) + self.assertEqual(form.Meta.fields, ["osuser", "username", "password", "active"]) def test_admin_for_mailbox(self): - admin_url = reverse('admin:managemails_mailaddress_changelist') + admin_url = reverse("admin:managemails_mailaddress_changelist") self.assertIsNotNone(admin_url) class MailAddressAdminTest(TestCase): def test_admin_for_mailaddress(self): - admin_url = reverse('admin:managemails_mailaddress_changelist') + admin_url = reverse("admin:managemails_mailaddress_changelist") self.assertIsNotNone(admin_url) diff --git a/gnuviechadmin/managemails/tests/test_forms.py b/gnuviechadmin/managemails/tests/test_forms.py index abcd144..be72a61 100644 --- a/gnuviechadmin/managemails/tests/test_forms.py +++ b/gnuviechadmin/managemails/tests/test_forms.py @@ -2,13 +2,11 @@ This module provides tests for :py:mod:`managemails.forms`. """ -from __future__ import absolute_import, unicode_literals +from unittest.mock import MagicMock, Mock, patch, ANY -from mock import MagicMock, Mock, patch, ANY - -from django.core.urlresolvers import reverse from django.forms import ValidationError from django.test import TestCase +from django.urls import reverse from managemails.forms import ( AddMailAddressForm, @@ -22,7 +20,6 @@ from managemails.forms import ( class CreateMailboxFormTest(TestCase): - def test_constructor_needs_hostingpackage(self): instance = MagicMock() with self.assertRaises(KeyError): @@ -32,33 +29,35 @@ class CreateMailboxFormTest(TestCase): hostingpackage = Mock(id=42) instance = MagicMock() form = CreateMailboxForm(instance, hostingpackage=hostingpackage) - self.assertTrue(hasattr(form, 'hosting_package')) + self.assertTrue(hasattr(form, "hosting_package")) self.assertEqual(form.hosting_package, hostingpackage) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'create_mailbox', kwargs={'package': 42})) - self.assertIn('password1', form.fields) - self.assertIn('password2', form.fields) - self.assertEqual(form.helper.inputs[0].name, 'submit') + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, reverse("create_mailbox", kwargs={"package": 42}) + ) + self.assertIn("password1", form.fields) + self.assertIn("password2", form.fields) + self.assertEqual(form.helper.inputs[0].name, "submit") - @patch('managemails.forms.Mailbox.objects') + @patch("managemails.forms.Mailbox.objects") def test_save(self, mailbox_objects): osuser = MagicMock() hostingpackage = Mock(id=42, osuser=osuser) instance = MagicMock() form = CreateMailboxForm( - instance=instance, hostingpackage=hostingpackage, - data={'password1': 'secret', 'password2': 'secret'}) - mailbox_objects.get_next_mailbox_name.return_value = 'mailbox23' + instance=instance, + hostingpackage=hostingpackage, + data={"password1": "secret", "password2": "secret"}, + ) + mailbox_objects.get_next_mailbox_name.return_value = "mailbox23" self.assertTrue(form.is_valid()) form.save(commit=False) self.assertEqual(osuser, form.instance.osuser) - self.assertEqual('mailbox23', form.instance.username) - instance.set_password.assert_called_with('secret') + self.assertEqual("mailbox23", form.instance.username) + instance.set_password.assert_called_with("secret") class ChangeMailboxPasswordFormTest(TestCase): - def test_constructor_needs_hostingpackage(self): instance = MagicMock() with self.assertRaises(KeyError): @@ -66,72 +65,75 @@ class ChangeMailboxPasswordFormTest(TestCase): def test_constructor(self): hostingpackage = Mock(id=42) - instance = MagicMock(username='testuser') + instance = MagicMock(username="testuser") form = ChangeMailboxPasswordForm( - instance=instance, hostingpackage=hostingpackage) - self.assertTrue(hasattr(form, 'hosting_package')) + instance=instance, hostingpackage=hostingpackage + ) + self.assertTrue(hasattr(form, "hosting_package")) self.assertEqual(form.hosting_package, hostingpackage) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'change_mailbox_password', kwargs={ - 'package': 42, 'slug': 'testuser'})) - self.assertIn('password1', form.fields) - self.assertIn('password2', form.fields) - self.assertEqual(form.helper.inputs[0].name, 'submit') + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse( + "change_mailbox_password", kwargs={"package": 42, "slug": "testuser"} + ), + ) + self.assertIn("password1", form.fields) + self.assertIn("password2", form.fields) + self.assertEqual(form.helper.inputs[0].name, "submit") def test_save(self): hostingpackage = Mock(id=42) - instance = MagicMock(username='testuser') + instance = MagicMock(username="testuser") form = ChangeMailboxPasswordForm( - instance=instance, hostingpackage=hostingpackage, - data={'password1': 'newsecret', 'password2': 'newsecret'}) + instance=instance, + hostingpackage=hostingpackage, + data={"password1": "newsecret", "password2": "newsecret"}, + ) self.assertTrue(form.is_valid()) form.save(commit=False) - instance.set_password.assert_called_with('newsecret') + instance.set_password.assert_called_with("newsecret") class MultipleEmailValidatorTest(TestCase): - def test_valid_single_address(self): self.assertEqual( - 'test@example.org', - multiple_email_validator('test@example.org')) + "test@example.org", multiple_email_validator("test@example.org") + ) def test_valid_multiple_addresses(self): self.assertEqual( - 'test1@example.org,test2@example.org', - multiple_email_validator('test1@example.org,test2@example.org')) + "test1@example.org,test2@example.org", + multiple_email_validator("test1@example.org,test2@example.org"), + ) def test_empty(self): - self.assertEqual( - '', multiple_email_validator('')) + self.assertEqual("", multiple_email_validator("")) def test_none(self): self.assertIsNone(multiple_email_validator(None)) def test_invalid_single_address(self): with self.assertRaises(ValidationError): - multiple_email_validator('no@ddress') + multiple_email_validator("no@ddress") def test_invalid_multiple_addresses(self): with self.assertRaises(ValidationError): - multiple_email_validator('test1@example.org,no@ddress') + multiple_email_validator("test1@example.org,no@ddress") class MailAddressFieldMixinTest(TestCase): - def test_fields_defined(self): form = MailAddressFieldMixin() - self.assertIn('mailbox_or_forwards', form.fields) - self.assertIn('mailbox', form.fields) - self.assertIn('forwards', form.fields) + self.assertIn("mailbox_or_forwards", form.fields) + self.assertIn("mailbox", form.fields) + self.assertIn("forwards", form.fields) class AddMailAddressFormTest(TestCase): - def setUp(self): - self.patcher1 = patch('managemails.forms.Mailbox.objects') - self.patcher2 = patch('managemails.forms.MailAddress.objects') + self.patcher1 = patch("managemails.forms.Mailbox.objects") + self.patcher2 = patch("managemails.forms.MailAddress.objects") self.mailbox_objects = self.patcher1.start() self.mailaddress_objects = self.patcher2.start() @@ -151,175 +153,192 @@ class AddMailAddressFormTest(TestCase): def test_constructor(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, - maildomain=maildomain) + instance=instance, hostingpackage=hostingpackage, maildomain=maildomain + ) self.mailbox_objects.unused.assert_called_with(osuser=osuser) - self.assertIn('mailbox_or_forwards', form.fields) - self.assertIn('mailbox', form.fields) - self.assertIn('forwards', form.fields) - self.assertTrue(hasattr(form, 'hosting_package')) + self.assertIn("mailbox_or_forwards", form.fields) + self.assertIn("mailbox", form.fields) + self.assertIn("forwards", form.fields) + self.assertTrue(hasattr(form, "hosting_package")) self.assertEqual(form.hosting_package, hostingpackage) - self.assertTrue(hasattr(form, 'maildomain')) + self.assertTrue(hasattr(form, "maildomain")) self.assertEqual(form.maildomain, maildomain) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'add_mailaddress', kwargs={ - 'package': 42, 'domain': 'example.org'})) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("add_mailaddress", kwargs={"package": 42, "domain": "example.org"}), + ) self.assertEqual(len(form.helper.layout), 2) - self.assertEqual(form.helper.layout[1].name, 'submit') + self.assertEqual(form.helper.layout[1].name, "submit") def test_clean_localpart_valid(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'forwards': 'test2@example.org' - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "forwards": "test2@example.org", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertTrue(form.is_valid()) - self.assertEqual('test', form.clean_localpart()) + self.assertEqual("test", form.clean_localpart()) def test_clean_localpart_duplicate(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'forwards': 'test2@example.org' - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "forwards": "test2@example.org", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = True self.assertFalse(form.is_valid()) - self.assertIn('localpart', form.errors) + self.assertIn("localpart", form.errors) def test_clean_no_mailbox_choice(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertFalse(form.is_valid()) - self.assertIn('mailbox', form.errors) + self.assertIn("mailbox", form.errors) def test_clean_no_forward_address_choice(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertFalse(form.is_valid()) - self.assertIn('forwards', form.errors) + self.assertIn("forwards", form.errors) def test_save_with_forwards_no_commit(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'forwards': 'test2@example.org,test3@example.org' - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "forwards": "test2@example.org,test3@example.org", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertTrue(form.is_valid()) - address1 = MagicMock(mailaddress='test2@example.org') - address2 = MagicMock(mailaddress='test3@example.org') + address1 = MagicMock(mailaddress="test2@example.org") + address2 = MagicMock(mailaddress="test3@example.org") instance.set_forward_addresses.return_value = [address1, address2] form.save(commit=False) self.assertEqual(maildomain, instance.domain) - instance.set_forward_addresses.assert_called_with([ - 'test2@example.org', 'test3@example.org'], commit=False) + instance.set_forward_addresses.assert_called_with( + ["test2@example.org", "test3@example.org"], commit=False + ) address1.save.assert_not_called() address2.save.assert_not_called() instance.save.assert_not_called() def test_save_with_forwards_commit(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'forwards': 'test2@example.org,test3@example.org' - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "forwards": "test2@example.org,test3@example.org", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertTrue(form.is_valid()) - address1 = MagicMock(mailaddress='test2@example.org') - address2 = MagicMock(mailaddress='test3@example.org') + address1 = MagicMock(mailaddress="test2@example.org") + address2 = MagicMock(mailaddress="test3@example.org") instance.set_forward_addresses.return_value = [address1, address2] form.save(commit=True) self.assertEqual(maildomain, instance.domain) - instance.set_forward_addresses.assert_called_with([ - 'test2@example.org', 'test3@example.org'], commit=False) + instance.set_forward_addresses.assert_called_with( + ["test2@example.org", "test3@example.org"], commit=False + ) address1.save.assert_called_with() address2.save.assert_called_with() instance.save.assert_called_with() def test_save_with_mailbox_no_commit(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - 'mailbox': 'mailbox23', - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + "mailbox": "mailbox23", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertTrue(form.is_valid()) - mailbox = MagicMock(osuser=osuser, username='testuserp01') + mailbox = MagicMock(osuser=osuser, username="testuserp01") instance.set_mailbox.return_value = mailbox form.save(commit=False) self.assertEqual(maildomain, instance.domain) @@ -329,22 +348,24 @@ class AddMailAddressFormTest(TestCase): def test_save_with_mailbox_commit(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - 'mailbox': 'mailbox23', - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + "mailbox": "mailbox23", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertTrue(form.is_valid()) - mailbox = MagicMock(osuser=osuser, username='testuserp01') + mailbox = MagicMock(osuser=osuser, username="testuserp01") instance.set_mailbox.return_value = mailbox form.save(commit=True) self.assertEqual(maildomain, instance.domain) @@ -355,26 +376,28 @@ class AddMailAddressFormTest(TestCase): def test_save_with_other_choice(self): instance = MagicMock() - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = AddMailAddressForm( - instance=instance, hostingpackage=hostingpackage, + instance=instance, + hostingpackage=hostingpackage, maildomain=maildomain, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - 'mailbox': 'mailbox23', - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + "mailbox": "mailbox23", + }, + ) self.mailaddress_objects.filter( - domain=maildomain, localpart='test' + domain=maildomain, localpart="test" ).exists.return_value = False self.assertTrue(form.is_valid()) - form.cleaned_data['mailbox_or_forwards'] = -1 - address1 = MagicMock(mailaddress='test2@example.org') - address2 = MagicMock(mailaddress='test3@example.org') + form.cleaned_data["mailbox_or_forwards"] = -1 + address1 = MagicMock(mailaddress="test2@example.org") + address2 = MagicMock(mailaddress="test3@example.org") instance.set_forward_addresses.return_value = [address1, address2] - mailbox = MagicMock(osuser=osuser, username='testuserp01') + mailbox = MagicMock(osuser=osuser, username="testuserp01") instance.set_mailbox.return_value = mailbox form.save(commit=True) instance.set_mailbox.assert_not_called() @@ -386,10 +409,9 @@ class AddMailAddressFormTest(TestCase): class EditMailAddressFormTest(TestCase): - def setUp(self): - self.patcher1 = patch('managemails.forms.Mailbox.objects') - self.patcher2 = patch('managemails.forms.MailAddress.objects') + self.patcher1 = patch("managemails.forms.Mailbox.objects") + self.patcher2 = patch("managemails.forms.MailAddress.objects") self.mailbox_objects = self.patcher1.start() self.mailaddress_objects = self.patcher2.start() @@ -409,115 +431,125 @@ class EditMailAddressFormTest(TestCase): def test_constructor(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, - hostingpackage=hostingpackage) + instance=instance, maildomain=maildomain, hostingpackage=hostingpackage + ) self.mailbox_objects.unused_or_own.assert_called_with(instance, osuser) - self.assertIn('mailbox_or_forwards', form.fields) - self.assertIn('mailbox', form.fields) - self.assertIn('forwards', form.fields) - self.assertTrue(hasattr(form, 'hosting_package')) + self.assertIn("mailbox_or_forwards", form.fields) + self.assertIn("mailbox", form.fields) + self.assertIn("forwards", form.fields) + self.assertTrue(hasattr(form, "hosting_package")) self.assertEqual(form.hosting_package, hostingpackage) - self.assertTrue(hasattr(form, 'maildomain')) + self.assertTrue(hasattr(form, "maildomain")) self.assertEqual(form.maildomain, maildomain) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'edit_mailaddress', kwargs={ - 'package': 42, - 'domain': 'example.org', - 'pk': 23})) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse( + "edit_mailaddress", + kwargs={"package": 42, "domain": "example.org", "pk": 23}, + ), + ) self.assertEqual(len(form.helper.layout), 2) - self.assertEqual(form.helper.layout[1].name, 'submit') + self.assertEqual(form.helper.layout[1].name, "submit") def test_clean_no_mailbox_choice(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, - data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - }) + data={"mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox}, + ) self.assertFalse(form.is_valid()) - self.assertIn('mailbox', form.errors) + self.assertIn("mailbox", form.errors) def test_clean_no_forward_address_choice(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, - data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - }) + data={"mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards}, + ) self.assertFalse(form.is_valid()) - self.assertIn('forwards', form.errors) + self.assertIn("forwards", form.errors) def test_save_with_forwards_no_commit(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'forwards': 'test2@example.org,test3@example.org' - }) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "forwards": "test2@example.org,test3@example.org", + }, + ) self.assertTrue(form.is_valid()) - address1 = MagicMock(mailaddress='test2@example.org') - address2 = MagicMock(mailaddress='test3@example.org') + address1 = MagicMock(mailaddress="test2@example.org") + address2 = MagicMock(mailaddress="test3@example.org") instance.set_forward_addresses.return_value = [address1, address2] form.save(commit=False) instance.set_forward_addresses.assert_called_with( - ['test2@example.org', 'test3@example.org'], False) + ["test2@example.org", "test3@example.org"], False + ) address1.save.assert_not_called() address2.save.assert_not_called() instance.save.assert_not_called() def test_save_with_forwards_commit(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'forwards': 'test2@example.org,test3@example.org' - }) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "forwards": "test2@example.org,test3@example.org", + }, + ) self.assertTrue(form.is_valid()) - address1 = MagicMock(mailaddress='test2@example.org') - address2 = MagicMock(mailaddress='test3@example.org') + address1 = MagicMock(mailaddress="test2@example.org") + address2 = MagicMock(mailaddress="test3@example.org") instance.set_forward_addresses.return_value = [address1, address2] form.save(commit=True) instance.set_forward_addresses.assert_called_with( - ['test2@example.org', 'test3@example.org'], True) + ["test2@example.org", "test3@example.org"], True + ) instance.save.assert_called_with() def test_save_with_mailbox_no_commit(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - 'mailbox': 'mailbox23', - }) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + "mailbox": "mailbox23", + }, + ) self.assertTrue(form.is_valid()) - mailbox = MagicMock(osuser=osuser, username='testuserp01') + mailbox = MagicMock(osuser=osuser, username="testuserp01") instance.set_mailbox.return_value = mailbox form.save(commit=False) instance.set_mailbox.assert_called_with(ANY, False) @@ -526,18 +558,20 @@ class EditMailAddressFormTest(TestCase): def test_save_with_mailbox_commit(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - 'mailbox': 'mailbox23', - }) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + "mailbox": "mailbox23", + }, + ) self.assertTrue(form.is_valid()) - mailbox = MagicMock(osuser=osuser, username='testuserp01') + mailbox = MagicMock(osuser=osuser, username="testuserp01") instance.set_mailbox.return_value = mailbox self.mailbox_objects.unused_or_own.get.return_value = mailbox form.save(commit=True) @@ -546,18 +580,20 @@ class EditMailAddressFormTest(TestCase): def test_save_with_other_choice(self): instance = MagicMock(id=23) - osuser = Mock(username='testuser') + osuser = Mock(username="testuser") hostingpackage = MagicMock(id=42, osuser=osuser) - maildomain = MagicMock(domain='example.org') + maildomain = MagicMock(domain="example.org") form = EditMailAddressForm( - instance=instance, maildomain=maildomain, + instance=instance, + maildomain=maildomain, hostingpackage=hostingpackage, data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.mailbox, - 'mailbox': 'mailbox23', - }) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.mailbox, + "mailbox": "mailbox23", + }, + ) self.assertTrue(form.is_valid()) - form.cleaned_data['mailbox_or_forwards'] = -1 + form.cleaned_data["mailbox_or_forwards"] = -1 form.save(commit=True) instance.set_mailbox.assert_not_called() instance.save.assert_called_with() diff --git a/gnuviechadmin/managemails/tests/test_models.py b/gnuviechadmin/managemails/tests/test_models.py index 16ac111..895a078 100644 --- a/gnuviechadmin/managemails/tests/test_models.py +++ b/gnuviechadmin/managemails/tests/test_models.py @@ -1,9 +1,7 @@ """ This module contains tests for :py:mod:`managemails.models` """ -from __future__ import unicode_literals - -from mock import patch +from unittest.mock import patch from django.test import TestCase, TransactionTestCase from django.test.utils import override_settings @@ -14,59 +12,51 @@ from passlib.hash import sha512_crypt from domains.models import MailDomain from osusers.models import User -from managemails.models import ( - MailAddress, - Mailbox, -) +from managemails.models import MailAddress, Mailbox Customer = get_user_model() @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class MailboxTest(TestCase): - def setUp(self): super(MailboxTest, self).setUp() - self.customer = Customer.objects.create_user('test') + self.customer = Customer.objects.create_user("test") def test_set_password(self): user = User.objects.create_user(self.customer) - mb = Mailbox.objects.create(username='test', osuser=user) - mb.set_password('test') - self.assertTrue(sha512_crypt.verify('test', mb.password)) + mb = Mailbox.objects.create(username="test", osuser=user) + mb.set_password("test") + self.assertTrue(sha512_crypt.verify("test", mb.password)) def test___str__(self): user = User.objects.create_user(self.customer) - mb = Mailbox.objects.create(username='test', osuser=user) - mb.set_password('test') - self.assertEqual(str(mb), 'test') + mb = Mailbox.objects.create(username="test", osuser=user) + mb.set_password("test") + self.assertEqual(str(mb), "test") - @patch('managemails.models.create_file_mailbox') + @patch("managemails.models.create_file_mailbox") def test_save(self, create_file_mailbox_task): user = User.objects.create_user(self.customer) mb = Mailbox.objects.create_mailbox(user) self.assertIsNotNone(mb.pk) - create_file_mailbox_task.delay.assert_called_with( - user.username, mb.username) + create_file_mailbox_task.delay.assert_called_with(user.username, mb.username) - @patch('managemails.models.delete_file_mailbox') + @patch("managemails.models.delete_file_mailbox") def test_delete(self, delete_file_mailbox_task): user = User.objects.create_user(self.customer) mb = Mailbox.objects.create_mailbox(user) mb.delete() self.assertIsNone(mb.pk) - delete_file_mailbox_task.delay.assert_called_with( - user.username, mb.username) + delete_file_mailbox_task.delay.assert_called_with(user.username, mb.username) def test_get_mailaddresses(self): user = User.objects.create_user(self.customer) mb = Mailbox.objects.create_mailbox(user) - md = MailDomain.objects.create(domain='example.org') - address = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + address = MailAddress.objects.create(localpart="test", domain=md) address.set_mailbox(mb) mailaddresses = mb.get_mailaddresses() self.assertEqual(len(mailaddresses), 1) @@ -74,31 +64,28 @@ class MailboxTest(TestCase): @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class MailAddressTest(TransactionTestCase): - def test__str__(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) - self.assertEqual(str(ma), 'test@example.org') + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) + self.assertEqual(str(ma), "test@example.org") def test_set_mailbox_fresh(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb) self.assertIn(ma, mb.get_mailaddresses()) def test_set_mailbox_reassing(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb) mb2 = Mailbox.objects.create_mailbox(user) @@ -107,168 +94,178 @@ class MailAddressTest(TransactionTestCase): self.assertNotIn(ma, mb.get_mailaddresses()) def test_set_mailbox_with_forwards(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) - ma.set_forward_addresses(['test2@example.org']) + ma.set_forward_addresses(["test2@example.org"]) ma.set_mailbox(mb) self.assertEqual(ma.mailaddressforward_set.count(), 0) self.assertIn(ma, mb.get_mailaddresses()) def test_set_mailbox_with_unsaved_address(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb) self.assertIn(ma, mb.get_mailaddresses()) def test_set_mailbox_fresh_no_commit(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb, commit=False) self.assertNotIn(ma, mb.get_mailaddresses()) def test_set_mailbox_with_unsaved_address_no_commit(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb, commit=False) self.assertNotIn(ma, mb.get_mailaddresses()) def test_set_forward_addresses_fresh(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) - ma.set_forward_addresses(['test2@example.org']) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) + ma.set_forward_addresses(["test2@example.org"]) + + def get_target(maf): + return maf.target + self.assertQuerysetEqual( - ma.mailaddressforward_set.all(), ['test2@example.org'], - lambda(maf): maf.target) + ma.mailaddressforward_set.all(), ["test2@example.org"], get_target + ) def test_set_forward_addresses_unsaved(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress(localpart='test', domain=md) - ma.set_forward_addresses(['test2@example.org']) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress(localpart="test", domain=md) + ma.set_forward_addresses(["test2@example.org"]) + + def get_target(maf): + return maf.target + self.assertQuerysetEqual( - ma.mailaddressforward_set.all(), ['test2@example.org'], - lambda(maf): maf.target) + ma.mailaddressforward_set.all(), ["test2@example.org"], get_target + ) def test_set_forward_addresses_replace_forwards(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) - ma.set_forward_addresses(['test2@example.org']) - ma.set_forward_addresses(['test3@example.org']) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) + ma.set_forward_addresses(["test2@example.org"]) + ma.set_forward_addresses(["test3@example.org"]) + + def get_target(maf): + return maf.target + self.assertQuerysetEqual( - ma.mailaddressforward_set.all(), ['test3@example.org'], - lambda(maf): maf.target) + ma.mailaddressforward_set.all(), ["test3@example.org"], get_target + ) def test_set_forward_addresses_add_forwards(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) - ma.set_forward_addresses(['test2@example.org']) - ma.set_forward_addresses(['test2@example.org', 'test3@example.org']) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) + ma.set_forward_addresses(["test2@example.org"]) + ma.set_forward_addresses(["test2@example.org", "test3@example.org"]) + + def get_target(maf): + return maf.target + self.assertQuerysetEqual( ma.mailaddressforward_set.all(), - ['test2@example.org', 'test3@example.org'], - lambda(maf): maf.target, - ordered=False) + ["test2@example.org", "test3@example.org"], + get_target, + ordered=False, + ) def test_set_forward_addresses_replace_mailbox(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb) - ma.set_forward_addresses(['test2@example.org']) + ma.set_forward_addresses(["test2@example.org"]) self.assertNotIn(ma, mb.get_mailaddresses()) + + def get_target(maf): + return maf.target + self.assertQuerysetEqual( - ma.mailaddressforward_set.all(), ['test2@example.org'], - lambda(maf): maf.target) + ma.mailaddressforward_set.all(), ["test2@example.org"], get_target + ) def test_set_forward_addresses_fresh_no_commit(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress.objects.create(localpart='test', domain=md) - mafwds = ma.set_forward_addresses(['test2@example.org'], commit=False) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress.objects.create(localpart="test", domain=md) + mafwds = ma.set_forward_addresses(["test2@example.org"], commit=False) self.assertEqual(ma.mailaddressforward_set.count(), 0) - self.assertEqual(mafwds[0].target, 'test2@example.org') + self.assertEqual(mafwds[0].target, "test2@example.org") def test_set_forward_address_unsaved_no_commit(self): - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress(localpart='test', domain=md) - mafwds = ma.set_forward_addresses(['test2@example.org'], commit=False) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress(localpart="test", domain=md) + mafwds = ma.set_forward_addresses(["test2@example.org"], commit=False) self.assertEqual(ma.mailaddressforward_set.count(), 0) - self.assertEqual(mafwds[0].target, 'test2@example.org') + self.assertEqual(mafwds[0].target, "test2@example.org") @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class MailboxManagerTest(TransactionTestCase): - def setUp(self): super(MailboxManagerTest, self).setUp() - self.customer = Customer.objects.create_user('test') + self.customer = Customer.objects.create_user("test") self.user = User.objects.create_user(self.customer) def test_get_next_mailbox_name_fresh(self): mailboxname = Mailbox.objects.get_next_mailbox_name(self.user) - self.assertEqual(mailboxname, '{}p01'.format(self.user.username)) + self.assertEqual(mailboxname, "{}p01".format(self.user.username)) def test_get_next_mailbox_name_second(self): Mailbox.objects.create_mailbox(self.user) mailboxname = Mailbox.objects.get_next_mailbox_name(self.user) - self.assertEqual(mailboxname, '{}p02'.format(self.user.username)) + self.assertEqual(mailboxname, "{}p02".format(self.user.username)) def test_get_next_mailbox_name_gap_detection(self): - mailboxes = [ - Mailbox.objects.create_mailbox(self.user) for i in range(3) - ] + mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(3)] mailboxes[1].delete() mailboxname = Mailbox.objects.get_next_mailbox_name(self.user) - self.assertEqual(mailboxname, '{}p02'.format(self.user.username)) + self.assertEqual(mailboxname, "{}p02".format(self.user.username)) def test_unused_or_own_fresh(self): - md = MailDomain.objects.create(domain='example.org') - address = MailAddress.objects.create(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + address = MailAddress.objects.create(localpart="test", domain=md) mailboxes = Mailbox.objects.unused_or_own(address, self.user) self.assertQuerysetEqual(mailboxes, []) def test_unused_or_own_unassigned(self): - md = MailDomain.objects.create(domain='example.org') - address = MailAddress.objects.create(localpart='test', domain=md) - mailboxes = [ - Mailbox.objects.create_mailbox(self.user) for i in range(2) - ] + md = MailDomain.objects.create(domain="example.org") + address = MailAddress.objects.create(localpart="test", domain=md) + mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)] assignable = Mailbox.objects.unused_or_own(address, self.user) self.assertQuerysetEqual(assignable, [repr(mb) for mb in mailboxes]) def test_unused_or_own_assigned(self): - md = MailDomain.objects.create(domain='example.org') - address = MailAddress.objects.create(localpart='test', domain=md) - mailboxes = [ - Mailbox.objects.create_mailbox(self.user) for i in range(2) - ] + md = MailDomain.objects.create(domain="example.org") + address = MailAddress.objects.create(localpart="test", domain=md) + mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)] address.set_mailbox(mailboxes[0]) assignable = Mailbox.objects.unused_or_own(address, self.user) self.assertQuerysetEqual(assignable, [repr(mb) for mb in mailboxes]) def test_unused_or_own_assigned_other(self): - md = MailDomain.objects.create(domain='example.org') - address = MailAddress.objects.create(localpart='test', domain=md) - address2 = MailAddress.objects.create(localpart='test2', domain=md) - mailboxes = [ - Mailbox.objects.create_mailbox(self.user) for i in range(2) - ] + md = MailDomain.objects.create(domain="example.org") + address = MailAddress.objects.create(localpart="test", domain=md) + address2 = MailAddress.objects.create(localpart="test2", domain=md) + mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)] address2.set_mailbox(mailboxes[0]) assignable = Mailbox.objects.unused_or_own(address, self.user) self.assertQuerysetEqual(assignable, [repr(mailboxes[1])]) @@ -283,11 +280,9 @@ class MailboxManagerTest(TransactionTestCase): self.assertQuerysetEqual(mailboxes, [repr(mailbox)]) def test_unused_assigned(self): - md = MailDomain.objects.create(domain='example.org') - address = MailAddress.objects.create(localpart='test', domain=md) - mailboxes = [ - Mailbox.objects.create_mailbox(self.user) for i in range(2) - ] + md = MailDomain.objects.create(domain="example.org") + address = MailAddress.objects.create(localpart="test", domain=md) + mailboxes = [Mailbox.objects.create_mailbox(self.user) for _ in range(2)] address.set_mailbox(mailboxes[0]) assignable = Mailbox.objects.unused(self.user) self.assertQuerysetEqual(assignable, [repr(mailboxes[1])]) @@ -295,31 +290,28 @@ class MailboxManagerTest(TransactionTestCase): def test_create_mailbox_no_password(self): mailbox = Mailbox.objects.create_mailbox(self.user) self.assertEqual(mailbox.osuser, self.user) - self.assertEqual(mailbox.username, '{}p01'.format(self.user.username)) - self.assertEqual(mailbox.password, '') + self.assertEqual(mailbox.username, "{}p01".format(self.user.username)) + self.assertEqual(mailbox.password, "") def test_create_mailbox_with_password(self): - mailbox = Mailbox.objects.create_mailbox(self.user, 'test') + mailbox = Mailbox.objects.create_mailbox(self.user, "test") self.assertEqual(mailbox.osuser, self.user) - self.assertEqual(mailbox.username, '{}p01'.format(self.user.username)) - self.assertTrue(sha512_crypt.verify('test', mailbox.password)) + self.assertEqual(mailbox.username, "{}p01".format(self.user.username)) + self.assertTrue(sha512_crypt.verify("test", mailbox.password)) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class MailAddressMailboxTest(TestCase): - def setUp(self): super(MailAddressMailboxTest, self).setUp() - self.customer = Customer.objects.create_user('test') + self.customer = Customer.objects.create_user("test") def test___str__(self): user = User.objects.create_user(self.customer) - md = MailDomain.objects.create(domain='example.org') - ma = MailAddress(localpart='test', domain=md) + md = MailDomain.objects.create(domain="example.org") + ma = MailAddress(localpart="test", domain=md) mb = Mailbox.objects.create_mailbox(user) ma.set_mailbox(mb) self.assertEqual(str(ma.mailaddressmailbox), mb.username) diff --git a/gnuviechadmin/managemails/tests/test_views.py b/gnuviechadmin/managemails/tests/test_views.py index dc0f6dd..ca8608f 100644 --- a/gnuviechadmin/managemails/tests/test_views.py +++ b/gnuviechadmin/managemails/tests/test_views.py @@ -2,23 +2,15 @@ Tests for :py:mod:`managemails.views`. """ -from __future__ import absolute_import, unicode_literals +from unittest.mock import patch, MagicMock -try: - from unittest.mock import patch, MagicMock -except ImportError: - from mock import patch, MagicMock - -from django.core.urlresolvers import reverse from django.test import TestCase from django.test.utils import override_settings from django.contrib.auth import get_user_model +from django.urls import reverse from domains.models import MailDomain -from hostingpackages.models import ( - CustomerHostingPackage, - HostingPackageTemplate, -) +from hostingpackages.models import CustomerHostingPackage, HostingPackageTemplate from managemails.forms import MAILBOX_OR_FORWARDS from managemails.models import MailAddress, Mailbox @@ -32,630 +24,764 @@ from managemails.views import ( User = get_user_model() -TEST_USER = 'test' -TEST_PASSWORD = 'secret' -TEST_EMAIL = 'test@example.org' -TEST_NAME = 'Example Tester'.split() +TEST_USER = "test" +TEST_PASSWORD = "secret" +TEST_EMAIL = "test@example.org" +TEST_NAME = "Example Tester".split() class HostingPackageAwareTestMixin(object): + # noinspection PyMethodMayBeStatic def _setup_hosting_package(self, customer, mailboxcount): template = HostingPackageTemplate.objects.create( - name='testpackagetemplate', mailboxcount=mailboxcount, - diskspace=1, diskspace_unit=0) + name="testpackagetemplate", + mailboxcount=mailboxcount, + diskspace=1, + diskspace_unit=0, + ) package = CustomerHostingPackage.objects.create_from_template( - customer, template, 'testpackage') - with patch('hostingpackages.models.settings') as hmsettings: + customer, template, "testpackage" + ) + with patch("hostingpackages.models.settings") as hmsettings: hmsettings.OSUSER_DEFAULT_GROUPS = [] package.save() return package @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class CreateMailboxTest(HostingPackageAwareTestMixin, TestCase): - def test_get_anonymous(self): - response = self.client.get( - reverse('create_mailbox', kwargs={'package': 1})) + response = self.client.get(reverse("create_mailbox", kwargs={"package": 1})) self.assertEqual(response.status_code, 404) def test_get_regular_user(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_mailbox', kwargs={'package': package.pk})) + reverse("create_mailbox", kwargs={"package": package.pk}) + ) self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) User.objects.create_user( - 'test2', email='test2@example.org', password=TEST_PASSWORD) + "test2", email="test2@example.org", password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) - self.client.login(username='test2', password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get( - reverse('create_mailbox', kwargs={'package': package.pk})) + reverse("create_mailbox", kwargs={"package": package.pk}) + ) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - customer = User.objects.create_user('customer') + customer = User.objects.create_user("customer") package = self._setup_hosting_package(customer, 1) User.objects.create_superuser( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_mailbox', kwargs={'package': package.pk})) + reverse("create_mailbox", kwargs={"package": package.pk}) + ) self.assertEqual(response.status_code, 200) def test_get_template(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_mailbox', kwargs={'package': package.pk})) - self.assertTemplateUsed(response, 'managemails/mailbox_create.html') + reverse("create_mailbox", kwargs={"package": package.pk}) + ) + self.assertTemplateUsed(response, "managemails/mailbox_create.html") def test_get_no_more_mailboxes(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 0) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_mailbox', kwargs={'package': package.pk})) + reverse("create_mailbox", kwargs={"package": package.pk}) + ) self.assertEqual(response.status_code, 403) self.assertEqual( response.content, - 'You are not allowed to add more mailboxes to this hosting' - ' package') + b"You are not allowed to add more mailboxes to this hosting" b" package", + ) def test_get_context_data(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('create_mailbox', kwargs={'package': package.pk})) - self.assertIn('hostingpackage', response.context) - self.assertEqual(response.context['hostingpackage'], package) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], customer) + reverse("create_mailbox", kwargs={"package": package.pk}) + ) + self.assertIn("hostingpackage", response.context) + self.assertEqual(response.context["hostingpackage"], package) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], customer) def test_get_form_kwargs(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) self.client.login(username=TEST_USER, password=TEST_PASSWORD) - view = CreateMailbox( - request=MagicMock(), kwargs={'package': str(package.pk)}) + view = CreateMailbox(request=MagicMock(), kwargs={"package": str(package.pk)}) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], package) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], package) def test_form_valid_redirect(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('create_mailbox', kwargs={'package': package.pk}), - data={'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) + reverse("create_mailbox", kwargs={"package": package.pk}), + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) self.assertRedirects(response, package.get_absolute_url()) def test_form_valid_message(self): customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) package = self._setup_hosting_package(customer, 1) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('create_mailbox', kwargs={'package': package.pk}), + reverse("create_mailbox", kwargs={"package": package.pk}), follow=True, - data={'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) - messages = list(response.context['messages']) + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) - self.assertEqual( - 'Mailbox usr01p01 created successfully.', str(messages[0])) + self.assertEqual("Mailbox usr01p01 created successfully.", str(messages[0])) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class ChangeMailboxPasswordTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer, 1) self.mailbox = Mailbox.objects.create_mailbox( - self.package.osuser, TEST_PASSWORD) + self.package.osuser, TEST_PASSWORD + ) def test_get_anonymous(self): response = self.client.get( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username})) + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ) + ) self.assertEqual(response.status_code, 403) def test_get_regular_user(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username})) + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ) + ) self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): User.objects.create_user( - 'test2', email='test2@example.org', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + "test2", email="test2@example.org", password=TEST_PASSWORD + ) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username})) + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ) + ) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): User.objects.create_superuser( - 'admin', email='admin@example.org', password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + "admin", email="admin@example.org", password=TEST_PASSWORD + ) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username})) + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ) + ) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username})) - self.assertTemplateUsed( - response, 'managemails/mailbox_setpassword.html') + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ) + ) + self.assertTemplateUsed(response, "managemails/mailbox_setpassword.html") def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username})) - self.assertIn('hostingpackage', response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ) + ) + self.assertIn("hostingpackage", response.context) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) def test_get_form_kwargs(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) - view = ChangeMailboxPassword(request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'slug': self.mailbox.username}) + view = ChangeMailboxPassword( + request=MagicMock(), + kwargs={"package": str(self.package.pk), "slug": self.mailbox.username}, + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username}), - data={'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ), + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('change_mailbox_password', kwargs={ - 'package': self.package.pk, - 'slug': self.mailbox.username}), + reverse( + "change_mailbox_password", + kwargs={"package": self.package.pk, "slug": self.mailbox.username}, + ), follow=True, - data={'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) - messages = list(response.context['messages']) + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( - str(messages[0]), - 'Successfully set new password for mailbox usr01p01.') + str(messages[0]), "Successfully set new password for mailbox usr01p01." + ) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class AddMailAddressTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer, 1) self.maildomain = MailDomain.objects.create( - domain='example.org', customer=self.customer) + domain="example.org", customer=self.customer + ) def test_get_anonymous(self): response = self.client.get( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - })) + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ) + ) self.assertEqual(response.status_code, 403) def test_get_regular_user(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - })) + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ) + ) self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): User.objects.create_user( - 'test2', email='test2@example.org', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + "test2", email="test2@example.org", password=TEST_PASSWORD + ) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - })) + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ) + ) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): User.objects.create_superuser( - 'admin', email='admin@example.org', password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + "admin", email="admin@example.org", password=TEST_PASSWORD + ) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - })) + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ) + ) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - })) - self.assertTemplateUsed( - response, 'managemails/mailaddress_create.html') + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ) + ) + self.assertTemplateUsed(response, "managemails/mailaddress_create.html") def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - })) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ) + ) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) def test_get_form_kwargs(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) - view = AddMailAddress(request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'domain': self.maildomain.domain}) + view = AddMailAddress( + request=MagicMock(), + kwargs={"package": str(self.package.pk), "domain": self.maildomain.domain}, + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) - self.assertIn('maildomain', the_kwargs) - self.assertEqual(the_kwargs['maildomain'], self.maildomain) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) + self.assertIn("maildomain", the_kwargs) + self.assertEqual(the_kwargs["maildomain"], self.maildomain) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - }), + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ), data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'mailbox': '', - 'forwards': 'test2@example.org', - }) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "mailbox": "", + "forwards": "test2@example.org", + }, + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('add_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain - }), + reverse( + "add_mailaddress", + kwargs={"package": self.package.pk, "domain": self.maildomain.domain}, + ), follow=True, data={ - 'localpart': 'test', - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'mailbox': '', - 'forwards': 'test2@example.org', - }) - messages = list(response.context['messages']) + "localpart": "test", + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "mailbox": "", + "forwards": "test2@example.org", + }, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( - str(messages[0]), - 'Successfully added mail address test@example.org') + str(messages[0]), "Successfully added mail address test@example.org" + ) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class DeleteMailAddressTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer, 1) self.maildomain = MailDomain.objects.create( - domain='example.org', customer=self.customer) + domain="example.org", customer=self.customer + ) self.mailaddress = MailAddress.objects.create( - localpart='test', domain=self.maildomain) - self.mailaddress.set_forward_addresses(['test2@example.org']) + localpart="test", domain=self.maildomain + ) + self.mailaddress.set_forward_addresses(["test2@example.org"]) def test_get_anonymous(self): response = self.client.get( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 403) def test_get_regular_user(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): User.objects.create_user( - 'test2', email='test2@example.org', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + "test2", email="test2@example.org", password=TEST_PASSWORD + ) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): User.objects.create_superuser( - 'admin', email='admin@example.org', password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + "admin", email="admin@example.org", password=TEST_PASSWORD + ) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) - self.assertTemplateUsed( - response, 'managemails/mailaddress_confirm_delete.html') + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) + self.assertTemplateUsed(response, "managemails/mailaddress_confirm_delete.html") def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) - self.assertIn('hostingpackage', response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertIn('maildomain', response.context) - self.assertEqual(response.context['maildomain'], self.maildomain) + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) + self.assertIn("hostingpackage", response.context) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertIn("maildomain", response.context) + self.assertEqual(response.context["maildomain"], self.maildomain) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('delete_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk}), - data={}) + reverse( + "delete_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ), + data={}, + ) self.assertRedirects(response, self.package.get_absolute_url()) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class EditMailAddressTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD) + TEST_USER, email=TEST_EMAIL, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer, 1) self.maildomain = MailDomain.objects.create( - domain='example.org', customer=self.customer) + domain="example.org", customer=self.customer + ) def _set_mailaddress_with_forward(self): self.mailaddress = MailAddress.objects.create( - localpart='test', domain=self.maildomain) - self.mailaddress.set_forward_addresses(['test2@example.org']) + localpart="test", domain=self.maildomain + ) + self.mailaddress.set_forward_addresses(["test2@example.org"]) def _set_mailaddress_with_mailbox(self): self.mailaddress = MailAddress.objects.create( - localpart='test', domain=self.maildomain) + localpart="test", domain=self.maildomain + ) self.mailbox = Mailbox.objects.create_mailbox(self.package.osuser) self.mailaddress.set_mailbox(self.mailbox) def test_get_anonymous(self): self._set_mailaddress_with_forward() response = self.client.get( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 403) def test_get_regular_user(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): self._set_mailaddress_with_forward() User.objects.create_user( - 'test2', email='test2@example.org', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + "test2", email="test2@example.org", password=TEST_PASSWORD + ) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): self._set_mailaddress_with_forward() User.objects.create_superuser( - 'admin', email='admin@example.org', password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + "admin", email="admin@example.org", password=TEST_PASSWORD + ) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) self.assertEqual(response.status_code, 200) def test_get_template(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) - self.assertTemplateUsed(response, 'managemails/mailaddress_edit.html') + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) + self.assertTemplateUsed(response, "managemails/mailaddress_edit.html") def test_get_context_data(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk})) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ) + ) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) def test_get_form_kwargs(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = EditMailAddress( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'domain': self.maildomain.domain, - 'pk': str(self.mailaddress.pk)}) + request=MagicMock(), + kwargs={ + "package": str(self.package.pk), + "domain": self.maildomain.domain, + "pk": str(self.mailaddress.pk), + }, + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) - self.assertIn('maildomain', the_kwargs) - self.assertEqual(the_kwargs['maildomain'], self.maildomain) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) + self.assertIn("maildomain", the_kwargs) + self.assertEqual(the_kwargs["maildomain"], self.maildomain) def test_get_initial_with_forwards(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = EditMailAddress( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'domain': self.maildomain.domain, - 'pk': str(self.mailaddress.pk)}) + request=MagicMock(), + kwargs={ + "package": str(self.package.pk), + "domain": self.maildomain.domain, + "pk": str(self.mailaddress.pk), + }, + ) initial = view.get_initial() - self.assertIn('mailbox_or_forwards', initial) - self.assertEqual( - initial['mailbox_or_forwards'], MAILBOX_OR_FORWARDS.forwards) - self.assertIn('forwards', initial) - self.assertEqual(initial['forwards'], 'test2@example.org') - self.assertNotIn('mailbox', initial) + self.assertIn("mailbox_or_forwards", initial) + self.assertEqual(initial["mailbox_or_forwards"], MAILBOX_OR_FORWARDS.forwards) + self.assertIn("forwards", initial) + self.assertEqual(initial["forwards"], "test2@example.org") + self.assertNotIn("mailbox", initial) def test_get_initial_with_mailbox(self): self._set_mailaddress_with_mailbox() self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = EditMailAddress( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'domain': self.maildomain.domain, - 'pk': str(self.mailaddress.pk)}) + request=MagicMock(), + kwargs={ + "package": str(self.package.pk), + "domain": self.maildomain.domain, + "pk": str(self.mailaddress.pk), + }, + ) initial = view.get_initial() - self.assertIn('mailbox_or_forwards', initial) - self.assertEqual( - initial['mailbox_or_forwards'], MAILBOX_OR_FORWARDS.mailbox) - self.assertIn('mailbox', initial) - self.assertEqual(initial['mailbox'], self.mailbox) - self.assertNotIn('forwards', initial) + self.assertIn("mailbox_or_forwards", initial) + self.assertEqual(initial["mailbox_or_forwards"], MAILBOX_OR_FORWARDS.mailbox) + self.assertIn("mailbox", initial) + self.assertEqual(initial["mailbox"], self.mailbox) + self.assertNotIn("forwards", initial) def test_get_initial_with_unassigned_address(self): self.mailaddress = MailAddress.objects.create( - localpart='test', domain=self.maildomain) + localpart="test", domain=self.maildomain + ) view = EditMailAddress( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'domain': self.maildomain.domain, - 'pk': str(self.mailaddress.pk)}) + request=MagicMock(), + kwargs={ + "package": str(self.package.pk), + "domain": self.maildomain.domain, + "pk": str(self.mailaddress.pk), + }, + ) initial = view.get_initial() - self.assertNotIn('mailbox_or_forwards', initial) - self.assertNotIn('forwards', initial) - self.assertNotIn('mailbox', initial) + self.assertNotIn("mailbox_or_forwards", initial) + self.assertNotIn("forwards", initial) + self.assertNotIn("mailbox", initial) def test_form_valid_redirect(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk}), + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ), data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'mailbox': '', - 'forwards': 'test2@example.org,test3@example.org' - }) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "mailbox": "", + "forwards": "test2@example.org,test3@example.org", + }, + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): self._set_mailaddress_with_forward() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - reverse('edit_mailaddress', kwargs={ - 'package': self.package.pk, - 'domain': self.maildomain.domain, - 'pk': self.mailaddress.pk}), + reverse( + "edit_mailaddress", + kwargs={ + "package": self.package.pk, + "domain": self.maildomain.domain, + "pk": self.mailaddress.pk, + }, + ), follow=True, data={ - 'mailbox_or_forwards': MAILBOX_OR_FORWARDS.forwards, - 'mailbox': '', - 'forwards': 'test2@example.org,test3@example.org' - }) - messages = list(response.context['messages']) + "mailbox_or_forwards": MAILBOX_OR_FORWARDS.forwards, + "mailbox": "", + "forwards": "test2@example.org,test3@example.org", + }, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( str(messages[0]), - 'Successfully updated mail address test@example.org targets.') + "Successfully updated mail address test@example.org targets.", + ) diff --git a/gnuviechadmin/osusers/admin.py b/gnuviechadmin/osusers/admin.py index 3b4fb2b..b6688f6 100644 --- a/gnuviechadmin/osusers/admin.py +++ b/gnuviechadmin/osusers/admin.py @@ -7,26 +7,14 @@ The module starts Celery_ tasks. """ from django import forms -from django.utils.translation import ugettext_lazy as _ from django.contrib import admin +from django.utils.translation import ugettext_lazy as _ from fileservertasks.tasks import set_file_ssh_authorized_keys -from gvawebcore.forms import ( - PASSWORD_MISMATCH_ERROR -) +from gvawebcore.forms import PASSWORD_MISMATCH_ERROR from taskresults.models import TaskResult - -from .forms import ( - INVALID_SSH_PUBLIC_KEY, - DUPLICATE_SSH_PUBLIC_KEY_FOR_USER, -) -from .models import ( - AdditionalGroup, - Group, - Shadow, - SshPublicKey, - User, -) +from .forms import DUPLICATE_SSH_PUBLIC_KEY_FOR_USER, INVALID_SSH_PUBLIC_KEY +from .models import AdditionalGroup, Group, Shadow, SshPublicKey, User class AdditionalGroupInline(admin.TabularInline): @@ -34,6 +22,7 @@ class AdditionalGroupInline(admin.TabularInline): Inline for :py:class:`osusers.models.AdditionalGroup` instances. """ + model = AdditionalGroup @@ -42,8 +31,9 @@ class ShadowInline(admin.TabularInline): Inline for :py:class:`osusers.models.ShadowInline` instances. """ + model = Shadow - readonly_fields = ['passwd'] + readonly_fields = ["passwd"] can_delete = False @@ -53,18 +43,17 @@ class UserCreationForm(forms.ModelForm): `. """ + password1 = forms.CharField( - label=_('Password'), widget=forms.PasswordInput, - required=False, + label=_("Password"), widget=forms.PasswordInput, required=False ) password2 = forms.CharField( - label=_('Password (again)'), widget=forms.PasswordInput, - required=False, + label=_("Password (again)"), widget=forms.PasswordInput, required=False ) class Meta: model = User - fields = ['customer'] + fields = ["customer"] def clean_password2(self): """ @@ -74,8 +63,8 @@ class UserCreationForm(forms.ModelForm): :rtype: str or None """ - password1 = self.cleaned_data.get('password1') - password2 = self.cleaned_data.get('password2') + password1 = self.cleaned_data.get("password1") + password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise forms.ValidationError(PASSWORD_MISMATCH_ERROR) return password2 @@ -90,8 +79,10 @@ class UserCreationForm(forms.ModelForm): """ user = User.objects.create_user( - customer=self.cleaned_data['customer'], - password=self.cleaned_data['password1'], commit=commit) + customer=self.cleaned_data["customer"], + password=self.cleaned_data["password1"], + commit=commit, + ) return user def save_m2m(self): @@ -108,14 +99,16 @@ class UserAdmin(admin.ModelAdmin): `. """ - actions = ['perform_delete_selected'] + + actions = ["perform_delete_selected"] add_form = UserCreationForm inlines = [AdditionalGroupInline, ShadowInline] add_fieldsets = ( - (None, { - 'classes': ('wide',), - 'fields': ('customer', 'password1', 'password2')}), + ( + None, + {"classes": ("wide",), "fields": ("customer", "password1", "password2")}, + ), ) def get_form(self, request, obj=None, **kwargs): @@ -132,10 +125,12 @@ class UserAdmin(admin.ModelAdmin): """ defaults = {} if obj is None: - defaults.update({ - 'form': self.add_form, - 'fields': admin.options.flatten_fieldsets(self.add_fieldsets), - }) + defaults.update( + { + "form": self.add_form, + "fields": admin.options.flatten_fieldsets(self.add_fieldsets), + } + ) defaults.update(kwargs) return super(UserAdmin, self).get_form(request, obj, **defaults) @@ -151,7 +146,7 @@ class UserAdmin(admin.ModelAdmin): """ if obj: - return ['uid'] + return ["uid"] return [] def perform_delete_selected(self, request, queryset): @@ -167,7 +162,8 @@ class UserAdmin(admin.ModelAdmin): """ for user in queryset.all(): user.delete() - perform_delete_selected.short_description = _('Delete selected users') + + perform_delete_selected.short_description = _("Delete selected users") def get_actions(self, request): """ @@ -182,8 +178,8 @@ class UserAdmin(admin.ModelAdmin): """ actions = super(UserAdmin, self).get_actions(request) - if 'delete_selected' in actions: # pragma: no cover - del actions['delete_selected'] + if "delete_selected" in actions: # pragma: no cover + del actions["delete_selected"] return actions @@ -193,7 +189,8 @@ class GroupAdmin(admin.ModelAdmin): `. """ - actions = ['perform_delete_selected'] + + actions = ["perform_delete_selected"] def perform_delete_selected(self, request, queryset): """ @@ -208,7 +205,8 @@ class GroupAdmin(admin.ModelAdmin): """ for group in queryset.all(): group.delete() - perform_delete_selected.short_description = _('Delete selected groups') + + perform_delete_selected.short_description = _("Delete selected groups") def get_actions(self, request): """ @@ -223,8 +221,8 @@ class GroupAdmin(admin.ModelAdmin): """ actions = super(GroupAdmin, self).get_actions(request) - if 'delete_selected' in actions: # pragma: no cover - del actions['delete_selected'] + if "delete_selected" in actions: # pragma: no cover + del actions["delete_selected"] return actions @@ -234,33 +232,37 @@ class SshPublicKeyCreationForm(forms.ModelForm): `. """ + publickeytext = forms.CharField( - label=_('Key text'), widget=forms.Textarea, - help_text=_('A SSH public key in either OpenSSH or RFC 4716 format')) + label=_("Key text"), + widget=forms.Textarea, + help_text=_("A SSH public key in either OpenSSH or RFC 4716 format"), + ) class Meta: model = SshPublicKey - fields = ['user'] + fields = ["user"] def clean_publickeytext(self): - keytext = self.cleaned_data.get('publickeytext') + keytext = self.cleaned_data.get("publickeytext") try: - SshPublicKey.objects.parse_keytext(keytext) + SshPublicKey.objects.parse_key_text(keytext) except: raise forms.ValidationError(INVALID_SSH_PUBLIC_KEY) return keytext def clean(self): - user = self.cleaned_data.get('user') - keytext = self.cleaned_data.get('publickeytext') + user = self.cleaned_data.get("user") + keytext = self.cleaned_data.get("publickeytext") if user and keytext: - alg, data, comment = SshPublicKey.objects.parse_keytext(keytext) + alg, data, comment = SshPublicKey.objects.parse_key_text(keytext) if SshPublicKey.objects.filter( user=user, algorithm=alg, data=data ).exists(): self.add_error( - 'publickeytext', - forms.ValidationError(DUPLICATE_SSH_PUBLIC_KEY_FOR_USER)) + "publickeytext", + forms.ValidationError(DUPLICATE_SSH_PUBLIC_KEY_FOR_USER), + ) super(SshPublicKeyCreationForm, self).clean() def save(self, commit=True): @@ -272,8 +274,9 @@ class SshPublicKeyCreationForm(forms.ModelForm): :rtype: :py:class:`osusers.models.SshPublicKey` """ - algorithm, keydata, comment = SshPublicKey.objects.parse_keytext( - self.cleaned_data.get('publickeytext')) + algorithm, keydata, comment = SshPublicKey.objects.parse_key_text( + self.cleaned_data.get("publickeytext") + ) self.instance.algorithm = algorithm self.instance.data = keydata self.instance.comment = comment @@ -286,14 +289,13 @@ class SshPublicKeyAdmin(admin.ModelAdmin): `. """ - actions = ['perform_delete_selected'] + + actions = ["perform_delete_selected"] add_form = SshPublicKeyCreationForm - list_display = ['user', 'algorithm', 'comment'] + list_display = ["user", "algorithm", "comment"] add_fieldsets = ( - (None, { - 'classes': ('wide',), - 'fields': ('user', 'publickeytext')}), + (None, {"classes": ("wide",), "fields": ("user", "publickeytext")}), ) def get_form(self, request, obj=None, **kwargs): @@ -311,13 +313,14 @@ class SshPublicKeyAdmin(admin.ModelAdmin): """ defaults = {} if obj is None: - defaults.update({ - 'form': self.add_form, - 'fields': admin.options.flatten_fieldsets(self.add_fieldsets), - }) + defaults.update( + { + "form": self.add_form, + "fields": admin.options.flatten_fieldsets(self.add_fieldsets), + } + ) defaults.update(kwargs) - return super(SshPublicKeyAdmin, self).get_form( - request, obj, **defaults) + return super(SshPublicKeyAdmin, self).get_form(request, obj, **defaults) def get_readonly_fields(self, request, obj=None): """ @@ -332,7 +335,7 @@ class SshPublicKeyAdmin(admin.ModelAdmin): """ if obj: - return ['algorithm', 'data'] + return ["algorithm", "data"] return [] def perform_delete_selected(self, request, queryset): @@ -370,23 +373,19 @@ class SshPublicKeyAdmin(admin.ModelAdmin): } """ - users = set([ - item['user'] for item in - queryset.values('user').distinct() - ]) + users = set([item["user"] for item in queryset.values("user").distinct()]) queryset.delete() for user in users: # TODO: move to model/signal TaskResult.objects.create_task_result( - 'perform_delete_selected', + "perform_delete_selected", set_file_ssh_authorized_keys.s( User.objects.get(uid=user).username, - [str(key) for key in SshPublicKey.objects.filter( - user_id=user)] - ) + [str(key) for key in SshPublicKey.objects.filter(user_id=user)], + ), ) - perform_delete_selected.short_description = _( - 'Delete selected SSH public keys') + + perform_delete_selected.short_description = _("Delete selected SSH public keys") def get_actions(self, request): """ @@ -401,8 +400,8 @@ class SshPublicKeyAdmin(admin.ModelAdmin): """ actions = super(SshPublicKeyAdmin, self).get_actions(request) - if 'delete_selected' in actions: # pragma: no cover - del actions['delete_selected'] + if "delete_selected" in actions: # pragma: no cover + del actions["delete_selected"] return actions diff --git a/gnuviechadmin/osusers/forms.py b/gnuviechadmin/osusers/forms.py index be0e57b..6ca67c5 100644 --- a/gnuviechadmin/osusers/forms.py +++ b/gnuviechadmin/osusers/forms.py @@ -13,14 +13,12 @@ from crispy_forms.layout import Submit from gvawebcore.forms import PasswordModelFormMixin -from .models import ( - SshPublicKey, - User, -) +from .models import SshPublicKey, User -INVALID_SSH_PUBLIC_KEY = _('Invalid SSH public key data format.') +INVALID_SSH_PUBLIC_KEY = _("Invalid SSH public key data format.") DUPLICATE_SSH_PUBLIC_KEY_FOR_USER = _( - 'This SSH public key is already assigned to this user.') + "This SSH public key is already assigned to this user." +) class ChangeOsUserPasswordForm(PasswordModelFormMixin, forms.ModelForm): @@ -28,6 +26,7 @@ class ChangeOsUserPasswordForm(PasswordModelFormMixin, forms.ModelForm): A form for setting an OS user's password. """ + class Meta: model = User fields = [] @@ -36,8 +35,9 @@ class ChangeOsUserPasswordForm(PasswordModelFormMixin, forms.ModelForm): self.helper = FormHelper() super(ChangeOsUserPasswordForm, self).__init__(*args, **kwargs) self.helper.form_action = reverse( - 'set_osuser_password', kwargs={'slug': self.instance.username}) - self.helper.add_input(Submit('submit', _('Set password'))) + "set_osuser_password", kwargs={"slug": self.instance.username} + ) + self.helper.add_input(Submit("submit", _("Set password"))) def save(self, commit=True): """ @@ -48,7 +48,7 @@ class ChangeOsUserPasswordForm(PasswordModelFormMixin, forms.ModelForm): :rtype: :py:class:`osusers.models.User` """ - self.instance.set_password(self.cleaned_data['password1']) + self.instance.set_password(self.cleaned_data["password1"]) return super(ChangeOsUserPasswordForm, self).save(commit=commit) @@ -58,41 +58,45 @@ class AddSshPublicKeyForm(forms.ModelForm): `. """ + publickeytext = forms.CharField( - label=_('Key text'), widget=forms.Textarea, - help_text=_('A SSH public key in either OpenSSH or RFC 4716 format')) + label=_("Key text"), + widget=forms.Textarea, + help_text=_("A SSH public key in either OpenSSH or RFC 4716 format"), + ) class Meta: model = SshPublicKey fields = [] def __init__(self, *args, **kwargs): - hosting_package = kwargs.pop('hostingpackage') + hosting_package = kwargs.pop("hostingpackage") self.osuser = hosting_package.osuser super(AddSshPublicKeyForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_action = reverse( - 'add_ssh_key', kwargs={'package': hosting_package.id}) - self.helper.add_input(Submit('submit', _('Add SSH public key'))) + "add_ssh_key", kwargs={"package": hosting_package.id} + ) + self.helper.add_input(Submit("submit", _("Add SSH public key"))) def clean_publickeytext(self): - keytext = self.cleaned_data.get('publickeytext') + keytext = self.cleaned_data.get("publickeytext") try: - SshPublicKey.objects.parse_keytext(keytext) + SshPublicKey.objects.parse_key_text(keytext) except ValueError: raise forms.ValidationError(INVALID_SSH_PUBLIC_KEY) return keytext def clean(self): - keytext = self.cleaned_data.get('publickeytext') + keytext = self.cleaned_data.get("publickeytext") if keytext is not None: - alg, data, comment = SshPublicKey.objects.parse_keytext(keytext) + alg, data, comment = SshPublicKey.objects.parse_key_text(keytext) if SshPublicKey.objects.filter( user=self.osuser, algorithm=alg, data=data ).exists(): self.add_error( - 'publickeytext', - forms.ValidationError(DUPLICATE_SSH_PUBLIC_KEY_FOR_USER) + "publickeytext", + forms.ValidationError(DUPLICATE_SSH_PUBLIC_KEY_FOR_USER), ) def save(self, commit=True): @@ -104,8 +108,9 @@ class AddSshPublicKeyForm(forms.ModelForm): :rtype: :py:class:`osusers.models.SshPublicKey` """ - algorithm, keydata, comment = SshPublicKey.objects.parse_keytext( - self.cleaned_data.get('publickeytext')) + algorithm, keydata, comment = SshPublicKey.objects.parse_key_text( + self.cleaned_data.get("publickeytext") + ) self.instance.user = self.osuser self.instance.algorithm = algorithm self.instance.data = keydata @@ -119,17 +124,19 @@ class EditSshPublicKeyCommentForm(forms.ModelForm): ` comment fields. """ + class Meta: model = SshPublicKey - fields = ['comment'] + fields = ["comment"] def __init__(self, *args, **kwargs): - hosting_package = kwargs.pop('hostingpackage') + hosting_package = kwargs.pop("hostingpackage") self.osuser = hosting_package.osuser super(EditSshPublicKeyCommentForm, self).__init__(*args, **kwargs) - self.fields['comment'].widget = forms.TextInput() + self.fields["comment"].widget = forms.TextInput() self.helper = FormHelper() self.helper.form_action = reverse( - 'edit_ssh_key_comment', - kwargs={'package': hosting_package.id, 'pk': self.instance.id}) - self.helper.add_input(Submit('submit', _('Change Comment'))) + "edit_ssh_key_comment", + kwargs={"package": hosting_package.id, "pk": self.instance.id}, + ) + self.helper.add_input(Submit("submit", _("Change Comment"))) diff --git a/gnuviechadmin/osusers/models.py b/gnuviechadmin/osusers/models.py index 197c669..14d36ff 100644 --- a/gnuviechadmin/osusers/models.py +++ b/gnuviechadmin/osusers/models.py @@ -2,20 +2,16 @@ This module defines the database models of operating system users. """ -from __future__ import unicode_literals - import base64 from datetime import date import logging import os -import six from django.db import models, transaction from django.conf import settings from django.core.exceptions import ValidationError from django.dispatch import Signal from django.utils import timezone -from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext as _ from model_utils.models import TimeStampedModel @@ -27,11 +23,10 @@ from passlib.utils import generate_password _LOGGER = logging.getLogger(__name__) -password_set = Signal(providing_args=['instance', 'password']) +password_set = Signal(providing_args=["instance", "password"]) -CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL = _( - "You can not use a user's primary group.") +CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL = _("You can not use a user's primary group.") class GroupManager(models.Manager): @@ -48,34 +43,31 @@ class GroupManager(models.Manager): :rtype: int """ - q = self.aggregate(models.Max('gid')) - if q['gid__max'] is None: + q = self.aggregate(models.Max("gid")) + if q["gid__max"] is None: return settings.OSUSER_MINGID - return max(settings.OSUSER_MINGID, q['gid__max'] + 1) + return max(settings.OSUSER_MINGID, q["gid__max"] + 1) -@python_2_unicode_compatible class Group(TimeStampedModel, models.Model): """ This entity class corresponds to an operating system group. """ - groupname = models.CharField( - _('Group name'), max_length=16, unique=True) - gid = models.PositiveSmallIntegerField( - _('Group ID'), unique=True, primary_key=True) - descr = models.TextField(_('Description'), blank=True) - passwd = models.CharField( - _('Group password'), max_length=128, blank=True) + + groupname = models.CharField(_("Group name"), max_length=16, unique=True) + gid = models.PositiveSmallIntegerField(_("Group ID"), unique=True, primary_key=True) + descr = models.TextField(_("Description"), blank=True) + passwd = models.CharField(_("Group password"), max_length=128, blank=True) objects = GroupManager() class Meta: - verbose_name = _('Group') - verbose_name_plural = _('Groups') + verbose_name = _("Group") + verbose_name_plural = _("Groups") def __str__(self): - return '{0} ({1})'.format(self.groupname, self.gid) + return "{0} ({1})".format(self.groupname, self.gid) @transaction.atomic def save(self, *args, **kwargs): @@ -122,10 +114,10 @@ class UserManager(models.Manager): :rtype: int """ - q = self.aggregate(models.Max('uid')) - if q['uid__max'] is None: + q = self.aggregate(models.Max("uid")) + if q["uid__max"] is None: return settings.OSUSER_MINUID - return max(settings.OSUSER_MINUID, q['uid__max'] + 1) + return max(settings.OSUSER_MINUID, q["uid__max"] + 1) def get_next_username(self): """ @@ -137,23 +129,21 @@ class UserManager(models.Manager): """ count = 1 usernameformat = "{0}{1:02d}" - nextuser = usernameformat.format(settings.OSUSER_USERNAME_PREFIX, - count) - for user in self.values('username').filter( - username__startswith=settings.OSUSER_USERNAME_PREFIX - ).order_by('username'): - if user['username'] == nextuser: + nextuser = usernameformat.format(settings.OSUSER_USERNAME_PREFIX, count) + for user in ( + self.values("username") + .filter(username__startswith=settings.OSUSER_USERNAME_PREFIX) + .order_by("username") + ): + if user["username"] == nextuser: count += 1 - nextuser = usernameformat.format( - settings.OSUSER_USERNAME_PREFIX, count) + nextuser = usernameformat.format(settings.OSUSER_USERNAME_PREFIX, count) else: break return nextuser @transaction.atomic - def create_user( - self, customer, username=None, password=None, commit=False - ): + def create_user(self, customer, username=None, password=None, commit=False): """ Create a new user with a primary group named the same as the user and an initial password. @@ -179,41 +169,42 @@ class UserManager(models.Manager): password = generate_password() homedir = os.path.join(settings.OSUSER_HOME_BASEPATH, username) group = Group.objects.create(groupname=username, gid=gid) - user = self.create(username=username, group=group, uid=uid, - homedir=homedir, customer=customer, - shell=settings.OSUSER_DEFAULT_SHELL) + user = self.create( + username=username, + group=group, + uid=uid, + homedir=homedir, + customer=customer, + shell=settings.OSUSER_DEFAULT_SHELL, + ) user.set_password(password) if commit: user.save() return user -@python_2_unicode_compatible class User(TimeStampedModel, models.Model): """ This entity class corresponds to an operating system user. """ - username = models.CharField( - _('User name'), max_length=64, unique=True) - uid = models.PositiveSmallIntegerField( - _('User ID'), unique=True, primary_key=True) - group = models.ForeignKey( - Group, verbose_name=_('Group'), on_delete=models.CASCADE) - gecos = models.CharField(_('Gecos field'), max_length=128, blank=True) - homedir = models.CharField(_('Home directory'), max_length=256) - shell = models.CharField(_('Login shell'), max_length=64) - customer = models.ForeignKey( - settings.AUTH_USER_MODEL, on_delete=models.CASCADE) + + username = models.CharField(_("User name"), max_length=64, unique=True) + uid = models.PositiveSmallIntegerField(_("User ID"), unique=True, primary_key=True) + group = models.ForeignKey(Group, verbose_name=_("Group"), on_delete=models.CASCADE) + gecos = models.CharField(_("Gecos field"), max_length=128, blank=True) + homedir = models.CharField(_("Home directory"), max_length=256) + shell = models.CharField(_("Login shell"), max_length=64) + customer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) objects = UserManager() class Meta: - verbose_name = _('User') - verbose_name_plural = _('Users') + verbose_name = _("User") + verbose_name_plural = _("Users") def __str__(self): - return '{0} ({1})'.format(self.username, self.uid) + return "{0} ({1})".format(self.username, self.uid) @transaction.atomic def set_password(self, password): @@ -226,17 +217,15 @@ class User(TimeStampedModel, models.Model): :param str password: the new password """ - if hasattr(self, 'shadow'): + if hasattr(self, "shadow"): self.shadow.set_password(password) else: - self.shadow = Shadow.objects.create_shadow( - user=self, password=password - ) - password_set.send( - sender=self.__class__, password=password, instance=self) + self.shadow = Shadow.objects.create_shadow(user=self, password=password) + password_set.send(sender=self.__class__, password=password, instance=self) return True def is_sftp_user(self): + # noinspection PyUnresolvedReferences return self.additionalgroup_set.filter( group__groupname=settings.OSUSER_SFTP_GROUP ).exists() @@ -269,6 +258,7 @@ class User(TimeStampedModel, models.Model): :py:meth:`django.db.Model.delete` """ + # noinspection PyUnresolvedReferences self.group.delete() super(User, self).delete(*args, **kwargs) @@ -293,64 +283,84 @@ class ShadowManager(models.Manager): """ changedays = (timezone.now().date() - date(1970, 1, 1)).days shadow = self.create( - user=user, changedays=changedays, - minage=0, maxage=None, gracedays=7, - inactdays=30, expiredays=None + user=user, + changedays=changedays, + minage=0, + maxage=None, + gracedays=7, + inactdays=30, + expiredays=None, ) shadow.set_password(password) shadow.save() return shadow -@python_2_unicode_compatible class Shadow(TimeStampedModel, models.Model): """ This entity class corresponds to an operating system user's shadow file entry. """ + user = models.OneToOneField( - User, primary_key=True, verbose_name=_('User'), - on_delete=models.CASCADE) - passwd = models.CharField(_('Encrypted password'), max_length=128) + User, primary_key=True, verbose_name=_("User"), on_delete=models.CASCADE + ) + passwd = models.CharField(_("Encrypted password"), max_length=128) changedays = models.PositiveSmallIntegerField( - _('Date of last change'), - help_text=_('This is expressed in days since Jan 1, 1970'), - blank=True, null=True) + _("Date of last change"), + help_text=_("This is expressed in days since Jan 1, 1970"), + blank=True, + null=True, + ) minage = models.PositiveSmallIntegerField( - _('Minimum age'), - help_text=_('Minimum number of days before the password can be' - ' changed'), - blank=True, null=True) + _("Minimum age"), + help_text=_("Minimum number of days before the password can be" " changed"), + blank=True, + null=True, + ) maxage = models.PositiveSmallIntegerField( - _('Maximum age'), - help_text=_('Maximum number of days after which the password has to' - ' be changed'), - blank=True, null=True) + _("Maximum age"), + help_text=_( + "Maximum number of days after which the password has to" " be changed" + ), + blank=True, + null=True, + ) gracedays = models.PositiveSmallIntegerField( - _('Grace period'), - help_text=_('The number of days before the password is going to' - ' expire'), - blank=True, null=True) + _("Grace period"), + help_text=_("The number of days before the password is going to" " expire"), + blank=True, + null=True, + ) inactdays = models.PositiveSmallIntegerField( - _('Inactivity period'), - help_text=_('The number of days after the password has expired during' - ' which the password should still be accepted'), - blank=True, null=True) + _("Inactivity period"), + help_text=_( + "The number of days after the password has expired during" + " which the password should still be accepted" + ), + blank=True, + null=True, + ) expiredays = models.PositiveSmallIntegerField( - _('Account expiration date'), - help_text=_('The date of expiration of the account, expressed as' - ' number of days since Jan 1, 1970'), - blank=True, null=True, default=None) + _("Account expiration date"), + help_text=_( + "The date of expiration of the account, expressed as" + " number of days since Jan 1, 1970" + ), + blank=True, + null=True, + default=None, + ) objects = ShadowManager() class Meta: - verbose_name = _('Shadow password') - verbose_name_plural = _('Shadow passwords') + verbose_name = _("Shadow password") + verbose_name_plural = _("Shadow passwords") def __str__(self): - return 'for user {0}'.format(self.user) + return "for user {0}".format(self.user) def set_password(self, password): """ @@ -361,23 +371,23 @@ class Shadow(TimeStampedModel, models.Model): self.passwd = sha512_crypt.encrypt(password) -@python_2_unicode_compatible class AdditionalGroup(TimeStampedModel, models.Model): """ This entity class corresponds to additional group assignments for an :py:class:`operating system user `. """ + user = models.ForeignKey(User, on_delete=models.CASCADE) group = models.ForeignKey(Group, on_delete=models.CASCADE) class Meta: - unique_together = ('user', 'group') - verbose_name = _('Additional group') - verbose_name_plural = _('Additional groups') + unique_together = ("user", "group") + verbose_name = _("Additional group") + verbose_name_plural = _("Additional groups") def __str__(self): - return '{0} in {1}'.format(self.user, self.group) + return "{0} in {1}".format(self.user, self.group) def clean(self): """ @@ -385,6 +395,7 @@ class AdditionalGroup(TimeStampedModel, models.Model): group. """ + # noinspection PyUnresolvedReferences if self.user.group == self.group: raise ValidationError(CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL) @@ -423,60 +434,62 @@ class SshPublicKeyManager(models.Manager): """ - def parse_keytext(self, keytext): + def parse_key_text(self, key_text: str): """ Parse a SSH public key in OpenSSH or :rfc:`4716` format into its components algorithm, key data and comment. - :param str keytext: key text + :param str key_text: key text :return: triple of algorithm name, key data and comment :rtype: triple of str """ - if keytext.startswith('---- BEGIN SSH2 PUBLIC KEY ----'): - comment = '' - data = '' - continued = '' + if key_text.startswith("---- BEGIN SSH2 PUBLIC KEY ----"): + comment = "" + data = "" + continued = "" headers = {} - for line in keytext.splitlines(): - if line == '---- BEGIN SSH2 PUBLIC KEY ----': + header_tag = None + for line in key_text.splitlines(): + if line == "---- BEGIN SSH2 PUBLIC KEY ----": continue - elif ':' in line: # a header line + elif ":" in line: # a header line header_tag, header_value = [ - item.strip() for item in line.split(':', 1)] - if header_value.endswith('\\'): + item.strip() for item in line.split(":", 1) + ] + if header_value.endswith("\\"): continued = header_value[:-1] else: headers[header_tag.lower()] = header_value elif continued: - if line.endswith('\\'): + if line.endswith("\\"): continued += line[:-1] continue header_value = continued + line headers[header_tag.lower()] = header_value - continued = '' - elif line == '---- END SSH2 PUBLIC KEY ----': + continued = "" + elif line == "---- END SSH2 PUBLIC KEY ----": break elif line: # ignore empty lines data += line - if 'comment' in headers: - comment = headers['comment'] + if "comment" in headers: + comment = headers["comment"] else: - parts = keytext.split(None, 2) + parts = key_text.split(None, 2) if len(parts) < 2: - raise ValueError('invalid SSH public key') + raise ValueError("invalid SSH public key") data = parts[1] comment = len(parts) == 3 and parts[2] or "" try: keybytes = base64.b64decode(data) except TypeError: - raise ValueError('invalid SSH public key') - parts = keybytes.split(b'\x00' * 3) + raise ValueError("invalid SSH public key") + parts = keybytes.split(b"\x00" * 3) if len(parts) < 2: - raise ValueError('invalid SSH public key') - alglength = six.byte2int(parts[1]) - algname = parts[1][1:1+alglength] - return algname, data, comment + raise ValueError("invalid SSH public key") + key_length = int.from_bytes(parts[1], byteorder="big") + key_algorithm = parts[1][1 : 1 + key_length].decode("utf-8") + return key_algorithm, data, comment def create_ssh_public_key(self, user, keytext): """ @@ -490,31 +503,28 @@ class SshPublicKeyManager(models.Manager): :retype: :py:class:`osusers.models.SshPublicKey` """ - algorithm, data, comment = self.parse_keytext(keytext) - return self.create( - user=user, algorithm=algorithm, data=data, comment=comment) + algorithm, data, comment = self.parse_key_text(keytext) + return self.create(user=user, algorithm=algorithm, data=data, comment=comment) -@python_2_unicode_compatible class SshPublicKey(TimeStampedModel): """ This entity class represents single SSH keys for an :py:class:`operating system user `. """ - user = models.ForeignKey( - User, verbose_name=_('User'), on_delete=models.CASCADE) - algorithm = models.CharField(_('Algorithm'), max_length=20) - data = models.TextField(_('Key bytes'), - help_text=_('Base64 encoded key bytes')) - comment = models.TextField(_('Comment'), blank=True) + + user = models.ForeignKey(User, verbose_name=_("User"), on_delete=models.CASCADE) + algorithm = models.CharField(_("Algorithm"), max_length=20) + data = models.TextField(_("Key bytes"), help_text=_("Base64 encoded key bytes")) + comment = models.TextField(_("Comment"), blank=True) objects = SshPublicKeyManager() class Meta: - verbose_name = _('SSH public key') - verbose_name_plural = _('SSH public keys') - unique_together = [('user', 'algorithm', 'data')] + verbose_name = _("SSH public key") + verbose_name_plural = _("SSH public keys") + unique_together = [("user", "algorithm", "data")] def __str__(self): return "{algorithm} {data} {comment}".format( diff --git a/gnuviechadmin/osusers/tests/test_admin.py b/gnuviechadmin/osusers/tests/test_admin.py index 3ab2be9..1f2e7f3 100644 --- a/gnuviechadmin/osusers/tests/test_admin.py +++ b/gnuviechadmin/osusers/tests/test_admin.py @@ -5,17 +5,10 @@ from django.test.utils import override_settings from django.contrib.auth import get_user_model -from mock import MagicMock, Mock, patch +from unittest.mock import MagicMock, Mock, patch -from osusers.forms import ( - INVALID_SSH_PUBLIC_KEY, - DUPLICATE_SSH_PUBLIC_KEY_FOR_USER, -) -from osusers.models import ( - Group, - SshPublicKey, - User, -) +from osusers.forms import INVALID_SSH_PUBLIC_KEY, DUPLICATE_SSH_PUBLIC_KEY_FOR_USER +from osusers.models import Group, SshPublicKey, User from osusers.admin import ( GroupAdmin, PASSWORD_MISMATCH_ERROR, @@ -30,20 +23,19 @@ Customer = get_user_model() class CustomerTestCase(TestCase): def setUp(self): - self.customer = Customer.objects.create_user('test') + self.customer = Customer.objects.create_user("test") super(CustomerTestCase, self).setUp() class UserCreationFormTest(CustomerTestCase): - def test_clean_password2_same(self): form = UserCreationForm() form.cleaned_data = { - 'customer': self.customer, - 'password1': 'secret', - 'password2': 'secret' + "customer": self.customer, + "password1": "secret", + "password2": "secret", } - self.assertEqual(form.clean_password2(), 'secret') + self.assertEqual(form.clean_password2(), "secret") def test_clean_password2_empty(self): form = UserCreationForm() @@ -53,25 +45,23 @@ class UserCreationFormTest(CustomerTestCase): def test_clean_password2_mismatch(self): form = UserCreationForm() form.cleaned_data = { - 'customer': self.customer, - 'password1': 'secretx', - 'password2': 'secrety' + "customer": self.customer, + "password1": "secretx", + "password2": "secrety", } with self.assertRaises(forms.ValidationError) as cm: form.clean_password2() self.assertEqual(cm.exception.message, PASSWORD_MISMATCH_ERROR) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_save_commit(self): form = UserCreationForm() form.cleaned_data = { - 'customer': self.customer, - 'password1': 'secret', - 'password2': 'secret' + "customer": self.customer, + "password1": "secret", + "password2": "secret", } user = form.save() self.assertIsNotNone(user) @@ -89,121 +79,99 @@ class UserAdminTest(CustomerTestCase): super(UserAdminTest, self).setUp() def test_get_form_without_object(self): - form = self.uadmin.get_form(Mock(name='request')) - self.assertEqual( - form.Meta.fields, - ['customer', 'password1', 'password2'] - ) + form = self.uadmin.get_form(Mock(name="request")) + self.assertEqual(form.Meta.fields, ["customer", "password1", "password2"]) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_get_form_with_object(self): user = User.objects.create_user(customer=self.customer) - form = self.uadmin.get_form(Mock(name='request'), user) + form = self.uadmin.get_form(Mock(name="request"), user) self.assertEqual( form.Meta.fields, - ['username', 'group', 'gecos', 'homedir', 'shell', 'customer', - 'uid'] + ["username", "group", "gecos", "homedir", "shell", "customer", "uid"], ) def test_get_inline_instances_without_object(self): - inlines = self.uadmin.get_inline_instances(Mock(name='request')) + inlines = self.uadmin.get_inline_instances(Mock(name="request")) self.assertEqual(len(inlines), 2) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_get_inline_instances_with_object(self): user = User.objects.create_user(customer=self.customer) - inlines = self.uadmin.get_inline_instances( - Mock(name='request'), user) + inlines = self.uadmin.get_inline_instances(Mock(name="request"), user) self.assertEqual(len(inlines), len(UserAdmin.inlines)) for index in range(len(inlines)): self.assertIsInstance(inlines[index], UserAdmin.inlines[index]) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_perform_delete_selected(self): user = User.objects.create_user(customer=self.customer) self.uadmin.perform_delete_selected( - Mock(name='request'), User.objects.filter(uid=user.uid)) + Mock(name="request"), User.objects.filter(uid=user.uid) + ) self.assertEqual(User.objects.filter(uid=user.uid).count(), 0) def test_get_actions(self): - requestmock = MagicMock(name='request') - self.assertNotIn( - 'delete_selected', - self.uadmin.get_actions(requestmock)) - self.assertIn( - 'perform_delete_selected', - self.uadmin.get_actions(requestmock)) + requestmock = MagicMock(name="request") + self.assertNotIn("delete_selected", self.uadmin.get_actions(requestmock)) + self.assertIn("perform_delete_selected", self.uadmin.get_actions(requestmock)) class GroupAdminTest(TestCase): - def setUp(self): site = AdminSite() self.gadmin = GroupAdmin(Group, site) super(GroupAdminTest, self).setUp() def test_get_inline_instances_without_object(self): - inlines = self.gadmin.get_inline_instances(Mock(name='request')) + inlines = self.gadmin.get_inline_instances(Mock(name="request")) self.assertEqual(inlines, []) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) def test_get_inline_instances_with_object(self): - group = Group.objects.create(gid=1000, groupname='test') - inlines = self.gadmin.get_inline_instances( - Mock(name='request'), group) + group = Group.objects.create(gid=1000, groupname="test") + inlines = self.gadmin.get_inline_instances(Mock(name="request"), group) self.assertEqual(len(inlines), len(GroupAdmin.inlines)) for index in range(len(inlines)): self.assertIsInstance(inlines[index], GroupAdmin.inlines[index]) def test_perform_delete_selected(self): - group = Group.objects.create(gid=1000, groupname='test') + group = Group.objects.create(gid=1000, groupname="test") self.gadmin.perform_delete_selected( - Mock(name='request'), Group.objects.filter(gid=group.gid)) + Mock(name="request"), Group.objects.filter(gid=group.gid) + ) self.assertEqual(Group.objects.filter(gid=group.gid).count(), 0) def test_get_actions(self): - requestmock = MagicMock(name='request') - self.assertNotIn( - 'delete_selected', - self.gadmin.get_actions(requestmock)) - self.assertIn( - 'perform_delete_selected', - self.gadmin.get_actions(requestmock)) + requestmock = MagicMock(name="request") + self.assertNotIn("delete_selected", self.gadmin.get_actions(requestmock)) + self.assertIn("perform_delete_selected", self.gadmin.get_actions(requestmock)) class SshPublicKeyCreationFormTest(CustomerTestCase): - - @patch('osusers.admin.SshPublicKey.objects') + @patch("osusers.admin.SshPublicKey.objects") def test_clean_publickeytext_valid_key(self, sshpkmanager): form = SshPublicKeyCreationForm() - sshpkmanager.parse_keytext = MagicMock(side_effect=ValueError) - form.cleaned_data = {'publickeytext': 'wrongkey'} + sshpkmanager.parse_key_text = MagicMock(side_effect=ValueError) + form.cleaned_data = {"publickeytext": "wrongkey"} with self.assertRaises(forms.ValidationError) as ve: form.clean_publickeytext() self.assertEqual(ve.exception.message, INVALID_SSH_PUBLIC_KEY) - @patch('osusers.admin.SshPublicKey.objects') + @patch("osusers.admin.SshPublicKey.objects") def test_clean_publickeytext_invalid_key(self, sshpkmanager): form = SshPublicKeyCreationForm() - sshpkmanager.parse_keytext = MagicMock(return_value='goodkey') - form.cleaned_data = {'publickeytext': 'goodkey'} - self.assertEqual(form.clean_publickeytext(), 'goodkey') + sshpkmanager.parse_key_text = MagicMock(return_value="goodkey") + form.cleaned_data = {"publickeytext": "goodkey"} + self.assertEqual(form.clean_publickeytext(), "goodkey") def test_clean_missing_data(self): form = SshPublicKeyCreationForm() @@ -211,95 +179,83 @@ class SshPublicKeyCreationFormTest(CustomerTestCase): form.clean() self.assertEqual(len(form.errors), 0) - @patch('osusers.admin.SshPublicKey.objects.parse_keytext') - def test_clean_once(self, parse_keytext): - parse_keytext.return_value = ('good', 'key', 'comment') + @patch("osusers.admin.SshPublicKey.objects.parse_key_text") + def test_clean_once(self, parse_key_text): + parse_key_text.return_value = ("good", "key", "comment") user = User.objects.create_user(customer=self.customer) form = SshPublicKeyCreationForm() - form.cleaned_data = { - 'user': user, - 'publickeytext': 'good key comment' - } + form.cleaned_data = {"user": user, "publickeytext": "good key comment"} form.clean() self.assertEqual(len(form.errors), 0) - @patch('osusers.admin.SshPublicKey.objects.parse_keytext') - def test_clean_again(self, parse_keytext): - parse_keytext.return_value = ('good', 'key', 'comment') + @patch("osusers.admin.SshPublicKey.objects.parse_key_text") + def test_clean_again(self, parse_key_text): + parse_key_text.return_value = ("good", "key", "comment") user = User.objects.create_user(customer=self.customer) SshPublicKey.objects.create( - user=user, algorithm='good', data='key', comment='comment') + user=user, algorithm="good", data="key", comment="comment" + ) form = SshPublicKeyCreationForm() - form.cleaned_data = { - 'user': user, - 'publickeytext': 'good key comment' - } + form.cleaned_data = {"user": user, "publickeytext": "good key comment"} form.clean() - self.assertIn('publickeytext', form.errors) + self.assertIn("publickeytext", form.errors) self.assertEqual( - form.errors['publickeytext'], - [DUPLICATE_SSH_PUBLIC_KEY_FOR_USER]) + form.errors["publickeytext"], [DUPLICATE_SSH_PUBLIC_KEY_FOR_USER] + ) - @patch('osusers.admin.SshPublicKey.objects.parse_keytext') - def test_save(self, parse_keytext): - parse_keytext.return_value = ('good', 'key', 'comment') + @patch("osusers.admin.SshPublicKey.objects.parse_key_text") + def test_save(self, parse_key_text): + parse_key_text.return_value = ("good", "key", "comment") user = User.objects.create_user(customer=self.customer) form = SshPublicKeyCreationForm() - form.cleaned_data = { - 'user': user, - 'publickeytext': 'good key comment' - } + form.cleaned_data = {"user": user, "publickeytext": "good key comment"} form.instance.user = user form.save() self.assertTrue( - SshPublicKey.objects.filter( - user=user, algorithm='good', data='key')) + SshPublicKey.objects.filter(user=user, algorithm="good", data="key") + ) class SshPublicKeyAdminTest(CustomerTestCase): - def setUp(self): site = AdminSite() self.sadmin = SshPublicKeyAdmin(SshPublicKey, site) super(SshPublicKeyAdminTest, self).setUp() def test_get_form_no_instance(self): - form = self.sadmin.get_form(request=Mock(name='request')) + form = self.sadmin.get_form(request=Mock(name="request")) self.assertEqual(form.Meta.model, SshPublicKey) def test_get_form_with_instance(self): user = User.objects.create_user(customer=self.customer) key = SshPublicKey.objects.create( - user=user, algorithm='good', data='key', comment='comment') - form = self.sadmin.get_form(request=Mock(name='request'), obj=key) + user=user, algorithm="good", data="key", comment="comment" + ) + form = self.sadmin.get_form(request=Mock(name="request"), obj=key) self.assertEqual(form.Meta.model, SshPublicKey) - self.assertEqual( - form.Meta.fields, - ['user', 'comment', 'algorithm', 'data']) + self.assertEqual(form.Meta.fields, ["user", "comment", "algorithm", "data"]) def test_get_readonly_fields_no_instance(self): - readonly_fields = self.sadmin.get_readonly_fields( - request=Mock(name='request')) + readonly_fields = self.sadmin.get_readonly_fields(request=Mock(name="request")) self.assertEqual(readonly_fields, []) def test_get_readonly_fields_with_instance(self): readonly_fields = self.sadmin.get_readonly_fields( - request=Mock(name='request'), obj=Mock()) - self.assertEqual(readonly_fields, ['algorithm', 'data']) + request=Mock(name="request"), obj=Mock() + ) + self.assertEqual(readonly_fields, ["algorithm", "data"]) def test_perform_delete_selected(self): user = User.objects.create_user(customer=self.customer) key = SshPublicKey.objects.create( - user=user, algorithm='good', data='key', comment='comment') + user=user, algorithm="good", data="key", comment="comment" + ) self.sadmin.perform_delete_selected( - Mock(name='request'), SshPublicKey.objects.filter(id=key.id)) + Mock(name="request"), SshPublicKey.objects.filter(id=key.id) + ) self.assertFalse(SshPublicKey.objects.filter(id=key.id).exists()) def test_get_actions(self): - requestmock = MagicMock(name='request') - self.assertNotIn( - 'delete_selected', - self.sadmin.get_actions(requestmock)) - self.assertIn( - 'perform_delete_selected', - self.sadmin.get_actions(requestmock)) + requestmock = MagicMock(name="request") + self.assertNotIn("delete_selected", self.sadmin.get_actions(requestmock)) + self.assertIn("perform_delete_selected", self.sadmin.get_actions(requestmock)) diff --git a/gnuviechadmin/osusers/tests/test_forms.py b/gnuviechadmin/osusers/tests/test_forms.py index c204497..e3c5eb6 100644 --- a/gnuviechadmin/osusers/tests/test_forms.py +++ b/gnuviechadmin/osusers/tests/test_forms.py @@ -2,15 +2,13 @@ This module provides tests for :py:mod:`osusers.forms`. """ -from __future__ import absolute_import, unicode_literals - -from mock import MagicMock, Mock, patch +from unittest.mock import MagicMock, Mock, patch from django import forms -from django.core.urlresolvers import reverse from django.test import TestCase from django.contrib.auth import get_user_model +from django.urls import reverse from passlib.hash import sha512_crypt @@ -34,7 +32,7 @@ class AddSshPublicKeyFormTest(TestCase): """ def _setup_hostingpackage(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer=customer) self.hostingpackage = Mock(id=42, osuser=user) @@ -42,97 +40,92 @@ class AddSshPublicKeyFormTest(TestCase): instance = MagicMock() with self.assertRaises(KeyError) as ke: AddSshPublicKeyForm(instance) - self.assertEqual(ke.exception.args[0], 'hostingpackage') + self.assertEqual(ke.exception.args[0], "hostingpackage") def test_constructor(self): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) - self.assertTrue(hasattr(form, 'osuser')) + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) + self.assertTrue(hasattr(form, "osuser")) self.assertEqual(form.osuser, self.hostingpackage.osuser) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'add_ssh_key', kwargs={'package': self.hostingpackage.id})) - self.assertIn('publickeytext', form.fields) - self.assertEqual(form.helper.inputs[0].name, 'submit') + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("add_ssh_key", kwargs={"package": self.hostingpackage.id}), + ) + self.assertIn("publickeytext", form.fields) + self.assertEqual(form.helper.inputs[0].name, "submit") - @patch('osusers.forms.SshPublicKey.objects.parse_keytext') - def test_clean_publickeytext_invalid(self, parse_keytext): + @patch("osusers.forms.SshPublicKey.objects.parse_key_text") + def test_clean_publickeytext_invalid(self, parse_key_text): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) - form.cleaned_data = {'publickeytext': 'a bad key'} - parse_keytext.side_effect = ValueError + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) + form.cleaned_data = {"publickeytext": "a bad key"} + parse_key_text.side_effect = ValueError with self.assertRaises(forms.ValidationError) as ve: form.clean_publickeytext() self.assertEqual(ve.exception.message, INVALID_SSH_PUBLIC_KEY) - @patch('osusers.forms.SshPublicKey.objects.parse_keytext') - def test_clean_publickeytext_valid(self, parse_keytext): + @patch("osusers.forms.SshPublicKey.objects.parse_key_text") + def test_clean_publickeytext_valid(self, _): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) - form.cleaned_data = {'publickeytext': 'good key comment'} + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) + form.cleaned_data = {"publickeytext": "good key comment"} retval = form.clean_publickeytext() - self.assertEqual(retval, 'good key comment') + self.assertEqual(retval, "good key comment") def test_clean_none(self): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) - form.cleaned_data = {'publickeytext': None} + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) + form.cleaned_data = {"publickeytext": None} form.clean() - self.assertIsNone(form.cleaned_data['publickeytext']) + self.assertIsNone(form.cleaned_data["publickeytext"]) - @patch('osusers.forms.SshPublicKey.objects.parse_keytext') - def test_clean_fresh(self, parse_keytext): + @patch("osusers.forms.SshPublicKey.objects.parse_key_text") + def test_clean_fresh(self, parse_key_text): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) - sshpubkey = 'good key comment' - form.cleaned_data = {'publickeytext': sshpubkey} - parse_keytext.return_value = sshpubkey.split(' ') + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) + sshpubkey = "good key comment" + form.cleaned_data = {"publickeytext": sshpubkey} + parse_key_text.return_value = sshpubkey.split(" ") form.clean() - self.assertEqual( - form.cleaned_data['publickeytext'], 'good key comment') + self.assertEqual(form.cleaned_data["publickeytext"], "good key comment") - @patch('osusers.forms.SshPublicKey.objects.parse_keytext') - def test_clean_duplicate(self, parse_keytext): + @patch("osusers.forms.SshPublicKey.objects.parse_key_text") + def test_clean_duplicate(self, parse_key_text): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) SshPublicKey.objects.create( - user=self.hostingpackage.osuser, algorithm='good', data='key', - comment='comment') - sshpubkey = 'good key comment' - form.cleaned_data = {'publickeytext': sshpubkey} - parse_keytext.return_value = sshpubkey.split(' ') + user=self.hostingpackage.osuser, + algorithm="good", + data="key", + comment="comment", + ) + sshpubkey = "good key comment" + form.cleaned_data = {"publickeytext": sshpubkey} + parse_key_text.return_value = sshpubkey.split(" ") form.clean() - self.assertIn('publickeytext', form.errors) - self.assertIn( - DUPLICATE_SSH_PUBLIC_KEY_FOR_USER, - form.errors['publickeytext']) + self.assertIn("publickeytext", form.errors) + self.assertIn(DUPLICATE_SSH_PUBLIC_KEY_FOR_USER, form.errors["publickeytext"]) - @patch('osusers.admin.SshPublicKey.objects.parse_keytext') - def test_save(self, parse_keytext): + @patch("osusers.admin.SshPublicKey.objects.parse_key_text") + def test_save(self, parse_key_text): self._setup_hostingpackage() instance = MagicMock() - form = AddSshPublicKeyForm( - instance, hostingpackage=self.hostingpackage) - sshpubkey = 'good key comment' - form.cleaned_data = {'publickeytext': sshpubkey} - parse_keytext.return_value = sshpubkey.split(' ') + form = AddSshPublicKeyForm(instance, hostingpackage=self.hostingpackage) + sshpubkey = "good key comment" + form.cleaned_data = {"publickeytext": sshpubkey} + parse_key_text.return_value = sshpubkey.split(" ") retval = form.save() self.assertTrue(isinstance(retval, SshPublicKey)) - self.assertEqual(retval.algorithm, 'good') - self.assertEqual(retval.data, 'key') - self.assertEqual(retval.comment, 'comment') + self.assertEqual(retval.algorithm, "good") + self.assertEqual(retval.data, "key") + self.assertEqual(retval.comment, "comment") class ChangeOsUserPasswordFormTest(TestCase): @@ -142,25 +135,27 @@ class ChangeOsUserPasswordFormTest(TestCase): """ def _setup_user(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") self.user = User.objects.create_user(customer=customer) def test_constructor(self): self._setup_user() form = ChangeOsUserPasswordForm(instance=self.user) - self.assertTrue(hasattr(form, 'instance')) + self.assertTrue(hasattr(form, "instance")) self.assertEqual(form.instance, self.user) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'set_osuser_password', kwargs={'slug': self.user.username})) - self.assertEqual(form.helper.inputs[0].name, 'submit') + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("set_osuser_password", kwargs={"slug": self.user.username}), + ) + self.assertEqual(form.helper.inputs[0].name, "submit") def test_save(self): self._setup_user() form = ChangeOsUserPasswordForm(instance=self.user) - form.cleaned_data = {'password1': 'test'} + form.cleaned_data = {"password1": "test"} user = form.save() - self.assertTrue(sha512_crypt.verify('test', user.shadow.passwd)) + self.assertTrue(sha512_crypt.verify("test", user.shadow.passwd)) class EditSshPublicKeyCommentFormTest(TestCase): @@ -170,7 +165,7 @@ class EditSshPublicKeyCommentFormTest(TestCase): """ def _setup_hostingpackage(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer=customer) self.hostingpackage = Mock(id=42, osuser=user) @@ -178,18 +173,23 @@ class EditSshPublicKeyCommentFormTest(TestCase): instance = MagicMock() with self.assertRaises(KeyError) as ke: EditSshPublicKeyCommentForm(instance) - self.assertEqual(ke.exception.args[0], 'hostingpackage') + self.assertEqual(ke.exception.args[0], "hostingpackage") def test_constructor(self): self._setup_hostingpackage() instance = MagicMock(id=1) form = EditSshPublicKeyCommentForm( - instance=instance, hostingpackage=self.hostingpackage) - self.assertTrue(hasattr(form, 'osuser')) + instance=instance, hostingpackage=self.hostingpackage + ) + self.assertTrue(hasattr(form, "osuser")) self.assertEqual(form.osuser, self.hostingpackage.osuser) - self.assertIn('comment', form.fields) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'edit_ssh_key_comment', - kwargs={'package': self.hostingpackage.id, 'pk': instance.id})) - self.assertEqual(form.helper.inputs[0].name, 'submit') + self.assertIn("comment", form.fields) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse( + "edit_ssh_key_comment", + kwargs={"package": self.hostingpackage.id, "pk": instance.id}, + ), + ) + self.assertEqual(form.helper.inputs[0].name, "submit") diff --git a/gnuviechadmin/osusers/tests/test_models.py b/gnuviechadmin/osusers/tests/test_models.py index 7286683..8e0439a 100644 --- a/gnuviechadmin/osusers/tests/test_models.py +++ b/gnuviechadmin/osusers/tests/test_models.py @@ -1,19 +1,17 @@ # -*- coding: utf-8 -*- -from __future__ import unicode_literals from datetime import date from django.conf import settings +from django.contrib.auth import get_user_model from django.core.exceptions import ValidationError from django.test import TestCase from django.test.utils import override_settings from django.utils import timezone -from django.contrib.auth import get_user_model - from passlib.hash import sha512_crypt from osusers.models import ( - CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL, AdditionalGroup, + CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL, Group, Shadow, SshPublicKey, @@ -21,7 +19,6 @@ from osusers.models import ( ) from taskresults.models import TaskResult - EXAMPLE_KEY_1_RFC4716 = """---- BEGIN SSH2 PUBLIC KEY ---- Comment: "1024-bit RSA, converted from OpenSSH by me@example.com" x-command: /home/me/bin/lock-in-guest.sh @@ -57,12 +54,14 @@ n24VYtYtsMu74qXviYjziVucWKjjKEb11juqnF0GDlB3VVmxHLmxnAz643WK42Z7dLM5 sY29ouezv4Xz2PuMch5VGPP+CDqzCM4loWgV ---- END SSH2 PUBLIC KEY ----""" -EXAMPLE_KEY_4_OPENSSH = "".join(( - "ssh-rsa ", - "AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRb", - "YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ", - "5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=" -)) +EXAMPLE_KEY_4_OPENSSH = "".join( + ( + "ssh-rsa ", + "AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRb", + "YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ", + "5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=", + ) +) EXAMPLE_KEY_5_RFC4716_MULTILINE = """---- BEGIN SSH2 PUBLIC KEY ---- Comment: DSA Public Key \\ @@ -99,10 +98,7 @@ YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ 5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE= ---- END SSH2 PUBLIC KEY ----""" -EXAMPLE_KEY_8_OPENSSH_BROKEN = "".join(( - "ssh-rsa ", - "AschrÖdderöd" -)) +EXAMPLE_KEY_8_OPENSSH_BROKEN = "".join(("ssh-rsa ", "AschrÖdderöd")) EXAMPLE_KEY_9_RFC4716_ONLY_HEADER = "---- BEGIN SSH2 PUBLIC KEY ----" @@ -110,9 +106,7 @@ Customer = get_user_model() @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class TestCaseWithCeleryTasks(TestCase): pass @@ -120,38 +114,44 @@ class TestCaseWithCeleryTasks(TestCase): class AdditionalGroupTest(TestCaseWithCeleryTasks): def setUp(self): - customer = Customer.objects.create(username='test') - self.group1 = Group.objects.create(groupname='test1', gid=1000) + customer = Customer.objects.create(username="test") + self.group1 = Group.objects.create(groupname="test1", gid=1000) self.user = User.objects.create( - customer=customer, username='test', uid=1000, group=self.group1, - homedir='/home/test', shell='/bin/bash') + customer=customer, + username="test", + uid=1000, + group=self.group1, + homedir="/home/test", + shell="/bin/bash", + ) def test_clean_primary_group(self): testsubj = AdditionalGroup(user=self.user, group=self.group1) with self.assertRaises(ValidationError) as cm: testsubj.clean() - self.assertEqual( - cm.exception.message, CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL) + self.assertEqual(cm.exception.message, CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL) def test_clean_other_group(self): - group2 = Group.objects.create(groupname='test2', gid=1001) + group2 = Group.objects.create(groupname="test2", gid=1001) testsubj = AdditionalGroup(user=self.user, group=group2) testsubj.clean() def test_save(self): - group2 = Group.objects.create(groupname='test2', gid=1001) + group2 = Group.objects.create(groupname="test2", gid=1001) addgroup = AdditionalGroup(user=self.user, group=group2) addgroup.save() taskres = TaskResult.objects.all() self.assertTrue(len(taskres), 4) creators = [r.creator for r in taskres] for tcount, tcreator in [ - (2, 'handle_group_created'), (1, 'handle_user_created'), - (1, 'handle_user_added_to_group')]: + (2, "handle_group_created"), + (1, "handle_user_created"), + (1, "handle_user_added_to_group"), + ]: self.assertEqual(creators.count(tcreator), tcount) def test_save_again(self): - group2 = Group.objects.create(groupname='test2', gid=1001) + group2 = Group.objects.create(groupname="test2", gid=1001) TaskResult.objects.all().delete() addgroup = AdditionalGroup(user=self.user, group=group2) addgroup.save() @@ -161,15 +161,18 @@ class AdditionalGroupTest(TestCaseWithCeleryTasks): self.assertEqual(len(taskres), 0) def test_delete(self): - group2 = Group.objects.create(groupname='test2', gid=1001) + group2 = Group.objects.create(groupname="test2", gid=1001) + # noinspection PyUnresolvedReferences addgroup = AdditionalGroup.objects.create(user=self.user, group=group2) addgroup.delete() + # noinspection PyUnresolvedReferences self.assertEqual(len(AdditionalGroup.objects.all()), 0) def test___str__(self): - group2 = Group.objects.create(groupname='test2', gid=1001) + group2 = Group.objects.create(groupname="test2", gid=1001) + # noinspection PyUnresolvedReferences addgroup = AdditionalGroup.objects.create(user=self.user, group=group2) - self.assertEqual(str(addgroup), 'test (1000) in test2 (1001)') + self.assertEqual(str(addgroup), "test (1000) in test2 (1001)") @override_settings(OSUSER_MINGID=10000) @@ -178,56 +181,61 @@ class GroupManagerTest(TestCaseWithCeleryTasks): self.assertEqual(Group.objects.get_next_gid(), 10000) def test_get_next_gid_second(self): - Group.objects.create(gid=10010, groupname='test') + Group.objects.create(gid=10010, groupname="test") self.assertEqual(Group.objects.get_next_gid(), 10011) class GroupTest(TestCaseWithCeleryTasks): def test___str__(self): - group = Group.objects.create(gid=10000, groupname='test') - self.assertEqual(str(group), 'test (10000)') + group = Group.objects.create(gid=10000, groupname="test") + self.assertEqual(str(group), "test (10000)") def test_save(self): - group = Group(gid=10000, groupname='test') + group = Group(gid=10000, groupname="test") self.assertIs(group.save(), group) taskres = TaskResult.objects.all() self.assertTrue(len(taskres), 1) creators = [r.creator for r in taskres] - for tcount, tcreator in [ - (1, 'handle_group_created')]: + for tcount, tcreator in [(1, "handle_group_created")]: self.assertEqual(creators.count(tcreator), tcount) def test_save_again(self): - group = Group.objects.create(gid=10000, groupname='test') - taskres = TaskResult.objects.all().delete() + group = Group.objects.create(gid=10000, groupname="test") + TaskResult.objects.all().delete() group.save() taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 0) def test_delete(self): - group = Group.objects.create(gid=10000, groupname='test') + group = Group.objects.create(gid=10000, groupname="test") self.assertEqual(len(Group.objects.all()), 1) group.delete() self.assertEqual(len(Group.objects.all()), 0) self.assertEqual(len(TaskResult.objects.all()), 2) tr = TaskResult.objects.first() - self.assertEqual(tr.creator, 'handle_group_created') + self.assertEqual(tr.creator, "handle_group_created") class ShadowManagerTest(TestCaseWithCeleryTasks): def setUp(self): - self.customer = Customer.objects.create(username='test') + self.customer = Customer.objects.create(username="test") super(ShadowManagerTest, self).setUp() def test_create_shadow(self): - user = User( - customer=self.customer, username='test', uid=1000, - group=Group(gid=1000, groupname='test'), homedir='/home/test', - shell='/bin/fooshell') - shadow = Shadow.objects.create_shadow(user, 'test') - self.assertTrue(sha512_crypt.verify('test', shadow.passwd)) - self.assertEqual(shadow.changedays, - (timezone.now().date() - date(1970, 1, 1)).days) + group = Group.objects.create(gid=1000, groupname="test") + user = User.objects.create( + customer=self.customer, + username="test", + uid=1000, + group=group, + homedir="/home/test", + shell="/bin/fooshell", + ) + shadow = Shadow.objects.create_shadow(user, "test") + self.assertTrue(sha512_crypt.verify("test", shadow.passwd)) + self.assertEqual( + shadow.changedays, (timezone.now().date() - date(1970, 1, 1)).days + ) self.assertEqual(shadow.user, user) self.assertEqual(shadow.minage, 0) self.assertIsNone(shadow.maxage) @@ -238,39 +246,50 @@ class ShadowManagerTest(TestCaseWithCeleryTasks): class ShadowTest(TestCaseWithCeleryTasks): def setUp(self): - self.customer = Customer.objects.create(username='test') + self.customer = Customer.objects.create(username="test") super(ShadowTest, self).setUp() def test___str__(self): - group = Group.objects.create( - groupname='test', gid=1000) + group = Group.objects.create(groupname="test", gid=1000) user = User.objects.create( - customer=self.customer, username='test', uid=1000, group=group, - homedir='/home/test', shell='/bin/bash') + customer=self.customer, + username="test", + uid=1000, + group=group, + homedir="/home/test", + shell="/bin/bash", + ) shadow = Shadow(user=user) - self.assertEqual(str(shadow), 'for user test (1000)') + self.assertEqual(str(shadow), "for user test (1000)") def test_set_password(self): - group = Group.objects.create( - groupname='test', gid=1000) + group = Group.objects.create(groupname="test", gid=1000) user = User.objects.create( - customer=self.customer, username='test', uid=1000, group=group, - homedir='/home/test', shell='/bin/bash') + customer=self.customer, + username="test", + uid=1000, + group=group, + homedir="/home/test", + shell="/bin/bash", + ) shadow = Shadow(user=user) - shadow.set_password('test') - self.assertTrue(sha512_crypt.verify('test', shadow.passwd)) + shadow.set_password("test") + self.assertTrue(sha512_crypt.verify("test", shadow.passwd)) @override_settings( - OSUSER_MINUID=10000, OSUSER_MINGID=10000, OSUSER_USERNAME_PREFIX='test', - OSUSER_HOME_BASEPATH='/home', OSUSER_DEFAULT_SHELL='/bin/fooshell' + OSUSER_MINUID=10000, + OSUSER_MINGID=10000, + OSUSER_USERNAME_PREFIX="test", + OSUSER_HOME_BASEPATH="/home", + OSUSER_DEFAULT_SHELL="/bin/fooshell", ) class UserManagerTest(TestCaseWithCeleryTasks): def _create_group(self): - return Group.objects.create(gid=10000, groupname='foo') + return Group.objects.create(gid=10000, groupname="foo") def setUp(self): - self.customer = Customer.objects.create(username='test') + self.customer = Customer.objects.create(username="test") super(UserManagerTest, self).setUp() def test_get_next_uid_first(self): @@ -278,40 +297,58 @@ class UserManagerTest(TestCaseWithCeleryTasks): def test_get_next_uid_second(self): User.objects.create( - customer=self.customer, uid=10010, username='foo', - group=self._create_group(), homedir='/home/foo', - shell='/bin/fooshell') + customer=self.customer, + uid=10010, + username="foo", + group=self._create_group(), + homedir="/home/foo", + shell="/bin/fooshell", + ) self.assertEqual(User.objects.get_next_uid(), 10011) def test_get_next_username_first(self): - self.assertEqual(User.objects.get_next_username(), 'test01') + self.assertEqual(User.objects.get_next_username(), "test01") def test_get_next_username_second(self): User.objects.create( - customer=self.customer, uid=10000, username='test01', - group=self._create_group(), homedir='/home/foo', - shell='/bin/fooshell') - self.assertEqual(User.objects.get_next_username(), 'test02') + customer=self.customer, + uid=10000, + username="test01", + group=self._create_group(), + homedir="/home/foo", + shell="/bin/fooshell", + ) + self.assertEqual(User.objects.get_next_username(), "test02") def test_get_next_username_gaps(self): group = self._create_group() User.objects.create( - customer=self.customer, uid=10000, username='test01', group=group, - homedir='/home/foo', shell='/bin/fooshell') + customer=self.customer, + uid=10000, + username="test01", + group=group, + homedir="/home/foo", + shell="/bin/fooshell", + ) User.objects.create( - customer=self.customer, uid=10002, username='test03', group=group, - homedir='/home/foo', shell='/bin/fooshell') - self.assertEqual(User.objects.get_next_username(), 'test02') + customer=self.customer, + uid=10002, + username="test03", + group=group, + homedir="/home/foo", + shell="/bin/fooshell", + ) + self.assertEqual(User.objects.get_next_username(), "test02") def test_create_user_first(self): user = User.objects.create_user(customer=self.customer) self.assertIsInstance(user, User) self.assertEqual(user.uid, 10000) self.assertEqual(user.group.gid, 10000) - self.assertEqual(user.group.groupname, 'test01') - self.assertEqual(user.username, 'test01') - self.assertEqual(user.homedir, '/home/test01') - self.assertEqual(user.shell, '/bin/fooshell') + self.assertEqual(user.group.groupname, "test01") + self.assertEqual(user.username, "test01") + self.assertEqual(user.homedir, "/home/test01") + self.assertEqual(user.shell, "/bin/fooshell") self.assertIsNotNone(user.shadow) def test_create_user_tasks(self): @@ -320,8 +357,10 @@ class UserManagerTest(TestCaseWithCeleryTasks): self.assertEqual(len(taskres), 3) creators = [r.creator for r in taskres] for creator in [ - 'handle_group_created', 'handle_user_created', - 'handle_user_password_set']: + "handle_group_created", + "handle_user_created", + "handle_user_password_set", + ]: self.assertIn(creator, creators) def test_create_user_second(self): @@ -330,36 +369,34 @@ class UserManagerTest(TestCaseWithCeleryTasks): self.assertIsInstance(user, User) self.assertEqual(user.uid, 10001) self.assertEqual(user.group.gid, 10001) - self.assertEqual(user.group.groupname, 'test02') - self.assertEqual(user.username, 'test02') - self.assertEqual(user.homedir, '/home/test02') - self.assertEqual(user.shell, '/bin/fooshell') + self.assertEqual(user.group.groupname, "test02") + self.assertEqual(user.username, "test02") + self.assertEqual(user.homedir, "/home/test02") + self.assertEqual(user.shell, "/bin/fooshell") self.assertIsNotNone(user.shadow) self.assertEqual(len(User.objects.all()), 2) def test_create_user_known_password(self): - user = User.objects.create_user( - customer=self.customer, password='foobar') + user = User.objects.create_user(customer=self.customer, password="foobar") self.assertIsInstance(user, User) self.assertEqual(user.uid, 10000) self.assertEqual(user.group.gid, 10000) - self.assertEqual(user.group.groupname, 'test01') - self.assertEqual(user.username, 'test01') - self.assertEqual(user.homedir, '/home/test01') - self.assertEqual(user.shell, '/bin/fooshell') + self.assertEqual(user.group.groupname, "test01") + self.assertEqual(user.username, "test01") + self.assertEqual(user.homedir, "/home/test01") + self.assertEqual(user.shell, "/bin/fooshell") self.assertIsNotNone(user.shadow) - self.assertTrue(sha512_crypt.verify('foobar', user.shadow.passwd)) + self.assertTrue(sha512_crypt.verify("foobar", user.shadow.passwd)) def test_create_user_predefined_username(self): - user = User.objects.create_user( - customer=self.customer, username='tester') + user = User.objects.create_user(customer=self.customer, username="tester") self.assertIsInstance(user, User) self.assertEqual(user.uid, 10000) self.assertEqual(user.group.gid, 10000) - self.assertEqual(user.group.groupname, 'tester') - self.assertEqual(user.username, 'tester') - self.assertEqual(user.homedir, '/home/tester') - self.assertEqual(user.shell, '/bin/fooshell') + self.assertEqual(user.group.groupname, "tester") + self.assertEqual(user.username, "tester") + self.assertEqual(user.homedir, "/home/tester") + self.assertEqual(user.shell, "/bin/fooshell") self.assertIsNotNone(user.shadow) def test_create_user_commit(self): @@ -367,31 +404,34 @@ class UserManagerTest(TestCaseWithCeleryTasks): self.assertIsInstance(user, User) self.assertEqual(user.uid, 10000) self.assertEqual(user.group.gid, 10000) - self.assertEqual(user.group.groupname, 'test01') - self.assertEqual(user.username, 'test01') - self.assertEqual(user.homedir, '/home/test01') - self.assertEqual(user.shell, '/bin/fooshell') + self.assertEqual(user.group.groupname, "test01") + self.assertEqual(user.username, "test01") + self.assertEqual(user.homedir, "/home/test01") + self.assertEqual(user.shell, "/bin/fooshell") self.assertIsNotNone(user.shadow) @override_settings( - OSUSER_MINUID=10000, OSUSER_MINGID=10000, OSUSER_USERNAME_PREFIX='test', - OSUSER_HOME_BASEPATH='/home', OSUSER_DEFAULT_SHELL='/bin/fooshell' + OSUSER_MINUID=10000, + OSUSER_MINGID=10000, + OSUSER_USERNAME_PREFIX="test", + OSUSER_HOME_BASEPATH="/home", + OSUSER_DEFAULT_SHELL="/bin/fooshell", ) class UserTest(TestCaseWithCeleryTasks): def setUp(self): - self.customer = Customer.objects.create_user('test') + self.customer = Customer.objects.create_user("test") super(UserTest, self).setUp() def test___str__(self): user = User.objects.create_user(self.customer) - self.assertEqual(str(user), 'test01 (10000)') + self.assertEqual(str(user), "test01 (10000)") def test_set_password(self): user = User.objects.create_user(self.customer) - self.assertFalse(sha512_crypt.verify('test', user.shadow.passwd)) - user.set_password('test') - self.assertTrue(sha512_crypt.verify('test', user.shadow.passwd)) + self.assertFalse(sha512_crypt.verify("test", user.shadow.passwd)) + user.set_password("test") + self.assertTrue(sha512_crypt.verify("test", user.shadow.passwd)) def test_save(self): user = User.objects.create_user(self.customer) @@ -400,8 +440,10 @@ class UserTest(TestCaseWithCeleryTasks): self.assertEqual(len(taskres), 3) creators = [r.creator for r in taskres] for task in [ - 'handle_group_created', 'handle_user_created', - 'handle_user_password_set']: + "handle_group_created", + "handle_user_created", + "handle_user_password_set", + ]: self.assertIn(task, creators) def test_delete_only_user(self): @@ -411,30 +453,38 @@ class UserTest(TestCaseWithCeleryTasks): self.assertEqual(len(taskres), 6) creators = [r.creator for r in taskres] for task in [ - 'handle_group_created', 'handle_user_created', - 'handle_user_password_set', 'handle_user_deleted', - 'handle_group_deleted', 'handle_user_deleted']: + "handle_group_created", + "handle_user_created", + "handle_user_password_set", + "handle_user_deleted", + "handle_group_deleted", + "handle_user_deleted", + ]: self.assertIn(task, creators) self.assertEqual(len(User.objects.all()), 0) def test_delete_additional_groups(self): - group1 = Group.objects.create(gid=2000, groupname='group1') - group2 = Group.objects.create(gid=2001, groupname='group2') + group1 = Group.objects.create(gid=2000, groupname="group1") + group2 = Group.objects.create(gid=2001, groupname="group2") user = User.objects.create_user(self.customer) for group in [group1, group2]: + # noinspection PyUnresolvedReferences user.additionalgroup_set.add( - AdditionalGroup.objects.create(user=user, group=group)) + AdditionalGroup.objects.create(user=user, group=group) + ) TaskResult.objects.all().delete() user.delete() taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 5) creators = [t.creator for t in taskres] for tcount, tcreator in [ - (2, 'handle_user_removed_from_group'), - (2, 'handle_user_deleted'), - (1, 'handle_group_deleted')]: + (2, "handle_user_removed_from_group"), + (2, "handle_user_deleted"), + (1, "handle_group_deleted"), + ]: self.assertEqual(creators.count(tcreator), tcount) self.assertEqual(len(User.objects.all()), 0) + # noinspection PyUnresolvedReferences self.assertEqual(len(AdditionalGroup.objects.all()), 0) def test_is_sftp_user(self): @@ -442,138 +492,140 @@ class UserTest(TestCaseWithCeleryTasks): self.assertFalse(user.is_sftp_user()) sftp_group = Group.objects.create( - gid=2000, groupname=settings.OSUSER_SFTP_GROUP) + gid=2000, groupname=settings.OSUSER_SFTP_GROUP + ) + # noinspection PyUnresolvedReferences user.additionalgroup_set.add( - AdditionalGroup.objects.create(user=user, group=sftp_group)) + AdditionalGroup.objects.create(user=user, group=sftp_group) + ) self.assertTrue(user.is_sftp_user()) class SshPublicKeyManagerTest(TestCaseWithCeleryTasks): def test_parse_keytext_rfc4716_1(self): - res = SshPublicKey.objects.parse_keytext(EXAMPLE_KEY_1_RFC4716) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_1_RFC4716) self.assertEqual(len(res), 3) self.assertGreater(len(res[1]), 40) - self.assertEqual(res[0], 'ssh-rsa') + self.assertEqual(res[0], "ssh-rsa") self.assertEqual( - res[2], '"1024-bit RSA, converted from OpenSSH by me@example.com"') + res[2], '"1024-bit RSA, converted from OpenSSH by me@example.com"' + ) def test_parse_keytext_rfc4716_2(self): - res = SshPublicKey.objects.parse_keytext(EXAMPLE_KEY_2_RFC4716) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_2_RFC4716) self.assertEqual(len(res), 3) - self.assertEqual(res[0], 'ssh-dss') + self.assertEqual(res[0], "ssh-dss") self.assertGreater(len(res[1]), 40) self.assertEqual( - res[2], - "This is my public key for use on servers which I don't like.") + res[2], "This is my public key for use on servers which I don't like." + ) def test_parse_keytext_rfc4716_3(self): - res = SshPublicKey.objects.parse_keytext(EXAMPLE_KEY_3_RFC4716) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_3_RFC4716) self.assertEqual(len(res), 3) - self.assertEqual(res[0], 'ssh-dss') + self.assertEqual(res[0], "ssh-dss") self.assertGreater(len(res[1]), 40) self.assertEqual(res[2], "DSA Public Key for use with MyIsp") def test_parse_keytext_openssh(self): - res = SshPublicKey.objects.parse_keytext(EXAMPLE_KEY_4_OPENSSH) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_4_OPENSSH) self.assertEquals(len(res), 3) - self.assertEqual(res[0], 'ssh-rsa') + self.assertEqual(res[0], "ssh-rsa") self.assertGreater(len(res[1]), 40) - self.assertEqual(res[2], '') + self.assertEqual(res[2], "") def test_parse_keytext_invalid_multiline(self): with self.assertRaises(ValueError): - SshPublicKey.objects.parse_keytext("\r\n".join(["xx"]*10)) + SshPublicKey.objects.parse_key_text("\r\n".join(["xx"] * 10)) def test_parse_keytext_empty_line(self): - res = SshPublicKey.objects.parse_keytext( - EXAMPLE_KEY_6_RFC4716_EMPTY_LINE) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_6_RFC4716_EMPTY_LINE) self.assertEqual(len(res), 3) - self.assertEqual(res[0], 'ssh-dss') + self.assertEqual(res[0], "ssh-dss") self.assertGreater(len(res[1]), 40) self.assertEqual(res[2], "DSA Public Key for use with MyIsp") def test_parse_keytext_invalid_empty_rfc4716_header(self): with self.assertRaises(ValueError): - SshPublicKey.objects.parse_keytext( - EXAMPLE_KEY_9_RFC4716_ONLY_HEADER) + SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_9_RFC4716_ONLY_HEADER) def test_parse_keytext_no_comment(self): - res = SshPublicKey.objects.parse_keytext( - EXAMPLE_KEY_7_NO_COMMENT) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_7_NO_COMMENT) self.assertEqual(len(res), 3) - self.assertEqual(res[0], 'ssh-rsa') + self.assertEqual(res[0], "ssh-rsa") self.assertGreater(len(res[1]), 40) - self.assertEqual(res[2], '') + self.assertEqual(res[2], "") def test_parse_keytext_multiline_comment(self): - res = SshPublicKey.objects.parse_keytext( - EXAMPLE_KEY_5_RFC4716_MULTILINE) + res = SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_5_RFC4716_MULTILINE) self.assertEqual(len(res), 3) - self.assertEqual(res[0], 'ssh-dss') + self.assertEqual(res[0], "ssh-dss") self.assertGreater(len(res[1]), 40) self.assertEqual(res[2], "DSA Public Key for use with MyIsp") def test_parse_keytext_invalid(self): with self.assertRaises(ValueError): - SshPublicKey.objects.parse_keytext('invalid') + SshPublicKey.objects.parse_key_text("invalid") def test_parse_keytext_invalid_openssh(self): with self.assertRaises(ValueError): - SshPublicKey.objects.parse_keytext(EXAMPLE_KEY_8_OPENSSH_BROKEN) + SshPublicKey.objects.parse_key_text(EXAMPLE_KEY_8_OPENSSH_BROKEN) def test_create_ssh_public_key(self): - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") user = User.objects.create_user(customer) - key = SshPublicKey.objects.create_ssh_public_key( - user, EXAMPLE_KEY_4_OPENSSH) + key = SshPublicKey.objects.create_ssh_public_key(user, EXAMPLE_KEY_4_OPENSSH) self.assertIsInstance(key, SshPublicKey) self.assertEqual(key.user, user) - self.assertEqual(key.algorithm, 'ssh-rsa') + self.assertEqual(key.algorithm, "ssh-rsa") self.assertEqual(key.data, EXAMPLE_KEY_4_OPENSSH.split()[1]) - self.assertEqual(key.comment, '') + self.assertEqual(key.comment, "") class SshPublicKeyTest(TestCaseWithCeleryTasks): def setUp(self): super(SshPublicKeyTest, self).setUp() - customer = Customer.objects.create_user('test') + customer = Customer.objects.create_user("test") self.user = User.objects.create_user(customer) TaskResult.objects.all().delete() def test__str__rfc4716(self): res = SshPublicKey.objects.create_ssh_public_key( - self.user, EXAMPLE_KEY_3_RFC4716) + self.user, EXAMPLE_KEY_3_RFC4716 + ) + self.maxDiff = None self.assertEqual( - str(res), 'ssh-dss AAAAB3NzaC1kc3MAAACBAPY8ZOHY2yFSJA6XYC9HRwNHxae' - 'hvx5wOJ0rzZdzoSOXxbETW6ToHv8D1UJ/z+zHo9Fiko5XybZnDIaBDHtblQ+Yp7St' - 'xyltHnXF1YLfKD1G4T6JYrdHYI14Om1eg9e4NnCRleaqoZPF3UGfZia6bXrGTQf3g' - 'Jq2e7Yisk/gF+1VAAAAFQDb8D5cvwHWTZDPfX0D2s9Rd7NBvQAAAIEAlN92+Bb7D4' - 'KLYk3IwRbXblwXdkPggA4pfdtW9vGfJ0/RHd+NjB4eo1D+0dix6tXwYGN7PKS5R/F' - 'XPNwxHPapcj9uL1Jn2AWQ2dsknf+i/FAAvioUPkmdMc0zuWoSOEsSNhVDtX3WdvVc' - 'GcBq9cetzrtOKWOocJmJ80qadxTRHtUAAACBAN7CY+KKv1gHpRzFwdQm7HK9bb1LA' - 'o2KwaoXnadFgeptNBQeSXG1vO+JsvphVMBJc9HSn24VYtYtsMu74qXviYjziVucWK' - 'jjKEb11juqnF0GDlB3VVmxHLmxnAz643WK42Z7dLM5sY29ouezv4Xz2PuMch5VGPP' - '+CDqzCM4loWgV DSA Public Key for use with MyIsp') + str(res), + "ssh-dss AAAAB3NzaC1kc3MAAACBAPY8ZOHY2yFSJA6XYC9HRwNHxae" + "hvx5wOJ0rzZdzoSOXxbETW6ToHv8D1UJ/z+zHo9Fiko5XybZnDIaBDHtblQ+Yp7St" + "xyltHnXF1YLfKD1G4T6JYrdHYI14Om1eg9e4NnCRleaqoZPF3UGfZia6bXrGTQf3g" + "Jq2e7Yisk/gF+1VAAAAFQDb8D5cvwHWTZDPfX0D2s9Rd7NBvQAAAIEAlN92+Bb7D4" + "KLYk3IwRbXblwXdkPggA4pfdtW9vGfJ0/RHd+NjB4eo1D+0dix6tXwYGN7PKS5R/F" + "XPNwxHPapcj9uL1Jn2AWQ2dsknf+i/FAAvioUPkmdMc0zuWoSOEsSNhVDtX3WdvVc" + "GcBq9cetzrtOKWOocJmJ80qadxTRHtUAAACBAN7CY+KKv1gHpRzFwdQm7HK9bb1LA" + "o2KwaoXnadFgeptNBQeSXG1vO+JsvphVMBJc9HSn24VYtYtsMu74qXviYjziVucWK" + "jjKEb11juqnF0GDlB3VVmxHLmxnAz643WK42Z7dLM5sY29ouezv4Xz2PuMch5VGPP" + "+CDqzCM4loWgV DSA Public Key for use with MyIsp", + ) def test__str__openssh(self): res = SshPublicKey.objects.create_ssh_public_key( - self.user, EXAMPLE_KEY_4_OPENSSH) + self.user, EXAMPLE_KEY_4_OPENSSH + ) self.assertEqual(str(res), EXAMPLE_KEY_4_OPENSSH) def test_call_tasks_on_save(self): - SshPublicKey.objects.create_ssh_public_key( - self.user, EXAMPLE_KEY_4_OPENSSH) + SshPublicKey.objects.create_ssh_public_key(self.user, EXAMPLE_KEY_4_OPENSSH) taskresults = TaskResult.objects.all() self.assertEqual(len(taskresults), 1) - self.assertEqual( - taskresults[0].creator, 'handle_ssh_keys_changed') + self.assertEqual(taskresults[0].creator, "handle_ssh_keys_changed") def test_call_tasks_on_delete(self): key = SshPublicKey.objects.create_ssh_public_key( - self.user, EXAMPLE_KEY_4_OPENSSH) + self.user, EXAMPLE_KEY_4_OPENSSH + ) TaskResult.objects.all().delete() key.delete() taskresults = TaskResult.objects.all() self.assertEqual(len(taskresults), 1) - self.assertEqual( - taskresults[0].creator, 'handle_ssh_keys_changed') + self.assertEqual(taskresults[0].creator, "handle_ssh_keys_changed") diff --git a/gnuviechadmin/osusers/tests/test_views.py b/gnuviechadmin/osusers/tests/test_views.py index 401bbdf..7c0d2bb 100644 --- a/gnuviechadmin/osusers/tests/test_views.py +++ b/gnuviechadmin/osusers/tests/test_views.py @@ -2,66 +2,59 @@ This module provides tests for :py:mod:`osusers.views`. """ -from __future__ import absolute_import, unicode_literals -try: - from unittest.mock import patch, MagicMock -except ImportError: - from mock import patch, MagicMock +from unittest.mock import patch, MagicMock -from django.core.urlresolvers import reverse from django.test import TestCase, TransactionTestCase from django.contrib.auth import get_user_model +from django.urls import reverse -from hostingpackages.models import ( - CustomerHostingPackage, - HostingPackageTemplate, -) +from hostingpackages.models import CustomerHostingPackage, HostingPackageTemplate from osusers.models import SshPublicKey -from osusers.views import ( - AddSshPublicKey, - DeleteSshPublicKey, - EditSshPublicKeyComment, -) +from osusers.views import AddSshPublicKey, DeleteSshPublicKey, EditSshPublicKeyComment User = get_user_model() -TEST_USER = 'test' -TEST_PASSWORD = 'secret' -TEST_EMAIL = 'test@example.org' -EXAMPLE_KEY = "".join(( - "ssh-rsa ", - "AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRb", - "YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ", - "5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=" -)) +TEST_USER = "test" +TEST_PASSWORD = "secret" +TEST_EMAIL = "test@example.org" +EXAMPLE_KEY = "".join( + ( + "ssh-rsa ", + "AAAAB3NzaC1yc2EAAAABIwAAAIEA1on8gxCGJJWSRT4uOrR13mUaUk0hRf4RzxSZ1zRb", + "YYFw8pfGesIFoEuVth4HKyF8k1y4mRUnYHP1XNMNMJl1JcEArC2asV8sHf6zSPVffozZ", + "5TT4SfsUu/iKy9lUcCfXzwre4WWZSXXcPff+EHtWshahu3WzBdnGxm5Xoi89zcE=", + ) +) class HostingPackageAwareTestMixin(object): + # noinspection PyMethodMayBeStatic def _setup_hosting_package(self, customer): template = HostingPackageTemplate.objects.create( - name='testpackagetemplate', mailboxcount=10, diskspace=1, - diskspace_unit=0) + name="testpackagetemplate", mailboxcount=10, diskspace=1, diskspace_unit=0 + ) package = CustomerHostingPackage.objects.create_from_template( - customer, template, 'testpackage') - with patch('hostingpackages.models.settings') as hmsettings: + customer, template, "testpackage" + ) + with patch("hostingpackages.models.settings") as hmsettings: hmsettings.OSUSER_DEFAULT_GROUPS = [] package.save() return package class AddSshPublicKeyTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) def _get_url(self): - return reverse('add_ssh_key', kwargs={'package': self.package.id}) + return reverse("add_ssh_key", kwargs={"package": self.package.id}) def test_get_anonymous(self): response = self.client.get(self._get_url()) @@ -73,77 +66,75 @@ class AddSshPublicKeyTest(HostingPackageAwareTestMixin, TestCase): self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertTemplateUsed(response, 'osusers/sshpublickey_create.html') + self.assertTemplateUsed(response, "osusers/sshpublickey_create.html") def test_get_form_kwargs(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = AddSshPublicKey( - request=MagicMock(), kwargs={'package': str(self.package.pk)}) + request=MagicMock(), kwargs={"package": str(self.package.pk)} + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) - self.assertIn('osuser', response.context) - self.assertEqual( - response.context['osuser'], self.package.osuser.username) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) + self.assertIn("osuser", response.context) + self.assertEqual(response.context["osuser"], self.package.osuser.username) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - self._get_url(), - data={'publickeytext': EXAMPLE_KEY}) + self._get_url(), data={"publickeytext": EXAMPLE_KEY} + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - self._get_url(), follow=True, - data={'publickeytext': EXAMPLE_KEY}) - messages = list(response.context['messages']) + self._get_url(), follow=True, data={"publickeytext": EXAMPLE_KEY} + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( - 'Successfully added new ssh-rsa SSH public key.'.format( + "Successfully added new ssh-rsa SSH public key.".format( username=self.package.osuser.username - ), str(messages[0])) + ), + str(messages[0]), + ) class DeleteSshPublicKeyTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) self.sshkey = SshPublicKey.objects.create( - user=self.package.osuser, algorithm='good', data='key', - comment='comment') + user=self.package.osuser, algorithm="good", data="key", comment="comment" + ) def _get_url(self): return reverse( - 'delete_ssh_key', kwargs={ - 'package': self.package.id, - 'pk': self.sshkey.id - }) + "delete_ssh_key", kwargs={"package": self.package.id, "pk": self.sshkey.id} + ) def test_get_anonymous(self): response = self.client.get(self._get_url()) @@ -155,71 +146,63 @@ class DeleteSshPublicKeyTest(HostingPackageAwareTestMixin, TestCase): self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertTemplateUsed( - response, 'osusers/sshpublickey_confirm_delete.html') + self.assertTemplateUsed(response, "osusers/sshpublickey_confirm_delete.html") def test_get_queryset(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = DeleteSshPublicKey( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'pk': str(self.sshkey.pk) - }) + request=MagicMock(), + kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)}, + ) queryset = view.get_queryset() self.assertQuerysetEqual(queryset, [repr(self.sshkey)]) def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - for key in ('hostingpackage', 'customer', 'osuser'): + for key in ("hostingpackage", "customer", "osuser"): self.assertIn(key, response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertEqual(response.context['customer'], self.customer) - self.assertEqual( - response.context['osuser'], self.package.osuser.username) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertEqual(response.context["customer"], self.customer) + self.assertEqual(response.context["osuser"], self.package.osuser.username) def test_get_success_url(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) - response = self.client.post( - self._get_url(), - data={'comment': 'new comment'}) - self.assertRedirects(response, reverse('list_ssh_keys', kwargs={ - 'package': self.package.id})) + response = self.client.post(self._get_url(), data={"comment": "new comment"}) + self.assertRedirects( + response, reverse("list_ssh_keys", kwargs={"package": self.package.id}) + ) -class EditSshPublicKeyCommentTest( - HostingPackageAwareTestMixin, TransactionTestCase): - +class EditSshPublicKeyCommentTest(HostingPackageAwareTestMixin, TransactionTestCase): def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) self.sshkey = SshPublicKey.objects.create( - user=self.package.osuser, algorithm='good', data='key', - comment='comment') + user=self.package.osuser, algorithm="good", data="key", comment="comment" + ) def _get_url(self): return reverse( - 'edit_ssh_key_comment', kwargs={ - 'package': self.package.id, - 'pk': self.sshkey.id - }) + "edit_ssh_key_comment", + kwargs={"package": self.package.id, "pk": self.sshkey.id}, + ) def test_get_anonymous(self): response = self.client.get(self._get_url()) @@ -231,74 +214,67 @@ class EditSshPublicKeyCommentTest( self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertTemplateUsed( - response, 'osusers/sshpublickey_edit_comment.html') + self.assertTemplateUsed(response, "osusers/sshpublickey_edit_comment.html") def test_get_queryset(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = EditSshPublicKeyComment( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'pk': str(self.sshkey.pk) - }) + request=MagicMock(), + kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)}, + ) queryset = view.get_queryset() self.assertQuerysetEqual(queryset, [repr(self.sshkey)]) def test_get_form_kwargs(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = EditSshPublicKeyComment( - request=MagicMock(), kwargs={ - 'package': str(self.package.pk), - 'pk': str(self.sshkey.pk) - }) + request=MagicMock(), + kwargs={"package": str(self.package.pk), "pk": str(self.sshkey.pk)}, + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - for key in ('hostingpackage', 'customer', 'osuser'): + for key in ("hostingpackage", "customer", "osuser"): self.assertIn(key, response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertEqual(response.context['customer'], self.customer) - self.assertEqual( - response.context['osuser'], self.package.osuser.username) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertEqual(response.context["customer"], self.customer) + self.assertEqual(response.context["osuser"], self.package.osuser.username) def test_get_success_url(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) - response = self.client.post( - self._get_url(), - data={'comment': 'new comment'}) - self.assertRedirects(response, reverse('list_ssh_keys', kwargs={ - 'package': self.package.id})) + response = self.client.post(self._get_url(), data={"comment": "new comment"}) + self.assertRedirects( + response, reverse("list_ssh_keys", kwargs={"package": self.package.id}) + ) class ListSshPublicKeysTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) def _get_url(self): - return reverse('list_ssh_keys', kwargs={'package': self.package.id}) + return reverse("list_ssh_keys", kwargs={"package": self.package.id}) def test_get_anonymous(self): response = self.client.get(self._get_url()) @@ -310,45 +286,43 @@ class ListSshPublicKeysTest(HostingPackageAwareTestMixin, TestCase): self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertTemplateUsed(response, 'osusers/sshpublickey_list.html') + self.assertTemplateUsed(response, "osusers/sshpublickey_list.html") def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - for key in ('hostingpackage', 'customer', 'osuser'): + for key in ("hostingpackage", "customer", "osuser"): self.assertIn(key, response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertEqual(response.context['customer'], self.customer) - self.assertEqual( - response.context['osuser'], self.package.osuser.username) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertEqual(response.context["customer"], self.customer) + self.assertEqual(response.context["osuser"], self.package.osuser.username) class SetOsUserPasswordTest(HostingPackageAwareTestMixin, TestCase): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) def _get_url(self): - return reverse('set_osuser_password', kwargs={ - 'slug': self.package.osuser.username}) + return reverse( + "set_osuser_password", kwargs={"slug": self.package.osuser.username} + ) def test_get_anonymous(self): response = self.client.get(self._get_url()) @@ -360,45 +334,48 @@ class SetOsUserPasswordTest(HostingPackageAwareTestMixin, TestCase): self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertTemplateUsed(response, 'osusers/user_setpassword.html') + self.assertTemplateUsed(response, "osusers/user_setpassword.html") def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( self._get_url(), - data={'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - self._get_url(), follow=True, - data={'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) - messages = list(response.context['messages']) + self._get_url(), + follow=True, + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( - 'New password for {username} has been set successfully.'.format( + "New password for {username} has been set successfully.".format( username=self.package.osuser.username - ), str(messages[0])) + ), + str(messages[0]), + ) diff --git a/gnuviechadmin/taskresults/tests/management/commands/test_fetch_taskresults.py b/gnuviechadmin/taskresults/tests/management/commands/test_fetch_taskresults.py index 6b533f0..a7d10ff 100644 --- a/gnuviechadmin/taskresults/tests/management/commands/test_fetch_taskresults.py +++ b/gnuviechadmin/taskresults/tests/management/commands/test_fetch_taskresults.py @@ -4,39 +4,32 @@ This module provides tests for the command. """ -from __future__ import unicode_literals -try: - from unittest.mock import patch, MagicMock -except ImportError: - from mock import patch, MagicMock +from unittest.mock import MagicMock, patch from django.test import TestCase +from taskresults.management.commands.fetch_taskresults import Command from taskresults.models import TaskResult -from taskresults.management.commands.fetch_taskresults import Command +TEST_TASK_UUID = "3120f6a8-2665-4fa3-a785-79efd28bfe92" +TEST_TASK_NAME = "test.task" +TEST_TASK_RESULT = "4ll y0ur b453 4r3 b3l0ng t0 u5" -TEST_TASK_UUID = '3120f6a8-2665-4fa3-a785-79efd28bfe92' -TEST_TASK_NAME = 'test.task' -TEST_TASK_RESULT = '4ll y0ur b453 4r3 b3l0ng t0 u5' - - -@patch('taskresults.models.app.AsyncResult') +@patch("taskresults.models.app.AsyncResult") class FetchTaskResultsCommandTest(TestCase): - def test_handle_unfinished(self, asyncresult): resultmock = MagicMock(task_id=TEST_TASK_UUID) sigmock = MagicMock() sigmock.apply_async.return_value = resultmock tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) self.assertFalse(tr.finished) - self.assertEqual(tr.result, '') - self.assertEqual(tr.state, '') + self.assertEqual(tr.result, "") + self.assertEqual(tr.state, "") aresult = asyncresult.return_value - aresult.state = 'PENDING' + aresult.state = "PENDING" aresult.ready.return_value = False Command().handle() @@ -45,8 +38,8 @@ class FetchTaskResultsCommandTest(TestCase): self.assertTrue(asyncresult.called_with(TEST_TASK_UUID)) self.assertTrue(aresult.ready.called_with()) self.assertFalse(tr.finished) - self.assertEqual(tr.result, '') - self.assertEqual(tr.state, 'PENDING') + self.assertEqual(tr.result, "") + self.assertEqual(tr.state, "PENDING") def test_handle_finished(self, asyncresult): resultmock = MagicMock(task_id=TEST_TASK_UUID) @@ -54,11 +47,11 @@ class FetchTaskResultsCommandTest(TestCase): sigmock.apply_async.return_value = resultmock tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) self.assertFalse(tr.finished) - self.assertEqual(tr.result, '') - self.assertEqual(tr.state, '') + self.assertEqual(tr.result, "") + self.assertEqual(tr.state, "") aresult = asyncresult.return_value - aresult.state = 'SUCCESS' + aresult.state = "SUCCESS" aresult.ready.return_value = True aresult.get.return_value = TEST_TASK_RESULT @@ -70,4 +63,4 @@ class FetchTaskResultsCommandTest(TestCase): self.assertTrue(aresult.get.called_with()) self.assertTrue(tr.finished) self.assertEqual(tr.result, TEST_TASK_RESULT) - self.assertEqual(tr.state, 'SUCCESS') + self.assertEqual(tr.state, "SUCCESS") diff --git a/gnuviechadmin/taskresults/tests/test_models.py b/gnuviechadmin/taskresults/tests/test_models.py index 68d7a87..fe6445d 100644 --- a/gnuviechadmin/taskresults/tests/test_models.py +++ b/gnuviechadmin/taskresults/tests/test_models.py @@ -2,25 +2,19 @@ This module provides tests for :py:mod:`taskresults.models`. """ -from __future__ import absolute_import, unicode_literals - -try: - from unittest.mock import patch, MagicMock -except ImportError: - from mock import patch, MagicMock +from unittest.mock import MagicMock, patch from django.test import TestCase from taskresults.models import TaskResult - -TEST_TASK_UUID = '3120f6a8-2665-4fa3-a785-79efd28bfe92' -TEST_TASK_NAME = 'test.task' -TEST_TASK_RESULT = '4ll y0ur b453 4r3 b3l0ng t0 u5' +TEST_TASK_UUID = "3120f6a8-2665-4fa3-a785-79efd28bfe92" +TEST_TASK_NAME = "test.task" +TEST_TASK_RESULT = "4ll y0ur b453 4r3 b3l0ng t0 u5" class TaskResultTest(TestCase): - @patch('taskresults.models.app.AsyncResult') + @patch("taskresults.models.app.AsyncResult") def test_update_taskstatus_unfinished(self, asyncresult): resultmock = MagicMock(task_id=TEST_TASK_UUID) sigmock = MagicMock() @@ -28,13 +22,13 @@ class TaskResultTest(TestCase): tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) self.assertFalse(tr.finished) mymock = asyncresult.return_value - mymock.state = 'PENDING' + mymock.state = "PENDING" mymock.ready.return_value = False tr.fetch_result() mymock.get.assert_not_called() self.assertFalse(tr.finished) - @patch('taskresults.models.app.AsyncResult') + @patch("taskresults.models.app.AsyncResult") def test_update_taskstatus_finished(self, asyncresult): resultmock = MagicMock(task_id=TEST_TASK_UUID) sigmock = MagicMock() @@ -43,7 +37,7 @@ class TaskResultTest(TestCase): tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) self.assertFalse(tr.finished) aresult = asyncresult.return_value - aresult.state = 'SUCCESS' + aresult.state = "SUCCESS" aresult.ready.return_value = True aresult.get.return_value = TEST_TASK_RESULT tr.fetch_result() @@ -61,11 +55,15 @@ class TaskResultTest(TestCase): sigmock = MagicMock() sigmock.apply_async.return_value = resultmock tr = TaskResult.objects.create_task_result(TEST_TASK_NAME, sigmock) - self.assertEqual(str(tr), "{name} ({taskid}): no".format( - name=TEST_TASK_NAME, taskid=TEST_TASK_UUID)) + self.assertEqual( + str(tr), + "{name} ({taskid}): no".format(name=TEST_TASK_NAME, taskid=TEST_TASK_UUID), + ) tr.finished = True - self.assertEqual(str(tr), "{name} ({taskid}): yes".format( - name=TEST_TASK_NAME, taskid=TEST_TASK_UUID)) + self.assertEqual( + str(tr), + "{name} ({taskid}): yes".format(name=TEST_TASK_NAME, taskid=TEST_TASK_UUID), + ) TEST_RESULT = MagicMock() diff --git a/gnuviechadmin/userdbs/tests/test_admin.py b/gnuviechadmin/userdbs/tests/test_admin.py index 592eb0a..3479a30 100644 --- a/gnuviechadmin/userdbs/tests/test_admin.py +++ b/gnuviechadmin/userdbs/tests/test_admin.py @@ -2,35 +2,33 @@ This module provides tests for :py:mod:`userdbs.admin`. """ -from __future__ import absolute_import +from unittest.mock import MagicMock, Mock, patch from django.contrib.admin import AdminSite from django.test import TestCase -from userdbs.admin import (DatabaseUserAdmin, DatabaseUserCreationForm, - UserDatabaseAdmin, UserDatabaseCreationForm) +from userdbs.admin import ( + DatabaseUserAdmin, + DatabaseUserCreationForm, + UserDatabaseAdmin, + UserDatabaseCreationForm, +) from userdbs.models import DB_TYPES, DatabaseUser, UserDatabase -try: - from unittest.mock import MagicMock, Mock, patch -except ImportError: - from mock import MagicMock, Mock, patch - class DatabaseUserCreationFormTest(TestCase): - - @patch('userdbs.admin.DatabaseUser.objects.create_database_user') + @patch("userdbs.admin.DatabaseUser.objects.create_database_user") def test_save(self, create_database_user): create_database_user.return_value = Mock() form = DatabaseUserCreationForm() - mockuser = Mock(name='osuser') - form.cleaned_data = { - 'osuser': mockuser, - 'db_type': DB_TYPES.pgsql - } + mockuser = Mock(name="osuser") + form.cleaned_data = {"osuser": mockuser, "db_type": DB_TYPES.pgsql} retval = form.save() - self.assertTrue(create_database_user.called_with( - osuser=mockuser, db_type=DB_TYPES.pgsql, commit=True)) + self.assertTrue( + create_database_user.called_with( + osuser=mockuser, db_type=DB_TYPES.pgsql, commit=True + ) + ) self.assertEqual(retval, create_database_user.return_value) def test_save_m2m_returns_none(self): @@ -39,16 +37,14 @@ class DatabaseUserCreationFormTest(TestCase): class UserDatabaseCreationFormTest(TestCase): - - @patch('userdbs.admin.UserDatabase.objects.create_userdatabase') + @patch("userdbs.admin.UserDatabase.objects.create_userdatabase") def test_save(self, create_userdatabase): create_userdatabase.return_value = Mock() form = UserDatabaseCreationForm() - mockuser = Mock(name='mockuser') - form.cleaned_data = {'db_user': mockuser} + mockuser = Mock(name="mockuser") + form.cleaned_data = {"db_user": mockuser} retval = form.save() - self.assertTrue(create_userdatabase.called_with( - db_user=mockuser, commit=True)) + self.assertTrue(create_userdatabase.called_with(db_user=mockuser, commit=True)) self.assertEqual(retval, create_userdatabase.return_value) def test_save_m2m_returns_none(self): @@ -57,116 +53,96 @@ class UserDatabaseCreationFormTest(TestCase): class DatabaseUserAdminTest(TestCase): - def setUp(self): site = AdminSite() self.dbuadmin = DatabaseUserAdmin(DatabaseUser, site) super(DatabaseUserAdminTest, self).setUp() def test_get_form_with_instance(self): - form = self.dbuadmin.get_form( - Mock(name='request'), obj=Mock(name='dbuser')) - self.assertEqual( - form.Meta.fields, - ['osuser', 'name', 'db_type'] - ) + form = self.dbuadmin.get_form(Mock(name="request"), obj=Mock(name="dbuser")) + self.assertEqual(form.Meta.fields, ["osuser", "name", "db_type"]) def test_get_form_without_instance(self): - form = self.dbuadmin.get_form(Mock(name='request')) - self.assertEqual( - form.Meta.fields, - ['osuser', 'db_type'] - ) + form = self.dbuadmin.get_form(Mock(name="request")) + self.assertEqual(form.Meta.fields, ["osuser", "db_type"]) def test_get_readonly_fields_with_instance(self): fields = self.dbuadmin.get_readonly_fields( - Mock(name='request'), obj=Mock(name='dbuser')) - self.assertEqual( - fields, ['osuser', 'name', 'db_type']) + Mock(name="request"), obj=Mock(name="dbuser") + ) + self.assertEqual(fields, ["osuser", "name", "db_type"]) def test_get_readonly_fields_without_instance(self): - fields = self.dbuadmin.get_readonly_fields( - Mock(name='request')) + fields = self.dbuadmin.get_readonly_fields(Mock(name="request")) self.assertEqual(fields, []) def test_save_model_change(self): objmock = Mock() - self.dbuadmin.save_model(Mock(name='request'), objmock, Mock(), True) + self.dbuadmin.save_model(Mock(name="request"), objmock, Mock(), True) self.assertTrue(objmock.create_in_database.not_called()) def test_save_model_no_change(self): objmock = Mock() - self.dbuadmin.save_model(Mock(name='request'), objmock, Mock(), False) + self.dbuadmin.save_model(Mock(name="request"), objmock, Mock(), False) self.assertTrue(objmock.create_in_database.called_with()) def test_perform_delete_selected(self): usermock = Mock() selected = Mock() selected.all.return_value = [usermock] - self.dbuadmin.perform_delete_selected(Mock(name='request'), selected) + self.dbuadmin.perform_delete_selected(Mock(name="request"), selected) self.assertTrue(selected.all.called_with()) self.assertTrue(usermock.delete.called_with()) def test_get_actions(self): - requestmock = MagicMock(name='request') - self.assertNotIn( - 'delete_selected', - self.dbuadmin.get_actions(requestmock)) - self.assertIn( - 'perform_delete_selected', - self.dbuadmin.get_actions(requestmock)) + requestmock = MagicMock(name="request") + self.assertNotIn("delete_selected", self.dbuadmin.get_actions(requestmock)) + self.assertIn("perform_delete_selected", self.dbuadmin.get_actions(requestmock)) class UserDatabaseAdminTest(TestCase): - def setUp(self): site = AdminSite() self.udbadmin = UserDatabaseAdmin(UserDatabase, site) super(UserDatabaseAdminTest, self).setUp() def test_get_form_with_instance(self): - form = self.udbadmin.get_form( - Mock(name='request'), obj=Mock(name='userdb')) - self.assertEqual(form.Meta.fields, ['db_name', 'db_user']) + form = self.udbadmin.get_form(Mock(name="request"), obj=Mock(name="userdb")) + self.assertEqual(form.Meta.fields, ["db_name", "db_user"]) def test_get_form_without_instance(self): - form = self.udbadmin.get_form(Mock(name='request')) - self.assertEqual(form.Meta.fields, ['db_user']) + form = self.udbadmin.get_form(Mock(name="request")) + self.assertEqual(form.Meta.fields, ["db_user"]) def test_get_readonly_fields_with_instance(self): fields = self.udbadmin.get_readonly_fields( - Mock(name='request'), obj=Mock(name='userdb')) - self.assertEqual( - fields, ['db_name', 'db_user']) + Mock(name="request"), obj=Mock(name="userdb") + ) + self.assertEqual(fields, ["db_name", "db_user"]) def test_get_readonly_fields_without_instance(self): - fields = self.udbadmin.get_readonly_fields( - Mock(name='request')) + fields = self.udbadmin.get_readonly_fields(Mock(name="request")) self.assertEqual(fields, []) def test_save_model_change(self): objmock = Mock() - self.udbadmin.save_model(Mock(name='request'), objmock, Mock(), True) + self.udbadmin.save_model(Mock(name="request"), objmock, Mock(), True) self.assertTrue(objmock.create_in_database.not_called()) def test_save_model_no_change(self): objmock = Mock() - self.udbadmin.save_model(Mock(name='request'), objmock, Mock(), False) + self.udbadmin.save_model(Mock(name="request"), objmock, Mock(), False) self.assertTrue(objmock.create_in_database.called_with()) def test_perform_delete_selected(self): userdbmock = Mock() selected = Mock() selected.all.return_value = [userdbmock] - self.udbadmin.perform_delete_selected(Mock(name='request'), selected) + self.udbadmin.perform_delete_selected(Mock(name="request"), selected) self.assertTrue(selected.all.called_with()) self.assertTrue(userdbmock.delete.called_with()) def test_get_actions(self): - requestmock = MagicMock(name='request') - self.assertNotIn( - 'delete_selected', - self.udbadmin.get_actions(requestmock)) - self.assertIn( - 'perform_delete_selected', - self.udbadmin.get_actions(requestmock)) + requestmock = MagicMock(name="request") + self.assertNotIn("delete_selected", self.udbadmin.get_actions(requestmock)) + self.assertIn("perform_delete_selected", self.udbadmin.get_actions(requestmock)) diff --git a/gnuviechadmin/userdbs/tests/test_forms.py b/gnuviechadmin/userdbs/tests/test_forms.py index 977e582..2aa1706 100644 --- a/gnuviechadmin/userdbs/tests/test_forms.py +++ b/gnuviechadmin/userdbs/tests/test_forms.py @@ -2,20 +2,15 @@ This module provides tests for :py:mod:`userdbs.forms`. """ -from __future__ import unicode_literals - from django import forms from django.contrib.auth import get_user_model -from django.core.urlresolvers import reverse from django.test import TestCase +from django.urls import reverse from userdbs.forms import AddUserDatabaseForm, ChangeDatabaseUserPasswordForm from userdbs.models import DB_TYPES -try: - from unittest.mock import MagicMock, Mock, patch -except ImportError: - from mock import MagicMock, Mock, patch +from unittest.mock import MagicMock, Mock, patch Customer = get_user_model() @@ -33,66 +28,68 @@ class AddUserDatabaseFormTest(TestCase): def test_constructor_needs_hostingpackage(self): with self.assertRaises(KeyError) as ke: AddUserDatabaseForm(instance=Mock()) - self.assertEqual(ke.exception.args[0], 'hostingpackage') + self.assertEqual(ke.exception.args[0], "hostingpackage") def test_constructor_needs_dbtypes(self): with self.assertRaises(KeyError) as ke: AddUserDatabaseForm(instance=Mock(), hostingpackage=Mock()) - self.assertEqual(ke.exception.args[0], 'dbtypes') + self.assertEqual(ke.exception.args[0], "dbtypes") def test_constructor_one_dbtype(self): self._setup_hostingpackage() dbtypes = [(DB_TYPES.pgsql, DB_TYPES[DB_TYPES.pgsql])] form = AddUserDatabaseForm( - instance=MagicMock(), hostingpackage=self.hostingpackage, - dbtypes=dbtypes) - self.assertIn('db_type', form.fields) - self.assertEqual(form.fields['db_type'].choices, dbtypes) - self.assertTrue(isinstance( - form.fields['db_type'].widget, - forms.HiddenInput)) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'add_userdatabase', kwargs={'package': self.hostingpackage.id})) - self.assertEqual(form.helper.inputs[0].name, 'submit') + instance=MagicMock(), hostingpackage=self.hostingpackage, dbtypes=dbtypes + ) + self.assertIn("db_type", form.fields) + self.assertEqual(form.fields["db_type"].choices, dbtypes) + self.assertTrue(isinstance(form.fields["db_type"].widget, forms.HiddenInput)) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("add_userdatabase", kwargs={"package": self.hostingpackage.id}), + ) + self.assertEqual(form.helper.inputs[0].name, "submit") def test_constructor_multiple_dbtypes(self): self._setup_hostingpackage() dbtypes = [ (DB_TYPES.pgsql, DB_TYPES[DB_TYPES.pgsql]), - (DB_TYPES.mysql, DB_TYPES[DB_TYPES.mysql]) + (DB_TYPES.mysql, DB_TYPES[DB_TYPES.mysql]), ] form = AddUserDatabaseForm( - instance=MagicMock(), hostingpackage=self.hostingpackage, - dbtypes=dbtypes) - self.assertIn('db_type', form.fields) - self.assertEqual(form.fields['db_type'].choices, dbtypes) - self.assertTrue(isinstance( - form.fields['db_type'].widget, - forms.RadioSelect)) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'add_userdatabase', kwargs={'package': self.hostingpackage.id})) - self.assertEqual(form.helper.inputs[0].name, 'submit') + instance=MagicMock(), hostingpackage=self.hostingpackage, dbtypes=dbtypes + ) + self.assertIn("db_type", form.fields) + self.assertEqual(form.fields["db_type"].choices, dbtypes) + self.assertTrue(isinstance(form.fields["db_type"].widget, forms.RadioSelect)) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("add_userdatabase", kwargs={"package": self.hostingpackage.id}), + ) + self.assertEqual(form.helper.inputs[0].name, "submit") - @patch('userdbs.forms.UserDatabase.objects.create_userdatabase_with_user') + @patch("userdbs.forms.UserDatabase.objects.create_userdatabase_with_user") def test_save(self, create_userdatabase_with_user): self._setup_hostingpackage() dbtypes = [ (DB_TYPES.pgsql, DB_TYPES[DB_TYPES.pgsql]), - (DB_TYPES.mysql, DB_TYPES[DB_TYPES.mysql]) + (DB_TYPES.mysql, DB_TYPES[DB_TYPES.mysql]), ] form = AddUserDatabaseForm( - instance=MagicMock(), hostingpackage=self.hostingpackage, - dbtypes=dbtypes) - form.cleaned_data = { - 'db_type': DB_TYPES.pgsql, - 'password1': 'secret', - } + instance=MagicMock(), hostingpackage=self.hostingpackage, dbtypes=dbtypes + ) + form.cleaned_data = {"db_type": DB_TYPES.pgsql, "password1": "secret"} form.save() - self.assertTrue(create_userdatabase_with_user.called_with( - DB_TYPES.pgsql, self.hostingpackage.osuser, - password='secret', commit=True)) + self.assertTrue( + create_userdatabase_with_user.called_with( + DB_TYPES.pgsql, + self.hostingpackage.osuser, + password="secret", + commit=True, + ) + ) class ChangeDatabaseUserPasswordFormTest(TestCase): @@ -107,29 +104,31 @@ class ChangeDatabaseUserPasswordFormTest(TestCase): def test_constructor_needs_hostingpackage(self): with self.assertRaises(KeyError) as ke: ChangeDatabaseUserPasswordForm(instance=Mock()) - self.assertEqual(ke.exception.args[0], 'hostingpackage') + self.assertEqual(ke.exception.args[0], "hostingpackage") def test_constructor(self): self._setup_hostingpackage() instance = MagicMock() - instance.name = 'test' + instance.name = "test" form = ChangeDatabaseUserPasswordForm( - instance=instance, hostingpackage=self.hostingpackage) - self.assertIn('password1', form.fields) - self.assertIn('password2', form.fields) - self.assertTrue(hasattr(form, 'helper')) - self.assertEqual(form.helper.form_action, reverse( - 'change_dbuser_password', kwargs={ - 'slug': 'test', 'package': 42 - })) - self.assertEqual(form.helper.inputs[0].name, 'submit') + instance=instance, hostingpackage=self.hostingpackage + ) + self.assertIn("password1", form.fields) + self.assertIn("password2", form.fields) + self.assertTrue(hasattr(form, "helper")) + self.assertEqual( + form.helper.form_action, + reverse("change_dbuser_password", kwargs={"slug": "test", "package": 42}), + ) + self.assertEqual(form.helper.inputs[0].name, "submit") def test_save(self): instance = MagicMock() - instance.name = 'test' + instance.name = "test" self._setup_hostingpackage() form = ChangeDatabaseUserPasswordForm( - instance=instance, hostingpackage=self.hostingpackage) - form.cleaned_data = {'password1': 'secret'} + instance=instance, hostingpackage=self.hostingpackage + ) + form.cleaned_data = {"password1": "secret"} form.save() - self.assertTrue(instance.set_password.called_with('secret')) + self.assertTrue(instance.set_password.called_with("secret")) diff --git a/gnuviechadmin/userdbs/tests/test_models.py b/gnuviechadmin/userdbs/tests/test_models.py index d8b1024..41306bd 100644 --- a/gnuviechadmin/userdbs/tests/test_models.py +++ b/gnuviechadmin/userdbs/tests/test_models.py @@ -2,8 +2,6 @@ This module provides tests for :py:mod:`userdbs.models`. """ -from __future__ import unicode_literals - from django.contrib.auth import get_user_model from django.test import TestCase from django.test.utils import override_settings @@ -16,9 +14,7 @@ Customer = get_user_model() @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class TestCaseWithCeleryTasks(TestCase): pass @@ -29,93 +25,85 @@ class DatabaseUserManagerTest(TestCaseWithCeleryTasks): Test case for :py:class:`userdbs.models.DatabaseUserManager`. """ + def setUp(self): - self.customer = Customer.objects.create_user(username='testcustomer') + self.customer = Customer.objects.create_user(username="testcustomer") self.osuser = User.objects.create_user(customer=self.customer) TaskResult.objects.all().delete() def test_create_database_user_with_name(self): dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.pgsql, 'testname', 'secret') - self.assertEqual(dbu.name, 'testname') + self.osuser, DB_TYPES.pgsql, "testname", "secret" + ) + self.assertEqual(dbu.name, "testname") self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.pgsql) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(taskres[0].creator, 'handle_dbuser_created') - self.assertEqual(taskres[0].notes, 'pgsql user creation') + self.assertEqual(taskres[0].creator, "handle_dbuser_created") + self.assertEqual(taskres[0].notes, "pgsql user creation") def test_create_database_user_with_name_no_commit(self): dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.pgsql, 'testname', 'secret', False) - self.assertEqual(dbu.name, 'testname') + self.osuser, DB_TYPES.pgsql, "testname", "secret", False + ) + self.assertEqual(dbu.name, "testname") self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.pgsql) self.assertFalse(TaskResult.objects.exists()) def test_create_database_user_generate_name(self): - dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.pgsql) - self.assertEqual(dbu.name, '{user}db01'.format( - user=self.osuser.username)) + dbu = DatabaseUser.objects.create_database_user(self.osuser, DB_TYPES.pgsql) + self.assertEqual(dbu.name, "{user}db01".format(user=self.osuser.username)) self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.pgsql) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(taskres[0].creator, 'handle_dbuser_created') - self.assertEqual(taskres[0].notes, 'pgsql user creation') + self.assertEqual(taskres[0].creator, "handle_dbuser_created") + self.assertEqual(taskres[0].notes, "pgsql user creation") def test_create_database_user_multiple_generate_name(self): - dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.mysql) - self.assertEqual(dbu.name, '{user}db01'.format( - user=self.osuser.username)) + dbu = DatabaseUser.objects.create_database_user(self.osuser, DB_TYPES.mysql) + self.assertEqual(dbu.name, "{user}db01".format(user=self.osuser.username)) self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.mysql) - dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.mysql) - self.assertEqual(dbu.name, '{user}db02'.format( - user=self.osuser.username)) + dbu = DatabaseUser.objects.create_database_user(self.osuser, DB_TYPES.mysql) + self.assertEqual(dbu.name, "{user}db02".format(user=self.osuser.username)) self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.mysql) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 2) - self.assertEqual(taskres[0].creator, 'handle_dbuser_created') - self.assertEqual(taskres[0].notes, 'mysql user creation') - self.assertEqual(taskres[1].creator, 'handle_dbuser_created') - self.assertEqual(taskres[1].notes, 'mysql user creation') + self.assertEqual(taskres[0].creator, "handle_dbuser_created") + self.assertEqual(taskres[0].notes, "mysql user creation") + self.assertEqual(taskres[1].creator, "handle_dbuser_created") + self.assertEqual(taskres[1].notes, "mysql user creation") def test_create_database_user_multiple_gap_generate_name(self): - dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.mysql) - self.assertEqual(dbu.name, '{user}db01'.format( - user=self.osuser.username)) + dbu = DatabaseUser.objects.create_database_user(self.osuser, DB_TYPES.mysql) + self.assertEqual(dbu.name, "{user}db01".format(user=self.osuser.username)) self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.mysql) - dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.mysql) - self.assertEqual(dbu.name, '{user}db02'.format( - user=self.osuser.username)) + dbu = DatabaseUser.objects.create_database_user(self.osuser, DB_TYPES.mysql) + self.assertEqual(dbu.name, "{user}db02".format(user=self.osuser.username)) self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.mysql) DatabaseUser.objects.get( - name='{user}db01'.format(user=self.osuser.username)).delete() - dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.mysql) - self.assertEqual(dbu.name, '{user}db01'.format( - user=self.osuser.username)) + name="{user}db01".format(user=self.osuser.username) + ).delete() + dbu = DatabaseUser.objects.create_database_user(self.osuser, DB_TYPES.mysql) + self.assertEqual(dbu.name, "{user}db01".format(user=self.osuser.username)) self.assertEqual(dbu.osuser, self.osuser) self.assertEqual(dbu.db_type, DB_TYPES.mysql) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 4) - self.assertEqual(taskres[0].creator, 'handle_dbuser_created') - self.assertEqual(taskres[0].notes, 'mysql user creation') - self.assertEqual(taskres[1].creator, 'handle_dbuser_created') - self.assertEqual(taskres[1].notes, 'mysql user creation') - self.assertEqual(taskres[2].creator, 'handle_dbuser_deleted') - self.assertEqual(taskres[2].notes, 'mysql user deletion') - self.assertEqual(taskres[3].creator, 'handle_dbuser_created') - self.assertEqual(taskres[3].notes, 'mysql user creation') + self.assertEqual(taskres[0].creator, "handle_dbuser_created") + self.assertEqual(taskres[0].notes, "mysql user creation") + self.assertEqual(taskres[1].creator, "handle_dbuser_created") + self.assertEqual(taskres[1].notes, "mysql user creation") + self.assertEqual(taskres[2].creator, "handle_dbuser_deleted") + self.assertEqual(taskres[2].notes, "mysql user deletion") + self.assertEqual(taskres[3].creator, "handle_dbuser_created") + self.assertEqual(taskres[3].notes, "mysql user creation") class DatabaseUserTest(TestCaseWithCeleryTasks): @@ -123,41 +111,43 @@ class DatabaseUserTest(TestCaseWithCeleryTasks): Test case for :py:class:`userdbs.models.DatabaseUser`. """ + def setUp(self): - self.customer = Customer.objects.create_user(username='testcustomer') + self.customer = Customer.objects.create_user(username="testcustomer") self.osuser = User.objects.create_user(customer=self.customer) self.dbu = DatabaseUser.objects.create_database_user( - self.osuser, DB_TYPES.pgsql) + self.osuser, DB_TYPES.pgsql + ) TaskResult.objects.all().delete() def test___str__(self): self.assertEqual( str(self.dbu), - '{user}db01 (PostgreSQL for {user})'.format( - user=self.osuser.username)) + "{user}db01 (PostgreSQL for {user})".format(user=self.osuser.username), + ) def test_set_password_pgsql(self): - self.dbu.set_password('secret') + self.dbu.set_password("secret") taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(taskres[0].creator, 'handle_dbuser_password_set') - self.assertEqual(taskres[0].notes, 'pgsql password change') + self.assertEqual(taskres[0].creator, "handle_dbuser_password_set") + self.assertEqual(taskres[0].notes, "pgsql password change") def test_set_password_mysql(self): self.dbu.db_type = DB_TYPES.mysql self.dbu.save() - self.dbu.set_password('secret') + self.dbu.set_password("secret") taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(taskres[0].creator, 'handle_dbuser_password_set') - self.assertEqual(taskres[0].notes, 'mysql password change') + self.assertEqual(taskres[0].creator, "handle_dbuser_password_set") + self.assertEqual(taskres[0].notes, "mysql password change") def test_delete_no_dbs(self): self.dbu.delete() taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(taskres[0].creator, 'handle_dbuser_deleted') - self.assertEqual(taskres[0].notes, 'pgsql user deletion') + self.assertEqual(taskres[0].creator, "handle_dbuser_deleted") + self.assertEqual(taskres[0].notes, "pgsql user deletion") def test_delete_with_dbs(self): db = UserDatabase.objects.create_userdatabase(self.dbu) @@ -166,12 +156,12 @@ class DatabaseUserTest(TestCaseWithCeleryTasks): self.assertFalse(UserDatabase.objects.filter(id=dbid).exists()) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 3) - self.assertEqual(taskres[0].creator, 'handle_userdb_created') - self.assertEqual(taskres[0].notes, 'pgsql database creation') - self.assertEqual(taskres[1].creator, 'handle_userdb_deleted') - self.assertEqual(taskres[1].notes, 'pgsql database deletion') - self.assertEqual(taskres[2].creator, 'handle_dbuser_deleted') - self.assertEqual(taskres[2].notes, 'pgsql user deletion') + self.assertEqual(taskres[0].creator, "handle_userdb_created") + self.assertEqual(taskres[0].notes, "pgsql database creation") + self.assertEqual(taskres[1].creator, "handle_userdb_deleted") + self.assertEqual(taskres[1].notes, "pgsql database deletion") + self.assertEqual(taskres[2].creator, "handle_dbuser_deleted") + self.assertEqual(taskres[2].notes, "pgsql user deletion") class UserDatabaseManagerTest(TestCaseWithCeleryTasks): @@ -179,50 +169,52 @@ class UserDatabaseManagerTest(TestCaseWithCeleryTasks): Test case for :py:class:`userdbs.models.UserDatabaseManager`. """ + def setUp(self): - self.customer = Customer.objects.create_user(username='testcustomer') + self.customer = Customer.objects.create_user(username="testcustomer") self.osuser = User.objects.create_user(customer=self.customer) TaskResult.objects.all().delete() def _create_database_user(self, dbtype): - self.dbu = DatabaseUser.objects.create_database_user( - self.osuser, dbtype) + self.dbu = DatabaseUser.objects.create_database_user(self.osuser, dbtype) TaskResult.objects.all().delete() def test_create_userdatabase_with_user_mysql(self): db = UserDatabase.objects.create_userdatabase_with_user( - DB_TYPES.mysql, self.osuser) - self.assertEqual(db.db_name, '{user}db01'.format( - user=self.osuser.username)) - self.assertEqual(db.db_user.name, '{user}db01'.format( - user=self.osuser.username)) + DB_TYPES.mysql, self.osuser + ) + self.assertEqual(db.db_name, "{user}db01".format(user=self.osuser.username)) + self.assertEqual( + db.db_user.name, "{user}db01".format(user=self.osuser.username) + ) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 2) - self.assertEqual(taskres[0].creator, 'handle_dbuser_created') - self.assertEqual(taskres[0].notes, 'mysql user creation') - self.assertEqual(taskres[1].creator, 'handle_userdb_created') - self.assertEqual(taskres[1].notes, 'mysql database creation') + self.assertEqual(taskres[0].creator, "handle_dbuser_created") + self.assertEqual(taskres[0].notes, "mysql user creation") + self.assertEqual(taskres[1].creator, "handle_userdb_created") + self.assertEqual(taskres[1].notes, "mysql database creation") def test_create_userdatabase_with_user_pgsql(self): db = UserDatabase.objects.create_userdatabase_with_user( - DB_TYPES.pgsql, self.osuser) - self.assertEqual(db.db_name, '{user}db01'.format( - user=self.osuser.username)) - self.assertEqual(db.db_user.name, '{user}db01'.format( - user=self.osuser.username)) + DB_TYPES.pgsql, self.osuser + ) + self.assertEqual(db.db_name, "{user}db01".format(user=self.osuser.username)) + self.assertEqual( + db.db_user.name, "{user}db01".format(user=self.osuser.username) + ) taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 2) - self.assertEqual(taskres[0].creator, 'handle_dbuser_created') - self.assertEqual(taskres[0].notes, 'pgsql user creation') - self.assertEqual(taskres[1].creator, 'handle_userdb_created') - self.assertEqual(taskres[1].notes, 'pgsql database creation') + self.assertEqual(taskres[0].creator, "handle_dbuser_created") + self.assertEqual(taskres[0].notes, "pgsql user creation") + self.assertEqual(taskres[1].creator, "handle_userdb_created") + self.assertEqual(taskres[1].notes, "pgsql database creation") def test_create_userdatabase_given_name_no_new_write(self): self._create_database_user(DB_TYPES.pgsql) - db = UserDatabase.objects.create_userdatabase(self.dbu, db_name='test') + db = UserDatabase.objects.create_userdatabase(self.dbu, db_name="test") taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(db.db_name, 'test') + self.assertEqual(db.db_name, "test") TaskResult.objects.all().delete() db.save() taskres = TaskResult.objects.all() @@ -230,11 +222,11 @@ class UserDatabaseManagerTest(TestCaseWithCeleryTasks): def test_create_userdatabase_given_name(self): self._create_database_user(DB_TYPES.pgsql) - db = UserDatabase.objects.create_userdatabase(self.dbu, db_name='test') - self.assertEqual(db.db_name, 'test') + db = UserDatabase.objects.create_userdatabase(self.dbu, db_name="test") + self.assertEqual(db.db_name, "test") taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 1) - self.assertEqual(db.db_name, 'test') + self.assertEqual(db.db_name, "test") def test_create_userdatabase_generate_name_no_commit(self): self._create_database_user(DB_TYPES.pgsql) @@ -252,19 +244,19 @@ class UserDatabaseManagerTest(TestCaseWithCeleryTasks): db = UserDatabase.objects.create_userdatabase(self.dbu) self.assertEqual(db.db_name, self.dbu.name) db = UserDatabase.objects.create_userdatabase(self.dbu) - self.assertEqual(db.db_name, '{user}_02'.format(user=self.dbu.name)) + self.assertEqual(db.db_name, "{user}_02".format(user=self.dbu.name)) def test_create_userdatabase_multiple_gap_generate_name(self): self._create_database_user(DB_TYPES.pgsql) db = UserDatabase.objects.create_userdatabase(self.dbu) self.assertEqual(db.db_name, self.dbu.name) dbx = UserDatabase.objects.create_userdatabase(self.dbu) - self.assertEqual(dbx.db_name, '{user}_02'.format(user=self.dbu.name)) + self.assertEqual(dbx.db_name, "{user}_02".format(user=self.dbu.name)) db = UserDatabase.objects.create_userdatabase(self.dbu) - self.assertEqual(db.db_name, '{user}_03'.format(user=self.dbu.name)) + self.assertEqual(db.db_name, "{user}_03".format(user=self.dbu.name)) dbx.delete() db = UserDatabase.objects.create_userdatabase(self.dbu) - self.assertEqual(db.db_name, '{user}_02'.format(user=self.dbu.name)) + self.assertEqual(db.db_name, "{user}_02".format(user=self.dbu.name)) class UserDatabaseTest(TestCaseWithCeleryTasks): @@ -272,24 +264,23 @@ class UserDatabaseTest(TestCaseWithCeleryTasks): Test case for :py:class:`userdbs.models.UserDabase`. """ + def test___str__(self): - customer = Customer.objects.create_user(username='testcustomer') + customer = Customer.objects.create_user(username="testcustomer") osuser = User.objects.create_user(customer=customer) - db = UserDatabase.objects.create_userdatabase_with_user( - DB_TYPES.pgsql, osuser) + db = UserDatabase.objects.create_userdatabase_with_user(DB_TYPES.pgsql, osuser) self.assertEqual( str(db), - '{user}db01 ({dbuser})'.format( - user=osuser.username, dbuser=db.db_user)) + "{user}db01 ({dbuser})".format(user=osuser.username, dbuser=db.db_user), + ) def test_delete_mysql_db(self): - customer = Customer.objects.create_user(username='testcustomer') + customer = Customer.objects.create_user(username="testcustomer") osuser = User.objects.create_user(customer=customer) TaskResult.objects.all().delete() - db = UserDatabase.objects.create_userdatabase_with_user( - DB_TYPES.mysql, osuser) + db = UserDatabase.objects.create_userdatabase_with_user(DB_TYPES.mysql, osuser) db.delete() taskres = TaskResult.objects.all() self.assertEqual(len(taskres), 3) - self.assertEqual(taskres[2].creator, 'handle_userdb_deleted') - self.assertEqual(taskres[2].notes, 'mysql database deletion') + self.assertEqual(taskres[2].creator, "handle_userdb_deleted") + self.assertEqual(taskres[2].notes, "mysql database deletion") diff --git a/gnuviechadmin/userdbs/tests/test_signals.py b/gnuviechadmin/userdbs/tests/test_signals.py index c39a0b5..33541e3 100644 --- a/gnuviechadmin/userdbs/tests/test_signals.py +++ b/gnuviechadmin/userdbs/tests/test_signals.py @@ -4,63 +4,60 @@ This module contains explicit tests for corner cases in :py:mod:`userdbs.tests.test_models`. """ -from __future__ import unicode_literals +from unittest.mock import Mock from django.test import TestCase from django.test.utils import override_settings from taskresults.models import TaskResult -from userdbs.signals import (handle_dbuser_created, handle_dbuser_deleted, - handle_dbuser_password_set, handle_userdb_created, - handle_userdb_deleted) - -try: - from unittest.mock import Mock -except ImportError: - from mock import Mock +from userdbs.signals import ( + handle_dbuser_created, + handle_dbuser_deleted, + handle_dbuser_password_set, + handle_userdb_created, + handle_userdb_deleted, +) @override_settings( - CELERY_ALWAYS_EAGER=True, - CELERY_CACHE_BACKEND='memory', - BROKER_BACKEND='memory' + CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", BROKER_BACKEND="memory" ) class TestCaseWithCeleryTasks(TestCase): pass class TestWithUnknownDBType(TestCaseWithCeleryTasks): - def test_handle_dbuser_password_set_unknown(self): - instance = Mock(data={'name': 'test', 'db_type': -1}) - handle_dbuser_password_set(Mock(name='sender'), instance, 'secret') + instance = Mock(data={"name": "test", "db_type": -1}) + handle_dbuser_password_set(Mock(name="sender"), instance, "secret") self.assertFalse(TaskResult.objects.exists()) def test_handle_dbuser_create_unknown(self): - instance = Mock(data={'name': 'test', 'db_type': -1}) - handle_dbuser_created( - Mock(name='sender'), instance, True, password='secret') + instance = Mock(data={"name": "test", "db_type": -1}) + handle_dbuser_created(Mock(name="sender"), instance, True, password="secret") self.assertFalse(TaskResult.objects.exists()) def test_handle_dbuser_deleted_unknown(self): - instance = Mock(data={'name': 'test', 'db_type': -1}) - handle_dbuser_deleted(Mock(name='sender'), instance) + instance = Mock(data={"name": "test", "db_type": -1}) + handle_dbuser_deleted(Mock(name="sender"), instance) self.assertFalse(TaskResult.objects.exists()) def test_handle_userdb_created_unknown(self): instance = Mock( data={ - 'db_name': 'test', - 'db_user': Mock(data={'name': 'test', 'db_type': -1, }) - }) - handle_userdb_created(Mock(name='sender'), instance, True) + "db_name": "test", + "db_user": Mock(data={"name": "test", "db_type": -1}), + } + ) + handle_userdb_created(Mock(name="sender"), instance, True) self.assertFalse(TaskResult.objects.exists()) def test_handle_userdb_deleted_unknown(self): instance = Mock( data={ - 'db_name': 'test', - 'db_user': Mock(data={'name': 'test', 'db_type': -1, }) - }) - handle_userdb_deleted(Mock(name='sender'), instance) + "db_name": "test", + "db_user": Mock(data={"name": "test", "db_type": -1}), + } + ) + handle_userdb_deleted(Mock(name="sender"), instance) self.assertFalse(TaskResult.objects.exists()) diff --git a/gnuviechadmin/userdbs/tests/test_views.py b/gnuviechadmin/userdbs/tests/test_views.py index 89aa381..b52cbdf 100644 --- a/gnuviechadmin/userdbs/tests/test_views.py +++ b/gnuviechadmin/userdbs/tests/test_views.py @@ -2,16 +2,11 @@ This module provides tests for :py:mod:`userdbs.views`. """ -from __future__ import absolute_import, unicode_literals +from unittest.mock import patch, MagicMock -try: - from unittest.mock import patch, MagicMock -except ImportError: - from mock import patch, MagicMock - -from django.core.urlresolvers import reverse from django.test import TestCase from django.contrib.auth import get_user_model +from django.urls import reverse from hostingpackages.models import ( CustomerHostingPackage, @@ -26,58 +21,61 @@ from userdbs.views import AddUserDatabase, ChangeDatabaseUserPassword User = get_user_model() -TEST_USER = 'test' -TEST_PASSWORD = 'secret' -TEST_EMAIL = 'test@example.org' +TEST_USER = "test" +TEST_PASSWORD = "secret" +TEST_EMAIL = "test@example.org" class HostingPackageAwareTestMixin(object): + # noinspection PyMethodMayBeStatic def _setup_hosting_package(self, customer): template = HostingPackageTemplate.objects.create( - name='testpackagetemplate', mailboxcount=10, diskspace=1, - diskspace_unit=0) + name="testpackagetemplate", mailboxcount=10, diskspace=1, diskspace_unit=0 + ) package = CustomerHostingPackage.objects.create_from_template( - customer, template, 'testpackage') - with patch('hostingpackages.models.settings') as hmsettings: + customer, template, "testpackage" + ) + with patch("hostingpackages.models.settings") as hmsettings: hmsettings.OSUSER_DEFAULT_GROUPS = [] package.save() return package class CustomerUserDatabaseOptionAwareTestMixin(object): - def __init__(self, *args, **kwargs): - super(CustomerUserDatabaseOptionAwareTestMixin, self).__init__( - *args, **kwargs) + super(CustomerUserDatabaseOptionAwareTestMixin, self).__init__(*args, **kwargs) self._templates = {} def _setup_userdatabaseoption(self, number, dbtype): key = "{}_{}".format(dbtype, number) if key not in self._templates: self._templates[key] = UserDatabaseOption.objects.create( - number=number, db_type=dbtype) + number=number, db_type=dbtype + ) return self._templates[key] def _create_userdatabase_option(self, number=1, dbtype=DB_TYPES.pgsql): + # noinspection PyUnresolvedReferences return CustomerUserDatabaseOption.objects.create( template=self._setup_userdatabaseoption(number, dbtype), - number=number, db_type=dbtype, hosting_package=self.package) + number=number, + db_type=dbtype, + hosting_package=self.package, + ) class AddUserDatabaseTest( - HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, - TestCase + HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, TestCase ): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) def _get_url(self): - return reverse( - 'add_userdatabase', kwargs={'package': self.package.id}) + return reverse("add_userdatabase", kwargs={"package": self.package.id}) def test_get_anonymous(self): response = self.client.get(self._get_url()) @@ -95,31 +93,29 @@ class AddUserDatabaseTest( self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 403) def test_get_staff_user_nodboption(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 400) def test_get_staff_user(self): self._create_userdatabase_option() - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 200) def test_get_regular_user_nofree_db(self): db_option = self._create_userdatabase_option() UserDatabase.objects.create_userdatabase_with_user( - db_option.db_type, self.package.osuser) + db_option.db_type, self.package.osuser + ) self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) self.assertEqual(response.status_code, 400) @@ -128,21 +124,21 @@ class AddUserDatabaseTest( db_option = self._create_userdatabase_option() self.client.login(username=TEST_USER, password=TEST_PASSWORD) view = AddUserDatabase( - request=MagicMock(), kwargs={'package': str(self.package.pk)}) + request=MagicMock(), kwargs={"package": str(self.package.pk)} + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) - self.assertIn('dbtypes', the_kwargs) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) + self.assertIn("dbtypes", the_kwargs) self.assertEqual( - the_kwargs['dbtypes'], - [(db_option.db_type, DB_TYPES[db_option.db_type])], + the_kwargs["dbtypes"], [(db_option.db_type, DB_TYPES[db_option.db_type])] ) def test_get_template(self): self._create_userdatabase_option() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url()) - self.assertTemplateUsed(response, 'userdbs/userdatabase_create.html') + self.assertTemplateUsed(response, "userdbs/userdatabase_create.html") def test_form_valid_redirect(self): db_option = self._create_userdatabase_option() @@ -150,48 +146,55 @@ class AddUserDatabaseTest( response = self.client.post( self._get_url(), data={ - 'db_type': db_option.db_type, 'password1': TEST_PASSWORD, - 'password2': TEST_PASSWORD}) + "db_type": db_option.db_type, + "password1": TEST_PASSWORD, + "password2": TEST_PASSWORD, + }, + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): db_option = self._create_userdatabase_option() self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - self._get_url(), follow=True, + self._get_url(), + follow=True, data={ - 'db_type': db_option.db_type, 'password1': TEST_PASSWORD, - 'password2': TEST_PASSWORD}) - db = UserDatabase.objects.filter( - db_user__osuser=self.package.osuser).get() - messages = list(response.context['messages']) + "db_type": db_option.db_type, + "password1": TEST_PASSWORD, + "password2": TEST_PASSWORD, + }, + ) + db = UserDatabase.objects.filter(db_user__osuser=self.package.osuser).get() + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( - str(messages[0]), ( - 'Successfully create new {type} database {dbname} for user ' - '{dbuser}.').format( - type=db.db_user.db_type, dbname=db.db_name, - dbuser=db.db_user)) + str(messages[0]), + ( + "Successfully create new {type} database {dbname} for user " "{dbuser}." + ).format(type=db.db_user.db_type, dbname=db.db_name, dbuser=db.db_user), + ) class ChangeDatabaseUserPasswordTest( - HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, - TestCase + HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, TestCase ): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) template = self._create_userdatabase_option() database = UserDatabase.objects.create_userdatabase_with_user( - template.db_type, self.package.osuser) + template.db_type, self.package.osuser + ) self.dbuser = database.db_user def _get_url(self, dbuser): return reverse( - 'change_dbuser_password', kwargs={ - 'package': self.package.id, 'slug': dbuser.name}) + "change_dbuser_password", + kwargs={"package": self.package.id, "slug": dbuser.name}, + ) def test_get_anonymous(self): response = self.client.get(self._get_url(self.dbuser)) @@ -203,80 +206,85 @@ class ChangeDatabaseUserPasswordTest( self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url(self.dbuser)) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url(self.dbuser)) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url(self.dbuser)) - self.assertTemplateUsed( - response, 'userdbs/databaseuser_setpassword.html') + self.assertTemplateUsed(response, "userdbs/databaseuser_setpassword.html") def test_get_form_kwargs(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) - view = ChangeDatabaseUserPassword(request=MagicMock(), kwargs={ - 'package': str(self.package.pk), 'slug': self.dbuser.name}) + view = ChangeDatabaseUserPassword( + request=MagicMock(), + kwargs={"package": str(self.package.pk), "slug": self.dbuser.name}, + ) the_kwargs = view.get_form_kwargs() - self.assertIn('hostingpackage', the_kwargs) - self.assertEqual(the_kwargs['hostingpackage'], self.package) + self.assertIn("hostingpackage", the_kwargs) + self.assertEqual(the_kwargs["hostingpackage"], self.package) def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url(self.dbuser)) - self.assertIn('dbuser', response.context) - self.assertEqual(response.context['dbuser'], self.dbuser) - self.assertIn('hostingpackage', response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) + self.assertIn("dbuser", response.context) + self.assertEqual(response.context["dbuser"], self.dbuser) + self.assertIn("hostingpackage", response.context) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) - response = self.client.post(self._get_url(self.dbuser), data={ - 'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) + response = self.client.post( + self._get_url(self.dbuser), + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) self.assertRedirects(response, self.package.get_absolute_url()) def test_form_valid_message(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post( - self._get_url(self.dbuser), follow=True, data={ - 'password1': TEST_PASSWORD, 'password2': TEST_PASSWORD}) - messages = list(response.context['messages']) + self._get_url(self.dbuser), + follow=True, + data={"password1": TEST_PASSWORD, "password2": TEST_PASSWORD}, + ) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual( str(messages[0]), - 'Successfully changed password of database user {dbuser}.'.format( - dbuser=self.dbuser.name)) + "Successfully changed password of database user {dbuser}.".format( + dbuser=self.dbuser.name + ), + ) class DeleteUserDatabaseTest( - HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, - TestCase + HostingPackageAwareTestMixin, CustomerUserDatabaseOptionAwareTestMixin, TestCase ): - def setUp(self): self.customer = User.objects.create_user( - username=TEST_USER, password=TEST_PASSWORD) + username=TEST_USER, password=TEST_PASSWORD + ) self.package = self._setup_hosting_package(self.customer) template = self._create_userdatabase_option() self.database = UserDatabase.objects.create_userdatabase_with_user( - template.db_type, self.package.osuser) + template.db_type, self.package.osuser + ) def _get_url(self, userdatabase): return reverse( - 'delete_userdatabase', kwargs={ - 'package': self.package.id, - 'slug': userdatabase.db_name}) + "delete_userdatabase", + kwargs={"package": self.package.id, "slug": userdatabase.db_name}, + ) def test_get_anonymous(self): response = self.client.get(self._get_url(self.database)) @@ -288,34 +296,31 @@ class DeleteUserDatabaseTest( self.assertEqual(response.status_code, 200) def test_get_other_regular_user(self): - User.objects.create_user( - 'test2', password=TEST_PASSWORD) - self.client.login(username='test2', password=TEST_PASSWORD) + User.objects.create_user("test2", password=TEST_PASSWORD) + self.client.login(username="test2", password=TEST_PASSWORD) response = self.client.get(self._get_url(self.database)) self.assertEqual(response.status_code, 403) def test_get_staff_user(self): - User.objects.create_superuser( - 'admin', email=TEST_EMAIL, password=TEST_PASSWORD) - self.client.login(username='admin', password=TEST_PASSWORD) + User.objects.create_superuser("admin", email=TEST_EMAIL, password=TEST_PASSWORD) + self.client.login(username="admin", password=TEST_PASSWORD) response = self.client.get(self._get_url(self.database)) self.assertEqual(response.status_code, 200) def test_get_template(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url(self.database)) - self.assertTemplateUsed( - response, 'userdbs/userdatabase_confirm_delete.html') + self.assertTemplateUsed(response, "userdbs/userdatabase_confirm_delete.html") def test_get_context_data(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.get(self._get_url(self.database)) - self.assertIn('database', response.context) - self.assertEqual(response.context['database'], self.database) - self.assertIn('hostingpackage', response.context) - self.assertEqual(response.context['hostingpackage'], self.package) - self.assertIn('customer', response.context) - self.assertEqual(response.context['customer'], self.customer) + self.assertIn("database", response.context) + self.assertEqual(response.context["database"], self.database) + self.assertIn("hostingpackage", response.context) + self.assertEqual(response.context["hostingpackage"], self.package) + self.assertIn("customer", response.context) + self.assertEqual(response.context["customer"], self.customer) def test_form_valid_redirect(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) @@ -325,6 +330,6 @@ class DeleteUserDatabaseTest( def test_form_valid_message(self): self.client.login(username=TEST_USER, password=TEST_PASSWORD) response = self.client.post(self._get_url(self.database), follow=True) - messages = list(response.context['messages']) + messages = list(response.context["messages"]) self.assertEqual(len(messages), 1) self.assertEqual(str(messages[0]), "Database deleted.")