2015-12-06 15:35:23 +01:00
|
|
|
"""
|
|
|
|
This module provides tests for :py:mod:`osusers.forms`.
|
|
|
|
|
|
|
|
"""
|
|
|
|
from __future__ import absolute_import, unicode_literals
|
|
|
|
|
|
|
|
from 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 passlib.hash import sha512_crypt
|
|
|
|
|
|
|
|
from osusers.forms import (
|
|
|
|
AddSshPublicKeyForm,
|
|
|
|
ChangeOsUserPasswordForm,
|
|
|
|
DUPLICATE_SSH_PUBLIC_KEY_FOR_USER,
|
|
|
|
EditSshPublicKeyCommentForm,
|
|
|
|
INVALID_SSH_PUBLIC_KEY,
|
|
|
|
)
|
|
|
|
|
|
|
|
from osusers.models import SshPublicKey, User
|
|
|
|
|
2016-01-31 16:35:26 +01:00
|
|
|
Customer = get_user_model()
|
|
|
|
|
2015-12-06 15:35:23 +01:00
|
|
|
|
|
|
|
class AddSshPublicKeyFormTest(TestCase):
|
|
|
|
"""
|
|
|
|
Test for :py:class:`osusers.forms.AddSshPublicKeyForm`.
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
def _setup_hostingpackage(self):
|
|
|
|
customer = Customer.objects.create_user('test')
|
|
|
|
user = User.objects.create_user(customer=customer)
|
|
|
|
self.hostingpackage = Mock(id=42, osuser=user)
|
|
|
|
|
|
|
|
def test_constructor_needs_hostingpackage(self):
|
|
|
|
instance = MagicMock()
|
|
|
|
with self.assertRaises(KeyError) as ke:
|
|
|
|
AddSshPublicKeyForm(instance)
|
|
|
|
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'))
|
|
|
|
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')
|
|
|
|
|
|
|
|
@patch('osusers.forms.SshPublicKey.objects.parse_keytext')
|
|
|
|
def test_clean_publickeytext_invalid(self, parse_keytext):
|
|
|
|
self._setup_hostingpackage()
|
|
|
|
instance = MagicMock()
|
|
|
|
form = AddSshPublicKeyForm(
|
|
|
|
instance, hostingpackage=self.hostingpackage)
|
|
|
|
form.cleaned_data = {'publickeytext': 'a bad key'}
|
|
|
|
parse_keytext.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):
|
|
|
|
self._setup_hostingpackage()
|
|
|
|
instance = MagicMock()
|
|
|
|
form = AddSshPublicKeyForm(
|
|
|
|
instance, hostingpackage=self.hostingpackage)
|
|
|
|
form.cleaned_data = {'publickeytext': 'good key comment'}
|
|
|
|
retval = form.clean_publickeytext()
|
|
|
|
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.clean()
|
|
|
|
self.assertIsNone(form.cleaned_data['publickeytext'])
|
|
|
|
|
|
|
|
@patch('osusers.forms.SshPublicKey.objects.parse_keytext')
|
|
|
|
def test_clean_fresh(self, parse_keytext):
|
|
|
|
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.clean()
|
|
|
|
self.assertEqual(
|
|
|
|
form.cleaned_data['publickeytext'], 'good key comment')
|
|
|
|
|
|
|
|
@patch('osusers.forms.SshPublicKey.objects.parse_keytext')
|
|
|
|
def test_clean_duplicate(self, parse_keytext):
|
|
|
|
self._setup_hostingpackage()
|
|
|
|
instance = MagicMock()
|
|
|
|
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(' ')
|
|
|
|
form.clean()
|
|
|
|
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):
|
|
|
|
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(' ')
|
|
|
|
retval = form.save()
|
|
|
|
self.assertTrue(isinstance(retval, SshPublicKey))
|
|
|
|
self.assertEqual(retval.algorithm, 'good')
|
|
|
|
self.assertEqual(retval.data, 'key')
|
|
|
|
self.assertEqual(retval.comment, 'comment')
|
|
|
|
|
|
|
|
|
|
|
|
class ChangeOsUserPasswordFormTest(TestCase):
|
|
|
|
"""
|
|
|
|
Test for :py:class:`osusers.forms.ChangeOsUserPasswordForm`.
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
def _setup_user(self):
|
|
|
|
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.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')
|
|
|
|
|
|
|
|
def test_save(self):
|
|
|
|
self._setup_user()
|
|
|
|
form = ChangeOsUserPasswordForm(instance=self.user)
|
|
|
|
form.cleaned_data = {'password1': 'test'}
|
|
|
|
user = form.save()
|
|
|
|
self.assertTrue(sha512_crypt.verify('test', user.shadow.passwd))
|
|
|
|
|
|
|
|
|
|
|
|
class EditSshPublicKeyCommentFormTest(TestCase):
|
|
|
|
"""
|
|
|
|
Test for :py:class:`osusers.forms.EditSshPublicKeyCommentForm`.
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
def _setup_hostingpackage(self):
|
|
|
|
customer = Customer.objects.create_user('test')
|
|
|
|
user = User.objects.create_user(customer=customer)
|
|
|
|
self.hostingpackage = Mock(id=42, osuser=user)
|
|
|
|
|
|
|
|
def test_constructor_needs_hostingpackage(self):
|
|
|
|
instance = MagicMock()
|
|
|
|
with self.assertRaises(KeyError) as ke:
|
|
|
|
EditSshPublicKeyCommentForm(instance)
|
|
|
|
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'))
|
|
|
|
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')
|