~lutostag/ubuntu/utopic/maas/1.5.2+packagefix

« back to all changes in this revision

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

  • Committer: Package Import Robot
  • Author(s): Andres Rodriguez, Graham Binns, Andres Rodriguez, Julian Edwards, Seth Arnold
  • Date: 2014-02-15 12:08:23 UTC
  • mfrom: (1.2.22)
  • Revision ID: package-import@ubuntu.com-20140215120823-kew2lqrw5qgww721
Tags: 1.5+bzr1948-0ubuntu1
* New upstream release.

[ Graham Binns ]
* debian/control: Depends on python-jsonschema.

[ Andres Rodriguez ]
* debian/maas-region-controller-min.posinst: Make txlongpoll.yaml only
  readable by the app and not world readeable.
* debian/patches/02-pserv-config.patch: Refreshed.

[ Julian Edwards ]
* debian/extras/maas-cli renamed to debian/extras/maas, and introduce
  a deprecation warning in favour of using maas over maas-cli.
* debian/extras/maas renamed to debian/extras/maas-region-admin
* debian/maas-cli.install: install debian/extras/maas
* debian/maas-dns.postinst: Invoke maas-region-admin instead of maas
* debian/maas-region-controller-min.install: install maas-region-admin
  instead of maas
* debian/maas-region-controller.postinst: Invoke maas-region-admin instead
  of maas
* debian/maas-cli.links: Link from maas to maas-cli for backward compat.

[ Seth Arnold ]
* debian/maas-region-controller-min.postinst: Make sure txlongpoll.yaml
  gets correct permissions on upgrade (LP: #1254034)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2012-2014 Canonical Ltd.  This software is licensed under the
2
 
# GNU Affero General Public License version 3 (see the file LICENSE).
3
 
 
4
 
"""Test maasserver clusters views."""
5
 
 
6
 
from __future__ import (
7
 
    absolute_import,
8
 
    print_function,
9
 
    unicode_literals,
10
 
    )
11
 
 
12
 
str = None
13
 
 
14
 
__metaclass__ = type
15
 
__all__ = []
16
 
 
17
 
import httplib
18
 
 
19
 
from django.core.urlresolvers import reverse
20
 
from lxml.html import fromstring
21
 
from maasserver.testing import (
22
 
    extract_redirect,
23
 
    get_content_links,
24
 
    )
25
 
from maasserver.testing.factory import factory
26
 
from maasserver.testing.testcase import MAASServerTestCase
27
 
from maasserver.views.settings_commissioning_scripts import (
28
 
    COMMISSIONING_SCRIPTS_ANCHOR,
29
 
    )
30
 
from metadataserver.models import CommissioningScript
31
 
from testtools.matchers import (
32
 
    ContainsAll,
33
 
    MatchesStructure,
34
 
    )
35
 
 
36
 
 
37
 
class CommissioningScriptListingTest(MAASServerTestCase):
38
 
 
39
 
    def test_settings_contains_names_and_content_of_scripts(self):
40
 
        self.client_log_in(as_admin=True)
41
 
        scripts = {
42
 
            factory.make_commissioning_script(),
43
 
            factory.make_commissioning_script(),
44
 
            }
45
 
        response = self.client.get(reverse('settings'))
46
 
        names = [script.name for script in scripts]
47
 
        contents = [script.content for script in scripts]
48
 
        self.assertThat(response.content, ContainsAll(names + contents))
49
 
 
50
 
    def test_settings_link_to_upload_script(self):
51
 
        self.client_log_in(as_admin=True)
52
 
        links = get_content_links(self.client.get(reverse('settings')))
53
 
        script_add_link = reverse('commissioning-script-add')
54
 
        self.assertIn(script_add_link, links)
55
 
 
56
 
    def test_settings_contains_links_to_delete_scripts(self):
57
 
        self.client_log_in(as_admin=True)
58
 
        scripts = {
59
 
            factory.make_commissioning_script(),
60
 
            factory.make_commissioning_script(),
61
 
            }
62
 
        links = get_content_links(self.client.get(reverse('settings')))
63
 
        script_delete_links = [
64
 
            reverse('commissioning-script-delete', args=[script.id])
65
 
            for script in scripts]
66
 
        self.assertThat(links, ContainsAll(script_delete_links))
67
 
 
68
 
    def test_settings_contains_commissioning_scripts_slot_anchor(self):
69
 
        self.client_log_in(as_admin=True)
70
 
        response = self.client.get(reverse('settings'))
71
 
        document = fromstring(response.content)
72
 
        slots = document.xpath(
73
 
            "//div[@id='%s']" % COMMISSIONING_SCRIPTS_ANCHOR)
74
 
        self.assertEqual(
75
 
            1, len(slots),
76
 
            "Missing anchor '%s'" % COMMISSIONING_SCRIPTS_ANCHOR)
77
 
 
78
 
 
79
 
class CommissioningScriptDeleteTest(MAASServerTestCase):
80
 
 
81
 
    def test_can_delete_commissioning_script(self):
82
 
        self.client_log_in(as_admin=True)
83
 
        script = factory.make_commissioning_script()
84
 
        delete_link = reverse('commissioning-script-delete', args=[script.id])
85
 
        response = self.client.post(delete_link, {'post': 'yes'})
86
 
        self.assertEqual(
87
 
            (httplib.FOUND, reverse('settings')),
88
 
            (response.status_code, extract_redirect(response)))
89
 
        self.assertFalse(
90
 
            CommissioningScript.objects.filter(id=script.id).exists())
91
 
 
92
 
 
93
 
class CommissioningScriptUploadTest(MAASServerTestCase):
94
 
 
95
 
    def test_can_create_commissioning_script(self):
96
 
        self.client_log_in(as_admin=True)
97
 
        content = factory.getRandomString()
98
 
        name = factory.make_name('filename')
99
 
        create_link = reverse('commissioning-script-add')
100
 
        filepath = self.make_file(name=name, contents=content)
101
 
        with open(filepath) as fp:
102
 
            response = self.client.post(
103
 
                create_link, {'name': name, 'content': fp})
104
 
        self.assertEqual(
105
 
            (httplib.FOUND, reverse('settings')),
106
 
            (response.status_code, extract_redirect(response)))
107
 
        new_script = CommissioningScript.objects.get(name=name)
108
 
        self.assertThat(
109
 
            new_script,
110
 
            MatchesStructure.byEquality(name=name, content=content))