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