From 54e070e913d3c97842abd1c41a5409d522d424c1 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 14 Jun 2017 18:41:25 +0200
Subject: [PATCH] validation paterns added for configuration items

---
 smash/web/models/configuration_item.py        | 24 ++++++++++++++++++-
 .../web/tests/test_api_configuration_item.py  | 21 ++++++++++++++++
 2 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/smash/web/models/configuration_item.py b/smash/web/models/configuration_item.py
index a82d1ca9..0129315a 100644
--- a/smash/web/models/configuration_item.py
+++ b/smash/web/models/configuration_item.py
@@ -1,6 +1,11 @@
 # coding=utf-8
+import re
 from django.db import models
 
+from web.models.constants import CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE, \
+    NO_SHOW_APPOINTMENT_COLOR_CONFIGURATION_TYPE, KIT_EMAIL_HOUR_CONFIGURATION_TYPE, \
+    KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE
+
 
 class ConfigurationItem(models.Model):
     type = models.CharField(max_length=50,
@@ -24,4 +29,21 @@ class ConfigurationItem(models.Model):
 
     @staticmethod
     def is_valid(item):
-        return True
+        message = ConfigurationItem.validation_error(item)
+        return message == ""
+
+    @staticmethod
+    def validation_error(item):
+        pattern = None
+        if item.type == CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE \
+                or item.type == NO_SHOW_APPOINTMENT_COLOR_CONFIGURATION_TYPE:
+            pattern = "^#[0-9a-fA-F]+$"
+        if item.type == KIT_EMAIL_HOUR_CONFIGURATION_TYPE:
+            pattern = "^[0-9]{2}:[0-9]{2}$"
+        if item.type == KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE:
+            pattern = "^(MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|SUNDAY)$"
+        if pattern is not None:
+            if not re.compile(pattern).match(item.value):
+                return "Invalid value of param: " + item.name + ". It should match regex pattern: " + pattern
+
+        return ""
diff --git a/smash/web/tests/test_api_configuration_item.py b/smash/web/tests/test_api_configuration_item.py
index a550ff27..78ef0d16 100644
--- a/smash/web/tests/test_api_configuration_item.py
+++ b/smash/web/tests/test_api_configuration_item.py
@@ -6,6 +6,9 @@ from django.urls import reverse
 from web.models import ConfigurationItem
 from web.tests.functions import create_configuration_item
 from . import LoggedInTestCase
+from web.models.constants import CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE, \
+    NO_SHOW_APPOINTMENT_COLOR_CONFIGURATION_TYPE, KIT_EMAIL_HOUR_CONFIGURATION_TYPE, \
+    KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE
 
 
 class TestConfigurationItemApi(LoggedInTestCase):
@@ -31,3 +34,21 @@ class TestConfigurationItemApi(LoggedInTestCase):
         self.assertEqual(response.status_code, 200)
         updated_item = ConfigurationItem.objects.get(id=item.id)
         self.assertEqual(new_val, updated_item.value)
+
+    def test_configuration_modify_CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE_invalid_value(self):
+        item = ConfigurationItem.objects.get(type=CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE)
+        invalid_val = 'invalid color'
+
+        response = self.client.get(reverse('web.api.update_configuration_item'), {'id': item.id, 'value': invalid_val})
+        self.assertEqual(response.status_code, 200)
+        updated_item = ConfigurationItem.objects.get(type=CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE)
+        self.assertNotEqual(invalid_val, updated_item.value)
+
+    def test_configuration_modify_CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE_valid_value(self):
+        item = ConfigurationItem.objects.get(type=CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE)
+        invalid_val = '#FFFFFF'
+
+        response = self.client.get(reverse('web.api.update_configuration_item'), {'id': item.id, 'value': invalid_val})
+        self.assertEqual(response.status_code, 200)
+        updated_item = ConfigurationItem.objects.get(type=CANCELLED_APPOINTMENT_COLOR_CONFIGURATION_TYPE)
+        self.assertEqual(invalid_val, updated_item.value)
-- 
GitLab