From f9fa1c9662fbf8cc9f9f6326271d5a83937fa6fd Mon Sep 17 00:00:00 2001
From: Bach Dániel <bach.daniel@cloud.bme.hu>
Date: Fri, 14 Mar 2014 17:40:02 +0100
Subject: [PATCH] dashboard: add new tests

---
 circle/dashboard/tests/test_views.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 circle/dashboard/views.py            |  3 ++-
 2 files changed, 94 insertions(+), 1 deletion(-)

diff --git a/circle/dashboard/tests/test_views.py b/circle/dashboard/tests/test_views.py
index 2179ab8..204f69a 100644
--- a/circle/dashboard/tests/test_views.py
+++ b/circle/dashboard/tests/test_views.py
@@ -360,6 +360,98 @@ class VmDetailTest(LoginMixin, TestCase):
         self.assertEqual(response.status_code, 302)
         self.assertEqual(len(host.list_ports()), port_count + 1)
 
+    def test_unpermitted_add_tag(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'user')
+        response = c.post("/dashboard/vm/1/", {'new_tag': 'test1'})
+        self.assertEqual(response.status_code, 403)
+
+    def test_permitted_add_tag(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'owner')
+        tag_count = inst.tags.count()
+        response = c.post("/dashboard/vm/1/", {'new_tag': 'test2'})
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(inst.tags.count(), tag_count + 1)
+
+    def test_permitted_add_tag_w_too_long_or_empty_tag(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'owner')
+        tag_count = inst.tags.count()
+        response = c.post("/dashboard/vm/1/", {'new_tag': 't' * 30})
+        self.assertEqual(response.status_code, 302)
+        response = c.post("/dashboard/vm/1/", {'new_tag': ''})
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(inst.tags.count(), tag_count)
+
+    def test_unpermitted_remove_tag(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'user')
+        tag_count = inst.tags.count()
+        response = c.post("/dashboard/vm/1/", {'to_remove': 'test1'})
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(inst.tags.count(), tag_count)
+
+    def test_permitted_remove_tag(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'owner')
+        response = c.post("/dashboard/vm/1/", {'new_tag': 'test1'})
+        tag_count = inst.tags.count()
+        response = c.post("/dashboard/vm/1/", {'to_remove': 'test1'})
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(inst.tags.count(), tag_count - 1)
+
+    def test_permitted_remove_tag_w_ajax(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'owner')
+        response = c.post("/dashboard/vm/1/", {'new_tag': 'test1'})
+        tag_count = inst.tags.count()
+        response = c.post("/dashboard/vm/1/", {'to_remove': 'test1'},
+                          HTTP_X_REQUESTED_WITH='XMLHttpRequest')
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(inst.tags.count(), tag_count - 1)
+
+    def test_unpermitted_set_name(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'user')
+        old_name = inst.name
+        response = c.post("/dashboard/vm/1/", {'new_name': 'test1235'})
+        self.assertEqual(response.status_code, 403)
+        self.assertEqual(Instance.objects.get(pk=1).name, old_name)
+
+    def test_permitted_set_name(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'owner')
+        response = c.post("/dashboard/vm/1/", {'new_name': 'test1234'})
+        self.assertEqual(response.status_code, 302)
+        self.assertEqual(Instance.objects.get(pk=1).name, 'test1234')
+
+    def test_permitted_set_name_w_ajax(self):
+        c = Client()
+        self.login(c, "user2")
+        inst = Instance.objects.get(pk=1)
+        inst.set_level(self.u2, 'owner')
+        response = c.post("/dashboard/vm/1/", {'new_name': 'test123'},
+                          HTTP_X_REQUESTED_WITH='XMLHttpRequest')
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(Instance.objects.get(pk=1).name, 'test123')
+
 
 class VmDetailVncTest(LoginMixin, TestCase):
     fixtures = ['test-vm-fixture.json', 'node.json']
diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py
index 2a67160..e0810b9 100644
--- a/circle/dashboard/views.py
+++ b/circle/dashboard/views.py
@@ -364,7 +364,8 @@ class VmDetailView(CheckedDetailView):
         except ValueError:
             error = _("There is a problem with your input!")
         except Exception as e:
-            error = u', '.join(e.messages)
+            error = _("Unknown error.")
+            logger.error(e)
 
         if request.is_ajax():
             pass
--
libgit2 0.26.0