gva/gnuviechadmin/osusers/tests/test_forms.py
Jan Dittberner 3d18392b67 Fix tests for Python 3
- drop Python 2 __future__ imports
- fix tests to handle new Django and Python 3 module names
- reformat changed files with black
2019-01-30 21:27:25 +01:00

196 lines
7.1 KiB
Python

"""
This module provides tests for :py:mod:`osusers.forms`.
"""
from unittest.mock import MagicMock, Mock, patch
from django import forms
from django.test import TestCase
from django.contrib.auth import get_user_model
from django.urls import reverse
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
Customer = get_user_model()
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_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_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_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"}
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_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_key_text.return_value = sshpubkey.split(" ")
form.clean()
self.assertEqual(form.cleaned_data["publickeytext"], "good key comment")
@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)
SshPublicKey.objects.create(
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"])
@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_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")
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")