From f6f99ec57e8b7445f343ddb8cd0eec02378cff2b Mon Sep 17 00:00:00 2001 From: MathWhiz Date: Tue, 6 Jun 2017 10:05:17 -0700 Subject: [PATCH] Require Dailies to have a Start Date (#8649) * Require Dailies to have a Start Date * Add preliminary test * Fix lint errors --- .../integration/tasks/POST-tasks_user.test.js | 12 +++ website/server/models/task.js | 1 + .../views/shared/tasks/edit/repeatables.jade | 76 +++++++++---------- 3 files changed, 51 insertions(+), 38 deletions(-) diff --git a/test/api/v3/integration/tasks/POST-tasks_user.test.js b/test/api/v3/integration/tasks/POST-tasks_user.test.js index 4f90dedd49..98ee718c1d 100644 --- a/test/api/v3/integration/tasks/POST-tasks_user.test.js +++ b/test/api/v3/integration/tasks/POST-tasks_user.test.js @@ -615,6 +615,18 @@ describe('POST /tasks/user', () => { expect((new Date(task.startDate)).getDay()).to.eql(today); }); + it('returns an error if the start date is empty', async () => { + await expect(user.post('/tasks/user', { + text: 'test daily', + type: 'daily', + startDate: '', + })).to.eventually.be.rejected.and.eql({ + code: 400, + error: 'BadRequest', + message: 'daily validation failed', + }); + }); + it('can create checklists', async () => { let task = await user.post('/tasks/user', { text: 'test daily', diff --git a/website/server/models/task.js b/website/server/models/task.js index ee09612d46..8c5c3aa87a 100644 --- a/website/server/models/task.js +++ b/website/server/models/task.js @@ -229,6 +229,7 @@ export let DailySchema = new Schema(_.defaults({ default () { return moment().startOf('day').toDate(); }, + required: true, }, repeat: { // used only for 'weekly' frequency, m: {type: Boolean, default: true}, diff --git a/website/views/shared/tasks/edit/repeatables.jade b/website/views/shared/tasks/edit/repeatables.jade index 5bb8e72911..13748ac433 100644 --- a/website/views/shared/tasks/edit/repeatables.jade +++ b/website/views/shared/tasks/edit/repeatables.jade @@ -1,38 +1,38 @@ -fieldset.option-group.advanced-option(ng-show="task.type === 'daily'") - legend.option-title - span.hint(popover-title=env.t('startDateHelpTitle'), popover=env.t("startDateHelp"), popover-trigger='mouseenter') - =env.t('startDate') - input.form-control(type='text', ng-model='task._edit.startDate', - datepicker-popup='{{::user.preferences.dateFormat}}', is-open='datepickerOpened', - ng-click='datepickerOpened = true', ng-disabled='!canEdit(task)') - - br - - select.form-control(ng-model='task._edit.frequency', ng-disabled='!canEdit(task)') - option(value='daily')=env.t('daily') - option(value='weekly')=env.t('weekly') - option(value='monthly')=env.t('monthly') - option(value='yearly')=env.t('yearly') - - //- select.form-control(ng-model='task._edit.frequency', ng-disabled='!canEdit(task)') - //- option(value='weekly')=env.t('repeatWeek') - //- option(value='daily')=env.t('repeatDays') - - include ./dailies/repeat_options - - .form-group(ng-show='task._edit.frequency === "monthly"') - legend.option-title=env.t('repeatsOn') - label - input(type="radio", ng-model='task._edit.repeatsOn', value='dayOfMonth', ng-disabled='!canEdit(task)') - =env.t('dayOfMonth') - label - input(type="radio", ng-model='task._edit.repeatsOn', value='dayOfWeek', ng-disabled='!canEdit(task)') - =env.t('dayOfWeek') - - .form-group - legend.option-title=env.t('summary') - div {{summary}} - - .form-group(ng-if='nextDue') - legend.option-title=env.t('nextDue') - div {{nextDue}} +fieldset.option-group.advanced-option(ng-show="task.type === 'daily'") + legend.option-title + span.hint(popover-title=env.t('startDateHelpTitle'), popover=env.t("startDateHelp"), popover-trigger='mouseenter') + =env.t('startDate') + input.form-control(type='text', ng-model='task._edit.startDate', + datepicker-popup='{{::user.preferences.dateFormat}}', is-open='datepickerOpened', + ng-click='datepickerOpened = true', ng-disabled='!canEdit(task)') + + br + + select.form-control(ng-model='task._edit.frequency', ng-disabled='!canEdit(task)') + option(value='daily')=env.t('daily') + option(value='weekly')=env.t('weekly') + option(value='monthly')=env.t('monthly') + option(value='yearly')=env.t('yearly') + + //- select.form-control(ng-model='task._edit.frequency', ng-disabled='!canEdit(task)') + //- option(value='weekly')=env.t('repeatWeek') + //- option(value='daily')=env.t('repeatDays') + + include ./dailies/repeat_options + + .form-group(ng-show='task._edit.frequency === "monthly"') + legend.option-title=env.t('repeatsOn') + label + input(type="radio", ng-model='task._edit.repeatsOn', value='dayOfMonth', ng-disabled='!canEdit(task)') + =env.t('dayOfMonth') + label + input(type="radio", ng-model='task._edit.repeatsOn', value='dayOfWeek', ng-disabled='!canEdit(task)') + =env.t('dayOfWeek') + + .form-group + legend.option-title=env.t('summary') + div {{summary}} + + .form-group(ng-if='nextDue') + legend.option-title=env.t('nextDue') + div {{nextDue}} \ No newline at end of file