diff --git a/lib/workers/branch/schedule.js b/lib/workers/branch/schedule.js index a4e96ed2aac1efd174870cff87ad35cb5758a18c..c3e0b92785f40be739bfa1373ba083de2c191438 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 ad668d7fd95dc4b87b816af58e5f6a9d28c689e1..e183e862230141b33d6ddd979498845cf58ecfb4 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);