From 92fdc13adfc221a5b8184fecf1cd09b824bce492 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Mon, 10 Jul 2017 14:07:14 -0600 Subject: [PATCH] Added assumption that the date passed is in the users timezone (#8859) --- .../integration/tasks/GET-tasks_user.test.js | 61 ++++++++++++++++++- website/server/libs/taskManager.js | 5 +- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/test/api/v3/integration/tasks/GET-tasks_user.test.js b/test/api/v3/integration/tasks/GET-tasks_user.test.js index 318bf29168..9c4c68dad0 100644 --- a/test/api/v3/integration/tasks/GET-tasks_user.test.js +++ b/test/api/v3/integration/tasks/GET-tasks_user.test.js @@ -152,11 +152,66 @@ describe('GET /tasks/user', () => { expect(dailys2[0].isDue).to.be.true; }); - it('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied', async () => { + it('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => { + let timezone = 420; await user.update({ - 'preferences.dayStart': 7, + 'preferences.dayStart': 0, + 'preferences.timezoneOffset': timezone, }); - let startDate = moment().subtract('4', 'days').startOf('day').toISOString(); + let startDate = moment().zone(timezone).subtract('4', 'days').startOf('day').toISOString(); + await user.post('/tasks/user', [ + { + text: 'test daily', + type: 'daily', + startDate, + frequency: 'daily', + everyX: 2, + }, + ]); + + let today = moment().format('YYYY-MM-DD'); + let dailys = await user.get(`/tasks/user?type=dailys&dueDate=${today}`); + expect(dailys[0].isDue).to.be.true; + + let yesterday = moment().subtract('1', 'days').format('YYYY-MM-DD'); + let dailys2 = await user.get(`/tasks/user?type=dailys&dueDate=${yesterday}`); + expect(dailys2[0].isDue).to.be.false; + }); + + + it('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => { + let timezone = 240; + await user.update({ + 'preferences.dayStart': 0, + 'preferences.timezoneOffset': timezone, + }); + let startDate = moment().zone(timezone).subtract('4', 'days').startOf('day').toISOString(); + await user.post('/tasks/user', [ + { + text: 'test daily', + type: 'daily', + startDate, + frequency: 'daily', + everyX: 2, + }, + ]); + + let today = moment().format('YYYY-MM-DD'); + let dailys = await user.get(`/tasks/user?type=dailys&dueDate=${today}`); + expect(dailys[0].isDue).to.be.true; + + let yesterday = moment().subtract('1', 'days').format('YYYY-MM-DD'); + let dailys2 = await user.get(`/tasks/user?type=dailys&dueDate=${yesterday}`); + expect(dailys2[0].isDue).to.be.false; + }); + + it('returns dailies with isDue for the date specified and will add CDS offset if time is not supplied and assumes timezones', async () => { + let timezone = 540; + await user.update({ + 'preferences.dayStart': 0, + 'preferences.timezoneOffset': timezone, + }); + let startDate = moment().zone(timezone).subtract('4', 'days').startOf('day').toISOString(); await user.post('/tasks/user', [ { text: 'test daily', diff --git a/website/server/libs/taskManager.js b/website/server/libs/taskManager.js index bbf67fd03f..5aba20be57 100644 --- a/website/server/libs/taskManager.js +++ b/website/server/libs/taskManager.js @@ -29,12 +29,13 @@ export function setNextDue (task, user, dueDateOption) { let now = moment().toDate(); let dateTaskIsDue = Date.now(); if (dueDateOption) { - dateTaskIsDue = moment(dueDateOption); + // @TODO Add required ISO format + dateTaskIsDue = moment(dueDateOption).add(user.preferences.timezoneOffset, 'minutes'); + // If not time is supplied. Let's assume we want start of Custom Day Start day. if (dateTaskIsDue.hour() === 0 && dateTaskIsDue.minute() === 0 && dateTaskIsDue.second() === 0 && dateTaskIsDue.millisecond() === 0) { dateTaskIsDue.add(user.preferences.dayStart, 'hours'); } - now = dateTaskIsDue; }