1
# Copyright 2012-2014 Canonical Ltd. This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
4
"""Test maasserver clusters views."""
6
from __future__ import (
19
from django.core.urlresolvers import reverse
20
from lxml.html import fromstring
21
from maasserver.testing import (
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,
30
from metadataserver.models import CommissioningScript
31
from testtools.matchers import (
37
class CommissioningScriptListingTest(MAASServerTestCase):
39
def test_settings_contains_names_and_content_of_scripts(self):
40
self.client_log_in(as_admin=True)
42
factory.make_commissioning_script(),
43
factory.make_commissioning_script(),
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))
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)
56
def test_settings_contains_links_to_delete_scripts(self):
57
self.client_log_in(as_admin=True)
59
factory.make_commissioning_script(),
60
factory.make_commissioning_script(),
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))
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)
76
"Missing anchor '%s'" % COMMISSIONING_SCRIPTS_ANCHOR)
79
class CommissioningScriptDeleteTest(MAASServerTestCase):
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'})
87
(httplib.FOUND, reverse('settings')),
88
(response.status_code, extract_redirect(response)))
90
CommissioningScript.objects.filter(id=script.id).exists())
93
class CommissioningScriptUploadTest(MAASServerTestCase):
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})
105
(httplib.FOUND, reverse('settings')),
106
(response.status_code, extract_redirect(response)))
107
new_script = CommissioningScript.objects.get(name=name)
110
MatchesStructure.byEquality(name=name, content=content))