gva/gnuviechadmin/managemails/tests/test_views.py
Jan Dittberner 30600ce107 Add tests for managemails.views
This commit adds a test suite for the views defined in
managemails.views. One issue discovered when writing tests is fixed by
checking the request method in CreateMailbox.dispatch.
2015-11-28 19:01:52 +00:00

662 lines
27 KiB
Python

"""
Tests for :py:mod:`managemails.views`.
"""
from __future__ import absolute_import, unicode_literals
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 domains.models import MailDomain
from hostingpackages.models import (
CustomerHostingPackage,
HostingPackageTemplate,
)
from managemails.forms import MAILBOX_OR_FORWARDS
from managemails.models import MailAddress, Mailbox
from managemails.views import (
AddMailAddress,
ChangeMailboxPassword,
CreateMailbox,
EditMailAddress,
)
User = get_user_model()
TEST_USER = 'test'
TEST_PASSWORD = 'secret'
TEST_EMAIL = 'test@example.org'
TEST_NAME = 'Example Tester'.split()
class HostingPackageAwareTestMixin(object):
def _setup_hosting_package(self, customer, mailboxcount):
template = HostingPackageTemplate.objects.create(
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:
hmsettings.OSUSER_DEFAULT_GROUPS = []
package.save()
return package
@override_settings(
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}))
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)
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.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)
User.objects.create_user(
'test2', email='test2@example.org', password=TEST_PASSWORD)
package = self._setup_hosting_package(customer, 1)
self.client.login(username='test2', password=TEST_PASSWORD)
response = self.client.get(
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')
package = self._setup_hosting_package(customer, 1)
User.objects.create_superuser(
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}))
self.assertEqual(response.status_code, 200)
def test_get_template(self):
customer = User.objects.create_user(
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')
def test_get_no_more_mailboxes(self):
customer = User.objects.create_user(
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}))
self.assertEqual(response.status_code, 403)
self.assertEqual(
response.content,
'You are not allowed to add more mailboxes to this hosting'
' package')
def test_get_context_data(self):
customer = User.objects.create_user(
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)
def test_get_form_kwargs(self):
customer = User.objects.create_user(
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)})
the_kwargs = view.get_form_kwargs()
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)
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})
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)
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}),
follow=True,
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]))
@override_settings(
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)
self.package = self._setup_hosting_package(self.customer, 1)
self.mailbox = Mailbox.objects.create_mailbox(
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}))
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}))
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)
response = self.client.get(
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)
response = self.client.get(
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')
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)
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})
the_kwargs = view.get_form_kwargs()
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})
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}),
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 set new password for mailbox usr01p01.')
@override_settings(
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)
self.package = self._setup_hosting_package(self.customer, 1)
self.maildomain = MailDomain.objects.create(
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
}))
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
}))
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)
response = self.client.get(
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)
response = self.client.get(
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')
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)
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})
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)
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
}),
data={
'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
}),
follow=True,
data={
'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')
@override_settings(
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)
self.package = self._setup_hosting_package(self.customer, 1)
self.maildomain = MailDomain.objects.create(
domain='example.org', customer=self.customer)
self.mailaddress = MailAddress.objects.create(
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}))
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}))
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)
response = self.client.get(
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)
response = self.client.get(
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')
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)
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={})
self.assertRedirects(response, self.package.get_absolute_url())
@override_settings(
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)
self.package = self._setup_hosting_package(self.customer, 1)
self.maildomain = MailDomain.objects.create(
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'])
def _set_mailaddress_with_mailbox(self):
self.mailaddress = MailAddress.objects.create(
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}))
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}))
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)
response = self.client.get(
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)
response = self.client.get(
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')
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)
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)})
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)
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)})
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)
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)})
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)
def test_get_initial_with_unassigned_address(self):
self.mailaddress = MailAddress.objects.create(
localpart='test', domain=self.maildomain)
view = EditMailAddress(
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)
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}),
data={
'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}),
follow=True,
data={
'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.')