Created
November 19, 2022 21:48
-
-
Save shawnco/c7e88b5305fcd3f7dcd9845b0f88df8c to your computer and use it in GitHub Desktop.
Persistent Jobs with Node-Schedule
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const PersistentJobs = require('./persistent_jobs'); | |
const schedule = require('node-schedule'); | |
const actions = { | |
test1: require('./actions/test1'), | |
test2: require('./actions/test2') | |
}; | |
async function scheduleJobs() { | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const {cron, date, recurrence} = await jobs.getJobs(); | |
cron.map(c => schedule.scheduleJob(c.cron, actions[c.action](c.id))); | |
date.map(d => schedule.scheduleJob(new Date(d.date), actions[d.action](d.id))); | |
recurrence.map(r => schedule.scheduleJob(r.recurrence, actions[r.action](r.id))); | |
} | |
scheduleJobs(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mysql = require('mysql2/promise'); | |
class PersistentJobs { | |
constructor() { | |
this.connection = null; | |
} | |
async connect() { | |
this.connection = await mysql.createConnection({ | |
host: 'localhost', | |
user: 'root', | |
password: 'password', | |
database: 'persistent_schedule' | |
}); | |
} | |
async getCronJobs() { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * | |
FROM job j | |
LEFT JOIN cron_job cj ON j.id = cj.job | |
WHERE j.schedule_type = 1` | |
); | |
return rows; | |
} | |
async getDateJobs() { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * | |
FROM job j | |
LEFT JOIN date_job dj ON j.id = dj.job | |
WHERE j.schedule_type = 2` | |
); | |
return rows; | |
} | |
async _getRecurrenceSeconds(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_seconds WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.second); | |
} | |
} | |
async _getRecurrenceMinutes(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_minutes WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.minute); | |
} | |
} | |
async _getRecurrenceHours(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_hours WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.hour); | |
} | |
} | |
async _getRecurrenceDates(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_dates WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.date); | |
} | |
} | |
async _getRecurrenceMonths(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_months WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.month); | |
} | |
} | |
async _getRecurrenceYears(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_years WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.year); | |
} | |
} | |
async _getRecurrenceDaysOfWeek(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_day_of_week WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.day_of_week); | |
} | |
} | |
async _getRecurrenceTzs(id) { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM recurrence_job_tzs WHERE job = ?`, [id] | |
); | |
if (rows.length === 0) { | |
return null; | |
} else { | |
return rows.map(r => r.tz); | |
} | |
} | |
async getRecurrenceJobs() { | |
const [rows, fields] = await this.connection.execute( | |
`SELECT * FROM job j WHERE j.schedule_type = 3` | |
); | |
let output = []; | |
for (let i = 0; i < rows.length; i++) { | |
const r = rows[i]; | |
output.push({ | |
id: r.id, | |
action: r.action, | |
schedule_type: r.schedule_type, | |
recurrence: { | |
second: await this._getRecurrenceSeconds(r.id), | |
minute: await this._getRecurrenceMinutes(r.id), | |
hour: await this._getRecurrenceHours(r.id), | |
date: await this._getRecurrenceDates(r.id), | |
month: await this._getRecurrenceMonths(r.id), | |
year: await this._getRecurrenceYears(r.id), | |
dayOfWeek: await this._getRecurrenceDaysOfWeek(r.id), | |
tz: await this._getRecurrenceTzs(r.id) | |
} | |
}); | |
} | |
return output; | |
} | |
async getJobs() { | |
return { | |
cron: await this.getCronJobs(), | |
date: await this.getDateJobs(), | |
recurrence: await this.getRecurrenceJobs() | |
}; | |
} | |
} | |
module.exports = PersistentJobs; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const mysql = require('mysql2/promise'); | |
const actions = { | |
test1: require('./actions/test1'), | |
test2: require('./actions/test2') | |
}; | |
const PersistentJobs = require('./persistent_jobs'); | |
let conn = null; | |
describe('tests', () => { | |
beforeAll(async () => { | |
return conn = await mysql.createConnection({ | |
host: 'localhost', | |
user: 'root', | |
password: 'password', | |
database: 'persistent_schedule' | |
}); | |
}); | |
beforeEach(async () => { | |
const tables = [ | |
'recurrence_job_tzs', | |
'recurrence_job_day_of_week', | |
'recurrence_job_years', | |
'recurrence_job_months', | |
'recurrence_job_dates', | |
'recurrence_job_hours', | |
'recurrence_job_minutes', | |
'recurrence_job_seconds', | |
'date_job', | |
'cron_job', | |
'job' | |
]; | |
const deletes = tables.map(t => conn.execute(`DELETE FROM ${t} WHERE 1`)); | |
await Promise.all(deletes); | |
}); | |
describe('Recurrence job', () => { | |
test('Just 1 second', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_seconds (job, second) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toEqual([1]); | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple seconds', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_seconds (job, second) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_seconds (job, second) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Just 1 minute', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_minutes (job, minute) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toEqual([1]); | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple minutes', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_minutes (job, minute) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_minutes (job, minute) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Just 1 hour', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_hours (job, hour) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toEqual([1]); | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple hours', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_hours (job, hour) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_hours (job, hour) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
// date | |
test('Just 1 date', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_dates (job, date) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toEqual([1]); | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple dates', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_dates (job, date) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_dates (job, date) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
// month | |
test('Just 1 month', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_months (job, month) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toEqual([1]); | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple months', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_months (job, month) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_months (job, month) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
// year | |
test('Just 1 year', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_years (job, year) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toEqual([1]); | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple years', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_years (job, year) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_years (job, year) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
// dayOfWeek | |
test('Just 1 dayOfWeek', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_day_of_week (job, day_of_week) VALUES (?, 1)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toEqual([1]); | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Multiple dayOfWeek', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_day_of_week (job, day_of_week) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_day_of_week (job, day_of_week) VALUES (?, 2)', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.tz).toBeUndefined; | |
}); | |
test('Just 1 tz', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_tzs (job, tz) VALUES (?, "TEST")', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toBeUndefined; | |
expect(recurrence[0].recurrence.minute).toBeUndefined; | |
expect(recurrence[0].recurrence.hour).toBeUndefined; | |
expect(recurrence[0].recurrence.date).toBeUndefined; | |
expect(recurrence[0].recurrence.month).toBeUndefined; | |
expect(recurrence[0].recurrence.year).toBeUndefined; | |
expect(recurrence[0].recurrence.dayOfWeek).toBeUndefined; | |
expect(recurrence[0].recurrence.tz).toEqual(['TEST']); | |
}); | |
test('All of the fields populate', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (3, "test1")'); | |
await conn.execute('INSERT INTO recurrence_job_seconds (job, second) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_seconds (job, second) VALUES (?, 2)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_minutes (job, minute) VALUES (?, 2)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_minutes (job, minute) VALUES (?, 3)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_hours (job, hour) VALUES (?, 3)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_hours (job, hour) VALUES (?, 4)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_dates (job, date) VALUES (?, 4)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_dates (job, date) VALUES (?, 5)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_months (job, month) VALUES (?, 5)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_months (job, month) VALUES (?, 6)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_years (job, year) VALUES (?, 6)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_years (job, year) VALUES (?, 7)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_day_of_week (job, day_of_week) VALUES (?, 0)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_day_of_week (job, day_of_week) VALUES (?, 1)', [insertId]); | |
await conn.execute('INSERT INTO recurrence_job_tzs (job, tz) VALUES (?, "TEST")', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const recurrence = await jobs.getRecurrenceJobs(); | |
expect(recurrence.length).toEqual(1); | |
expect(recurrence[0].id).toEqual(insertId); | |
expect(recurrence[0].schedule_type).toEqual(3); | |
expect(recurrence[0].action).toEqual('test1'); | |
expect(recurrence[0].recurrence.second).toEqual([1, 2]); | |
expect(recurrence[0].recurrence.minute).toEqual([2, 3]); | |
expect(recurrence[0].recurrence.hour).toEqual([3, 4]); | |
expect(recurrence[0].recurrence.date).toEqual([4, 5]); | |
expect(recurrence[0].recurrence.month).toEqual([5, 6]); | |
expect(recurrence[0].recurrence.year).toEqual([6, 7]); | |
expect(recurrence[0].recurrence.dayOfWeek).toEqual([0, 1]); | |
expect(recurrence[0].recurrence.tz).toEqual(['TEST']); | |
}); | |
}); | |
describe('Cron and date job', () => { | |
test('Basic cron job', async () => { | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (1, "test1")'); | |
await conn.execute('INSERT INTO cron_job (job, cron) VALUES (?, "* * * * *")', [insertId]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const crons = await jobs.getCronJobs(); | |
expect(crons.length).toEqual(1); | |
expect(crons[0].id).toEqual(insertId); | |
expect(crons[0].schedule_type).toEqual(1); | |
expect(crons[0].action).toEqual('test1'); | |
expect(crons[0].cron).toEqual('* * * * *'); | |
}); | |
test('Basic date job', async () => { | |
const date = new Date('08/03/1993 07:25 PM'); | |
const time = date.getTime(); | |
const [{insertId}, y] = await conn.execute('INSERT INTO job (schedule_type, action) VALUES (2, "test2")'); | |
await conn.execute('INSERT INTO date_job (job, date) VALUES (?, ?)', [insertId, time]); | |
const jobs = new PersistentJobs(); | |
await jobs.connect(); | |
const dates = await jobs.getDateJobs(); | |
expect(dates.length).toEqual(1); | |
expect(dates[0].id).toEqual(insertId); | |
expect(dates[0].schedule_type).toEqual(2); | |
expect(dates[0].action).toEqual('test2'); | |
expect(dates[0].date).toEqual(time); | |
}); | |
}); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = id => () => | |
console.log(`This is action 1 for id ${id}`); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = id => () => | |
console.log(`This is action 2 for id ${id}`); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment