Skip to content

Instantly share code, notes, and snippets.

@shawnco
Created November 19, 2022 21:48
Show Gist options
  • Save shawnco/c7e88b5305fcd3f7dcd9845b0f88df8c to your computer and use it in GitHub Desktop.
Save shawnco/c7e88b5305fcd3f7dcd9845b0f88df8c to your computer and use it in GitHub Desktop.
Persistent Jobs with Node-Schedule
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();
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;
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);
});
});
});
module.exports = id => () =>
console.log(`This is action 1 for id ${id}`);
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