From 2ca2e03a9f548c27205e27c69b917f7c2d26dbe4 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 14 Apr 2020 14:46:35 +0200
Subject: [PATCH] allow to send emails with kit requests every day

---
 .../tests/view/test_KitRequestEmailSendJob.py | 21 +++++++++++++++++--
 smash/web/views/kit.py                        | 16 +++++++++-----
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/smash/web/tests/view/test_KitRequestEmailSendJob.py b/smash/web/tests/view/test_KitRequestEmailSendJob.py
index f6e58798..557fa263 100644
--- a/smash/web/tests/view/test_KitRequestEmailSendJob.py
+++ b/smash/web/tests/view/test_KitRequestEmailSendJob.py
@@ -4,15 +4,18 @@ from django.core import mail
 from django_cron.models import CronJobLog
 from mockito import when
 
-from web.models.constants import KIT_EMAIL_HOUR_CONFIGURATION_TYPE
 from web.models import Item, AppointmentTypeLink, Worker, ConfigurationItem
+from web.models.constants import KIT_EMAIL_HOUR_CONFIGURATION_TYPE, KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE
 from web.tests import LoggedInTestCase
-from web.tests.functions import create_appointment_type, create_appointment
+from web.tests.functions import create_appointment_type, create_appointment, create_language
 from web.views.kit import KitRequestEmailSendJob
 from web.views.notifications import get_today_midnight_date
 
 
 class KitRequestEmailSendJobTests(LoggedInTestCase):
+    def setUp(self):
+        create_language(name="English")
+
     def test_kit_requests_send_email(self):
         CronJobLog.objects.all().delete()
         configuration = ConfigurationItem.objects.get(type=KIT_EMAIL_HOUR_CONFIGURATION_TYPE)
@@ -39,3 +42,17 @@ class KitRequestEmailSendJobTests(LoggedInTestCase):
         self.assertEqual("mail sent", status)
         self.assertEqual(1, len(mail.outbox))
         self.assertEqual(workers_count, Worker.objects.all().count())
+
+    def test_match_day_of_week_with_asterisk(self):
+        item = ConfigurationItem.objects.get(type=KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE)
+        item.value = "*"
+        item.save()
+
+        self.assertTrue(KitRequestEmailSendJob().match_day_of_week())
+
+    def test_match_day_of_week_with_unknown(self):
+        item = ConfigurationItem.objects.get(type=KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE)
+        item.value = "unknown_day_of_week"
+        item.save()
+
+        self.assertFalse(KitRequestEmailSendJob().match_day_of_week())
diff --git a/smash/web/views/kit.py b/smash/web/views/kit.py
index 3ccbfc9f..fe22f0e9 100644
--- a/smash/web/views/kit.py
+++ b/smash/web/views/kit.py
@@ -195,6 +195,8 @@ class KitRequestEmailSendJob(CronJobBase):
     def match_day_of_week(self):
         user_day_of_week = ConfigurationItem.objects.get(
             type=KIT_EMAIL_DAY_OF_WEEK_CONFIGURATION_TYPE).value
+        if user_day_of_week == "*":
+            return True
         language = Language.objects.get(name="English")
         locale_name = language.locale
         if platform.system() == 'Windows':
@@ -204,8 +206,12 @@ class KitRequestEmailSendJob(CronJobBase):
         except:
             logger.error("Problem with setting locale: " + locale_name)
 
-        user_day_of_week_int = int(time.strptime(
-            user_day_of_week, '%A').tm_wday) + 1
-        current_day_of_week_int = int(datetime.datetime.now().strftime("%w"))
-
-        return user_day_of_week_int == current_day_of_week_int
+        try:
+            user_day_of_week_int = int(time.strptime(
+                user_day_of_week, '%A').tm_wday) + 1
+            current_day_of_week_int = int(datetime.datetime.now().strftime("%w"))
+
+            return user_day_of_week_int == current_day_of_week_int
+        except ValueError:
+            logger.error("Invalid day of week: " + user_day_of_week)
+            return False
-- 
GitLab