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 django.contrib.auth import get_user_model 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, ) Customer = get_user_model() class ReadOnlyPasswordHashWidgetTest(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 ReadOnlyPasswordHashFieldTest(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 CustomerTestCase(TestCase): def setUp(self): super(CustomerTestCase, self).setUp() 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') 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(customer=self.customer) 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(customer=self.customer) 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 MailboxChangeFormTest(CustomerTestCase): @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(customer=self.customer)) mailbox.set_password('test') mailbox.save() form = MailboxChangeForm(instance=mailbox, data={'password': 'blub'}) self.assertEqual(form.clean_password(), mailbox.password) class ActivationChangeMixinTest(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 MailBoxAdminTest(CustomerTestCase): def setUp(self): super(MailBoxAdminTest, self).setUp() 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(customer=self.customer)) 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, ['osuser', '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(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'] ) def test_admin_for_mailbox(self): 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') self.assertIsNotNone(admin_url)