~lutostag/ubuntu/trusty/maas/1.5.4+keystone

« back to all changes in this revision

Viewing changes to src/maasserver/tests/test_forms.py

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez
  • Date: 2013-03-04 11:49:44 UTC
  • mto: This revision was merged to the branch mainline in revision 25.
  • Revision ID: package-import@ubuntu.com-20130304114944-azcvu9anlf8mizpa
Tags: upstream-1.3+bzr1452+dfsg
ImportĀ upstreamĀ versionĀ 1.3+bzr1452+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
from django import forms
18
18
from django.contrib.auth.models import User
19
 
from django.core.exceptions import (
20
 
    PermissionDenied,
21
 
    ValidationError,
22
 
    )
 
19
from django.core.exceptions import PermissionDenied
 
20
from django.core.files.uploadedfile import SimpleUploadedFile
23
21
from django.http import QueryDict
24
22
from maasserver.enum import (
25
23
    ARCHITECTURE,
32
30
from maasserver.forms import (
33
31
    AdminNodeForm,
34
32
    AdminNodeWithMACAddressesForm,
 
33
    CommissioningScriptForm,
35
34
    ConfigForm,
36
35
    EditUserForm,
37
36
    get_action_form,
38
37
    get_node_create_form,
39
38
    get_node_edit_form,
40
 
    HostnameFormField,
41
39
    initialize_node_group,
42
40
    INTERFACES_VALIDATION_ERROR_MESSAGE,
43
41
    MACAddressForm,
50
48
    NodeWithMACAddressesForm,
51
49
    ProfileForm,
52
50
    remove_None_values,
53
 
    validate_hostname,
54
51
    )
55
52
from maasserver.models import (
56
53
    Config,
67
64
from maasserver.testing import reload_object
68
65
from maasserver.testing.factory import factory
69
66
from maasserver.testing.testcase import TestCase
 
67
from metadataserver.models import CommissioningScript
70
68
from netaddr import IPNetwork
71
69
from provisioningserver.enum import POWER_TYPE_CHOICES
72
70
from testtools.matchers import (
270
268
        self.assertEqual(value, form.initial['field1'])
271
269
 
272
270
 
273
 
class FormWithHostname(forms.Form):
274
 
    hostname = HostnameFormField()
275
 
 
276
 
 
277
271
class NodeEditForms(TestCase):
278
272
 
279
273
    def test_NodeForm_contains_limited_set_of_fields(self):
505
499
            form.save()
506
500
 
507
501
 
508
 
class TestHostnameFormField(TestCase):
509
 
 
510
 
    def test_validate_hostname_validates_valid_hostnames(self):
511
 
        self.assertIsNone(validate_hostname('host.example.com'))
512
 
        self.assertIsNone(validate_hostname('host.my-example.com'))
513
 
        self.assertIsNone(validate_hostname('my-example.com'))
514
 
        #  No ValidationError.
515
 
 
516
 
    def test_validate_hostname_does_not_validate_invalid_hostnames(self):
517
 
        self.assertRaises(ValidationError, validate_hostname, 'invalid-host')
518
 
 
519
 
    def test_validate_hostname_does_not_validate_too_long_hostnames(self):
520
 
        self.assertRaises(ValidationError, validate_hostname, 'toolong' * 100)
521
 
 
522
 
    def test_hostname_field_validation_cleaned_data_if_hostname_valid(self):
523
 
        form = FormWithHostname({'hostname': 'host.example.com'})
524
 
 
525
 
        self.assertTrue(form.is_valid())
526
 
        self.assertEqual('host.example.com', form.cleaned_data['hostname'])
527
 
 
528
 
    def test_hostname_field_validation_error_if_invalid_hostname(self):
529
 
        form = FormWithHostname({'hostname': 'invalid-host'})
530
 
 
531
 
        self.assertFalse(form.is_valid())
532
 
        self.assertItemsEqual(['hostname'], list(form.errors))
533
 
        self.assertEqual(
534
 
            ["Enter a valid hostname (e.g. host.example.com)."],
535
 
            form.errors['hostname'])
536
 
 
537
 
 
538
502
class TestUniqueEmailForms(TestCase):
539
503
 
540
504
    def assertFormFailsValidationBecauseEmailNotUnique(self, form):
983
947
        self.assertTrue(form.is_valid())
984
948
        form.save()
985
949
        self.assertEqual(data['name'], reload_object(nodegroup).name)
 
950
 
 
951
 
 
952
class TestCommissioningScriptForm(TestCase):
 
953
 
 
954
    def test_creates_commissioning_script(self):
 
955
        content = factory.getRandomString()
 
956
        name = factory.make_name('filename')
 
957
        uploaded_file = SimpleUploadedFile(content=content, name=name)
 
958
        form = CommissioningScriptForm(files={'content': uploaded_file})
 
959
        self.assertTrue(form.is_valid(), form._errors)
 
960
        form.save()
 
961
        new_script = CommissioningScript.objects.get(name=name)
 
962
        self.assertThat(
 
963
            new_script,
 
964
            MatchesStructure.byEquality(name=name, content=content))
 
965
 
 
966
    def test_raises_if_duplicated_name(self):
 
967
        content = factory.getRandomString()
 
968
        name = factory.make_name('filename')
 
969
        factory.make_commissioning_script(name=name)
 
970
        uploaded_file = SimpleUploadedFile(content=content, name=name)
 
971
        form = CommissioningScriptForm(files={'content': uploaded_file})
 
972
        self.assertEqual(
 
973
            (False, {'content': ["A script with that name already exists."]}),
 
974
            (form.is_valid(), form._errors))
 
975
 
 
976
    def test_rejects_whitespace_in_name(self):
 
977
        name = factory.make_name('with space')
 
978
        uploaded_file = SimpleUploadedFile(
 
979
            content=factory.getRandomString(), name=name)
 
980
        form = CommissioningScriptForm(files={'content': uploaded_file})
 
981
        self.assertFalse(form.is_valid())
 
982
        self.assertEqual(
 
983
            ["Name contains disallowed characters (e.g. space or quotes)."],
 
984
            form._errors['content'])
 
985
 
 
986
    def test_rejects_quotes_in_name(self):
 
987
        name = factory.make_name("l'horreur")
 
988
        uploaded_file = SimpleUploadedFile(
 
989
            content=factory.getRandomString(), name=name)
 
990
        form = CommissioningScriptForm(files={'content': uploaded_file})
 
991
        self.assertFalse(form.is_valid())
 
992
        self.assertEqual(
 
993
            ["Name contains disallowed characters (e.g. space or quotes)."],
 
994
            form._errors['content'])