diff --git a/docs/changelog.rst b/docs/changelog.rst
index d13de71..4deb5ac 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -1,6 +1,7 @@
Changelog
=========
+* :feature:`-` full test suite for managemails app
* :feature:`-` full test suite for domains app
* :feature:`-` full test suite for osusers.models
* :feature:`-` `Celery `_ integration for ldap
diff --git a/gnuviechadmin/managemails/tests/test_admin.py b/gnuviechadmin/managemails/tests/test_admin.py
new file mode 100644
index 0000000..fbe00b7
--- /dev/null
+++ b/gnuviechadmin/managemails/tests/test_admin.py
@@ -0,0 +1,189 @@
+from django import forms
+from django.core.urlresolvers import reverse
+from django.test import TestCase
+from django.test.utils import override_settings
+from django.utils.html import format_html
+from django.utils.translation import ugettext as _
+
+from django.contrib.admin import AdminSite
+
+from mock import Mock
+
+from osusers.models import User
+
+from managemails.admin import (
+ ActivationChangeMixin,
+ MailboxAdmin,
+ MailboxChangeForm,
+ MailboxCreationForm,
+ PASSWORD_MISMATCH_ERROR,
+ ReadOnlyPasswordHashField,
+ ReadOnlyPasswordHashWidget,
+)
+from managemails.models import (
+ Mailbox,
+)
+
+
+class TestReadOnlyPasswordHashWidget(TestCase):
+ def test_render(self):
+ widget = ReadOnlyPasswordHashWidget()
+ rendered = widget.render('password', 'secret', {'class': 'test'})
+ self.assertEqual(
+ rendered,
+ format_html(
+ '
{0}
',
+ format_html('{0}: secret ',
+ _('Hash'))
+ ))
+
+
+class TestReadOnlyPasswordHashField(TestCase):
+ def test___init__(self):
+ field = ReadOnlyPasswordHashField()
+ self.assertFalse(field.required)
+
+ def test_bound_data(self):
+ field = ReadOnlyPasswordHashField()
+ self.assertEqual(field.bound_data('new', 'old'), 'old')
+
+ def test__has_changed(self):
+ field = ReadOnlyPasswordHashField()
+ self.assertFalse(field._has_changed('new', 'old'))
+
+
+class TestMailboxCreationForm(TestCase):
+ def test_clean_password2_same(self):
+ form = MailboxCreationForm()
+ form.cleaned_data = {'password1': 'secret', 'password2': 'secret'}
+ self.assertEqual(form.clean_password2(), 'secret')
+
+ def test_clean_password2_empty(self):
+ form = MailboxCreationForm()
+ form.cleaned_data = {}
+ self.assertIsNone(form.clean_password2())
+
+ def test_clean_password2_mismatch(self):
+ form = MailboxCreationForm()
+ 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'
+ )
+ def test_save_commit(self):
+ user = User.objects.create_user()
+ 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)
+
+ @override_settings(
+ CELERY_ALWAYS_EAGER=True,
+ CELERY_CACHE_BACKEND='memory',
+ BROKER_BACKEND='memory'
+ )
+ def test_save_no_commit(self):
+ user = User.objects.create_user()
+ 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)
+
+
+class TestMailboxChangeForm(TestCase):
+ @override_settings(
+ 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())
+ mailbox.set_password('test')
+ mailbox.save()
+ form = MailboxChangeForm(instance=mailbox, data={'password': 'blub'})
+ self.assertEqual(form.clean_password(), mailbox.password)
+
+
+class TestActivationChangeMixin(TestCase):
+ def test_activate(self):
+ querysetmock = Mock()
+ activationchange = ActivationChangeMixin()
+ activationchange.activate(Mock(), querysetmock)
+ querysetmock.update.called_with(active=True)
+
+ def test_deactivate(self):
+ querysetmock = Mock()
+ activationchange = ActivationChangeMixin()
+ activationchange.deactivate(Mock(), querysetmock)
+ querysetmock.update.called_with(active=False)
+
+
+class TestMailBoxAdmin(TestCase):
+ def setUp(self):
+ site = AdminSite()
+ self.mbadmin = MailboxAdmin(Mailbox, site)
+
+ def test_get_fieldsets_without_object(self):
+ self.assertEqual(
+ self.mbadmin.get_fieldsets(Mock()),
+ self.mbadmin.add_fieldsets)
+
+ @override_settings(
+ 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())
+ mailbox.set_password('test')
+ mailbox.save()
+ self.assertEqual(
+ 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,
+ ['username', 'password1', 'password2']
+ )
+
+ @override_settings(
+ 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())
+ mailbox.set_password('test')
+ mailbox.save()
+ form = self.mbadmin.get_form(Mock, mailbox)
+ self.assertEqual(
+ form.Meta.fields,
+ ['username', 'password', 'osuser', 'active']
+ )
+
+ def test_admin_for_mailbox(self):
+ admin_url = reverse('admin:managemails_mailaddress_changelist')
+ self.assertIsNotNone(admin_url)
+
+
+class TestMailAddressAdmin(TestCase):
+ def test_admin_for_mailaddress(self):
+ admin_url = reverse('admin:managemails_mailaddress_changelist')
+ self.assertIsNotNone(admin_url)
diff --git a/gnuviechadmin/managemails/tests/test_models.py b/gnuviechadmin/managemails/tests/test_models.py
index a731ae0..4df1793 100644
--- a/gnuviechadmin/managemails/tests/test_models.py
+++ b/gnuviechadmin/managemails/tests/test_models.py
@@ -1,14 +1,22 @@
from django.test import TestCase
+from django.test.utils import override_settings
+
from passlib.hash import sha512_crypt
from domains.models import MailDomain
from osusers.models import User
+
from managemails.models import (
MailAddress,
Mailbox,
)
+@override_settings(
+ CELERY_ALWAYS_EAGER=True,
+ CELERY_CACHE_BACKEND='memory',
+ BROKER_BACKEND='memory'
+)
class MailboxTest(TestCase):
def test_set_password(self):
user = User.objects.create_user()
@@ -16,6 +24,12 @@ class MailboxTest(TestCase):
mb.set_password('test')
self.assertTrue(sha512_crypt.verify('test', mb.password))
+ def test___str__(self):
+ user = User.objects.create_user()
+ mb = Mailbox.objects.create(username='test', osuser=user)
+ mb.set_password('test')
+ self.assertEqual(str(mb), 'test')
+
class MailAddressTest(TestCase):
def test__str__(self):
diff --git a/gnuviechadmin/managemails/views.py b/gnuviechadmin/managemails/views.py
deleted file mode 100644
index 91ea44a..0000000
--- a/gnuviechadmin/managemails/views.py
+++ /dev/null
@@ -1,3 +0,0 @@
-from django.shortcuts import render
-
-# Create your views here.