From 6a6347fce4e890a847c559224977f74794bbb2d0 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 4 Apr 2017 13:59:09 +0200
Subject: [PATCH] unit test for configuration api

---
 smash/web/api_urls.py                         |  3 +-
 smash/web/api_views/configuration.py          | 10 +++---
 smash/web/tests/functions.py                  | 11 ++++++-
 .../web/tests/test_api_configuration_item.py  | 33 +++++++++++++++++++
 smash/web/tests/test_view_configuration.py    | 16 +++++++++
 5 files changed, 67 insertions(+), 6 deletions(-)
 create mode 100644 smash/web/tests/test_api_configuration_item.py
 create mode 100644 smash/web/tests/test_view_configuration.py

diff --git a/smash/web/api_urls.py b/smash/web/api_urls.py
index 75569046..e6f8f746 100644
--- a/smash/web/api_urls.py
+++ b/smash/web/api_urls.py
@@ -26,7 +26,8 @@ urlpatterns = [
 
     # configuration items
     url(r'^configuration_items$', configuration.configuration_items, name='web.api.configuration_items'),
-    url(r'^configuration_items/update$', configuration.update_configuration_item, name='web.api.update_configuration_item'),
+    url(r'^configuration_items/update$', configuration.update_configuration_item,
+        name='web.api.update_configuration_item'),
 
     # subjects data
     url(r'^cities$', subject.cities, name='web.api.cities'),
diff --git a/smash/web/api_views/configuration.py b/smash/web/api_views/configuration.py
index 25d52962..305cbef0 100644
--- a/smash/web/api_views/configuration.py
+++ b/smash/web/api_views/configuration.py
@@ -32,9 +32,10 @@ def configuration_items(request):
         "data": data
     })
 
+
 @login_required
 def update_configuration_item(request):
-    id = int(request.GET.get("id", None))
+    id = int(request.GET.get("id", "-1"))
     value = request.GET.get("value", None)
 
     if (id is None) or (value is None):
@@ -43,13 +44,14 @@ def update_configuration_item(request):
             "message": "id and value are obligatory"
         })
 
-    item = ConfigurationItem.objects.get(id=id)
-    if item is None:
+    items = ConfigurationItem.objects.filter(id=id)
+    if len(items) == 0:
         return JsonResponse({
             "status": "error",
             "message": "item with given id doesn't exist"
         })
-    item.value=value
+    item = items[0]
+    item.value = value
     item.save()
     return JsonResponse({
         "status": "ok",
diff --git a/smash/web/tests/functions.py b/smash/web/tests/functions.py
index 2088fa6a..fea131ec 100644
--- a/smash/web/tests/functions.py
+++ b/smash/web/tests/functions.py
@@ -2,7 +2,7 @@ import datetime
 
 from django.contrib.auth.models import User
 
-from web.models import Location, AppointmentType, Subject, Worker, Visit, Appointment
+from web.models import Location, AppointmentType, Subject, Worker, Visit, Appointment, ConfigurationItem
 from web.models.constants import SEX_CHOICES_MALE, SUBJECT_TYPE_CHOICES_CONTROL
 from web.views.notifications import get_today_midnight_date
 
@@ -89,3 +89,12 @@ def create_appointment(visit=None, when=None):
         length=30,
         location=get_test_location(),
         datetime_when=when)
+
+
+def create_configuration_item():
+    item = ConfigurationItem.objects.create()
+    item.type = "TEST"
+    item.value = "xxx"
+    item.name = "yyy"
+    item.save()
+    return item;
diff --git a/smash/web/tests/test_api_configuration_item.py b/smash/web/tests/test_api_configuration_item.py
new file mode 100644
index 00000000..a550ff27
--- /dev/null
+++ b/smash/web/tests/test_api_configuration_item.py
@@ -0,0 +1,33 @@
+# coding=utf-8
+
+
+from django.urls import reverse
+
+from web.models import ConfigurationItem
+from web.tests.functions import create_configuration_item
+from . import LoggedInTestCase
+
+
+class TestConfigurationItemApi(LoggedInTestCase):
+    def test_configuration_items(self):
+        create_configuration_item()
+        response = self.client.get(reverse('web.api.configuration_items'))
+        self.assertEqual(response.status_code, 200)
+
+    def test_configuration_modify_invalid(self):
+        response = self.client.get(reverse('web.api.update_configuration_item'))
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue("error" in response.content)
+
+    def test_configuration_modify_invalid_2(self):
+        response = self.client.get(reverse('web.api.update_configuration_item'), {'id': "-15", 'value': "XXX"})
+        self.assertEqual(response.status_code, 200)
+        self.assertTrue("error" in response.content)
+
+    def test_configuration_modify(self):
+        item = create_configuration_item()
+        new_val = 'new val'
+        response = self.client.get(reverse('web.api.update_configuration_item'), {'id': item.id, 'value': new_val})
+        self.assertEqual(response.status_code, 200)
+        updated_item = ConfigurationItem.objects.get(id=item.id)
+        self.assertEqual(new_val, updated_item.value)
diff --git a/smash/web/tests/test_view_configuration.py b/smash/web/tests/test_view_configuration.py
new file mode 100644
index 00000000..44082285
--- /dev/null
+++ b/smash/web/tests/test_view_configuration.py
@@ -0,0 +1,16 @@
+import datetime
+
+from django.urls import reverse
+
+from functions import create_subject, create_visit, create_appointment, create_appointment_type
+from web.forms import VisitDetailForm, VisitAddForm
+from web.models import Visit
+from web.views.notifications import get_today_midnight_date
+from . import LoggedInTestCase
+
+
+class ConfigurationViewTests(LoggedInTestCase):
+    def test_visit_details_request(self):
+        response = self.client.get(reverse('web.views.configuration'))
+        self.assertEqual(response.status_code, 200)
+
-- 
GitLab