diff --git a/src/fn/compile-app-settings.js b/src/fn/compile-app-settings.js index 45904cbc9..b97fd9976 100644 --- a/src/fn/compile-app-settings.js +++ b/src/fn/compile-app-settings.js @@ -72,6 +72,7 @@ const compileAppSettingsForProject = async (projectDir, options) => { } return maxTaskNotifications; }; + const isValidTimeFormat = (time) => /^([01]\d|2[0-3]):[0-5]\d$/.test(time); // Fail if no eslintrc file is found if (!fs.exists(esLintFilePath)) { @@ -142,6 +143,16 @@ const compileAppSettingsForProject = async (projectDir, options) => { delete appSettings.max_task_notifications; } + if (appSettings.task_notification_window) { + const startTime = appSettings.task_notification_window.start; + const endTime = appSettings.task_notification_window.end; + if (!isValidTimeFormat(startTime) || !isValidTimeFormat(endTime)) { + throw new Error(`Invalid task notification window time`); + } + appSettings.tasks.task_notification_window = appSettings.task_notification_window; + delete appSettings.task_notification_window; + } + const purgeConfig = parsePurge(projectDir); if (purgeConfig) { appSettings.purge = purgeConfig; diff --git a/test/data/compile-app-settings/task-notifications/app_settings.expected.json b/test/data/compile-app-settings/task-notifications/app_settings.expected.json index e104b6a4c..fdbebb691 100644 --- a/test/data/compile-app-settings/task-notifications/app_settings.expected.json +++ b/test/data/compile-app-settings/task-notifications/app_settings.expected.json @@ -5,7 +5,11 @@ "tasks": { "rules": "", "targets": {}, - "max_task_notifications": 25 + "max_task_notifications": 25, + "task_notification_window": { + "start": "08:00", + "end": "19:00" + } }, "purge": {} } diff --git a/test/data/compile-app-settings/task-notifications/invalid-notification-window/.eslintrc b/test/data/compile-app-settings/task-notifications/invalid-notification-window/.eslintrc new file mode 100644 index 000000000..e69de29bb diff --git a/test/data/compile-app-settings/task-notifications/invalid-notification-window/app_settings/base_settings.json b/test/data/compile-app-settings/task-notifications/invalid-notification-window/app_settings/base_settings.json new file mode 100644 index 000000000..618517484 --- /dev/null +++ b/test/data/compile-app-settings/task-notifications/invalid-notification-window/app_settings/base_settings.json @@ -0,0 +1,9 @@ +{ + "locale": "en", + "forms": {}, + "max_task_notifications": 25, + "task_notification_window": { + "start": "08:00", + "end": "25:99" + } +} \ No newline at end of file diff --git a/test/data/compile-app-settings/task-notifications/invalid-notification-window/contact-summary.js b/test/data/compile-app-settings/task-notifications/invalid-notification-window/contact-summary.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/data/compile-app-settings/task-notifications/invalid-notification-window/rules.nools.js b/test/data/compile-app-settings/task-notifications/invalid-notification-window/rules.nools.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/data/compile-app-settings/task-notifications/invalid-notification-window/targets.json b/test/data/compile-app-settings/task-notifications/invalid-notification-window/targets.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/test/data/compile-app-settings/task-notifications/invalid-notification-window/targets.json @@ -0,0 +1 @@ +{} diff --git a/test/data/compile-app-settings/task-notifications/project/app_settings/base_settings.json b/test/data/compile-app-settings/task-notifications/project/app_settings/base_settings.json index b233c1fb2..34bb1fd2c 100644 --- a/test/data/compile-app-settings/task-notifications/project/app_settings/base_settings.json +++ b/test/data/compile-app-settings/task-notifications/project/app_settings/base_settings.json @@ -1,5 +1,9 @@ { "locale": "en", "forms": {}, - "max_task_notifications": 25 + "max_task_notifications": 25, + "task_notification_window": { + "start": "08:00", + "end": "19:00" + } } \ No newline at end of file diff --git a/test/fn/compile-app-settings.spec.js b/test/fn/compile-app-settings.spec.js index 96a9e1db6..9d9ee0fa7 100644 --- a/test/fn/compile-app-settings.spec.js +++ b/test/fn/compile-app-settings.spec.js @@ -70,6 +70,10 @@ const scenarios = [ description: 'should handle a configuration using the assetlinks.json file', folder: 'android-app-links/project', }, + { + description: 'should compile max_task_notifications to tasks.max_task_notifications', + folder: 'task-notifications/project', + }, // REJECTION SCENARIOS { @@ -128,8 +132,9 @@ const scenarios = [ error: 'Invalid assetlinks: ValidationError: "[0].target.sha256_cert_fingerprints" is required', }, { - description: 'should compile max_task_notifications to tasks.max_task_notifications', - folder: 'task-notifications/project', + description: 'should reject a task notification window with an invalid time format', + folder: 'task-notifications/invalid-notification-window', + error: 'Invalid task notification window time', } ];