From c38e2cdcfe16937dccd5180e11d853efbd42758d Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Mon, 14 Aug 2017 22:16:28 +0200 Subject: [PATCH] fix: wrap and warn non-array schedule (#676) --- lib/workers/branch/schedule.js | 24 ++++++++++++++---------- test/workers/branch/schedule.spec.js | 8 +++++--- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/workers/branch/schedule.js b/lib/workers/branch/schedule.js index a4e96ed2aa..c3e0b92785 100644 --- a/lib/workers/branch/schedule.js +++ b/lib/workers/branch/schedule.js @@ -11,9 +11,6 @@ function fixShortHours(input) { } function hasValidSchedule(schedule) { - if (!Array.isArray(schedule)) { - return [false, 'Invalid schedule']; - } let message; // check if any of the schedules fail to parse const hasFailedSchedules = schedule.some(scheduleText => { @@ -42,16 +39,23 @@ function hasValidSchedule(schedule) { } function isScheduledNow(config) { - config.logger.debug({ schedule: config.schedule }, `Checking schedule`); + let configSchedule = config.schedule; + config.logger.debug({ schedule: configSchedule }, `Checking schedule`); if ( - !config.schedule || - config.schedule.length === 0 || - config.schedule[0] === '' + !configSchedule || + configSchedule.length === 0 || + configSchedule[0] === '' ) { config.logger.debug('No schedule defined'); return true; } - const [validSchedule, errorMessage] = hasValidSchedule(config.schedule); + if (!Array.isArray(configSchedule)) { + config.logger.warn( + `config schedule is not an array: ${JSON.stringify(configSchedule)}` + ); + configSchedule = [configSchedule]; + } + const [validSchedule, errorMessage] = hasValidSchedule(configSchedule); if (!validSchedule) { config.logger.error(errorMessage); return true; @@ -72,9 +76,9 @@ function isScheduledNow(config) { now.hours() * 3600 + now.minutes() * 60 + now.seconds(); config.logger.debug(`currentSeconds=${currentSeconds}`); // Support a single string but massage to array for processing - config.logger.debug(`Checking ${config.schedule.length} schedule(s)`); + config.logger.debug(`Checking ${configSchedule.length} schedule(s)`); // We run if any schedule matches - const isWithinSchedule = config.schedule.some(scheduleText => { + const isWithinSchedule = configSchedule.some(scheduleText => { config.logger.debug(`Checking schedule "${scheduleText}"`); const parsedSchedule = later.parse.text(fixShortHours(scheduleText)); // Later library returns array of schedules diff --git a/test/workers/branch/schedule.spec.js b/test/workers/branch/schedule.spec.js index ad668d7fd9..e183e86223 100644 --- a/test/workers/branch/schedule.spec.js +++ b/test/workers/branch/schedule.spec.js @@ -7,9 +7,6 @@ describe('workers/branch/schedule', () => { beforeEach(() => { jest.resetAllMocks(); }); - it('returns false if schedule is not an array', () => { - expect(schedule.hasValidSchedule({ a: 1 }, logger)[0]).toBe(false); - }); it('returns false for invalid schedule', () => { expect(schedule.hasValidSchedule(['foo'], logger)[0]).toBe(false); }); @@ -105,6 +102,11 @@ describe('workers/branch/schedule', () => { const res = schedule.isScheduledNow(config); expect(res).toBe(false); }); + it('massages string', () => { + config.schedule = 'before 4:00am'; + const res = schedule.isScheduledNow(config); + expect(res).toBe(false); + }); it('supports outside hours', () => { config.schedule = ['after 4:00pm']; const res = schedule.isScheduledNow(config); -- GitLab