feat: scheduler events tests

This commit is contained in:
Nybkox
2025-01-03 11:01:16 +01:00
parent 891fb15290
commit c90011fc27
3 changed files with 64 additions and 6 deletions

View File

@@ -23,6 +23,12 @@ function flatSourceTriggers() {
return _.flatten(engines.map(engine => (engine.triggers || []).map(trigger => [engine.label, trigger, engine]))); return _.flatten(engines.map(engine => (engine.triggers || []).map(trigger => [engine.label, trigger, engine])));
} }
function flatSourceSchedulerEvents() {
return _.flatten(
engines.map(engine => (engine.schedulerEvents || []).map(schedulerEvent => [engine.label, schedulerEvent, engine]))
);
}
const obj1Match = expect.objectContaining({ const obj1Match = expect.objectContaining({
pureName: 'obj1', pureName: 'obj1',
}); });
@@ -168,6 +174,22 @@ describe('Object analyse', () => {
expect(createdTrigger2).toEqual(expect.objectContaining(expected)); expect(createdTrigger2).toEqual(expect.objectContaining(expected));
}) })
); );
});
console.log(flatSourceTriggers()); const schedulerEvents = flatSourceSchedulerEvents();
if (schedulerEvents.length > 0) {
test.each(schedulerEvents)(
'Test scheduler events - %s - %s',
testWrapper(async (conn, driver, event) => {
for (const sql of initSql) await runCommandOnDriver(conn, driver, sql);
const { create, drop, objectTypeField, expected } = event;
await runCommandOnDriver(conn, driver, create);
const structure = await driver.analyseFull(conn);
await runCommandOnDriver(conn, driver, drop);
const createdEvent = structure[objectTypeField].find(x => x.pureName == expected.pureName);
expect(createdEvent).toEqual(expect.objectContaining(expected));
})
);
}
});

View File

@@ -28,6 +28,13 @@ const mysqlEngine = {
}, },
objects: [ objects: [
views, views,
{
type: 'schedulerEvents',
create1: 'CREATE EVENT obj1 ON SCHEDULE EVERY 1 HOUR DO BEGIN END',
create2: 'CREATE EVENT obj2 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO BEGIN END',
drop1: 'DROP EVENT obj1',
drop2: 'DROP EVENT obj2',
},
{ {
type: 'procedures', type: 'procedures',
create1: 'CREATE PROCEDURE obj1() BEGIN SELECT * FROM t1; END', create1: 'CREATE PROCEDURE obj1() BEGIN SELECT * FROM t1; END',
@@ -130,6 +137,34 @@ const mysqlEngine = {
}, },
}, },
], ],
schedulerEvents: [
{
create: 'CREATE EVENT obj1 ON SCHEDULE EVERY 1 HOUR DO BEGIN END',
drop: 'DROP EVENT obj1',
objectTypeField: 'schedulerEvents',
expected: {
pureName: 'obj1',
status: 'ENABLED',
eventType: 'RECURRING',
enableSql: 'ALTER EVENT obj1 ENABLE;',
disableSql: 'ALTER EVENT obj1 DISABLE;',
intervalValue: '1',
intervalField: 'HOUR',
},
},
{
create: 'CREATE EVENT obj1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY DO BEGIN END',
drop: 'DROP EVENT obj1',
objectTypeField: 'schedulerEvents',
expected: {
pureName: 'obj1',
status: 'ENABLED',
eventType: 'ONE TIME',
enableSql: 'ALTER EVENT obj1 ENABLE;',
disableSql: 'ALTER EVENT obj1 DISABLE;',
},
},
],
}; };
const mariaDbEngine = { const mariaDbEngine = {
@@ -360,7 +395,7 @@ const sqlServerEngine = {
create2: 'CREATE TRIGGER obj2 ON t2 AFTER INSERT AS BEGIN SELECT * FROM t2 END', create2: 'CREATE TRIGGER obj2 ON t2 AFTER INSERT AS BEGIN SELECT * FROM t2 END',
drop1: 'DROP TRIGGER obj1', drop1: 'DROP TRIGGER obj1',
drop2: 'DROP TRIGGER obj2', drop2: 'DROP TRIGGER obj2',
} },
], ],
parametersOtherSql: ['CREATE PROCEDURE obj2 (@p1 int, @p2 int) AS SELECT id from t1'], parametersOtherSql: ['CREATE PROCEDURE obj2 (@p1 int, @p2 int) AS SELECT id from t1'],
parameters: [ parameters: [
@@ -577,14 +612,14 @@ const enginesOnCi = [
const enginesOnLocal = [ const enginesOnLocal = [
// all engines, which would be run on local test // all engines, which would be run on local test
// mysqlEngine, mysqlEngine,
// mariaDbEngine, // mariaDbEngine,
// postgreSqlEngine, // postgreSqlEngine,
// sqlServerEngine, // sqlServerEngine,
// sqliteEngine, // sqliteEngine,
// cockroachDbEngine, // cockroachDbEngine,
// clickhouseEngine, // clickhouseEngine,
oracleEngine, // oracleEngine,
]; ];
module.exports = process.env.CITEST ? enginesOnCi : enginesOnLocal; module.exports = process.env.CITEST ? enginesOnCi : enginesOnLocal;

View File

@@ -1492,6 +1492,7 @@ export const chinookDbInfo: DatabaseInfo = {
collections: [], collections: [],
matviews: [], matviews: [],
triggers: [], triggers: [],
schedulerEvents: [],
}; };
// const ARTIST_TABLE: TableInfo = { // const ARTIST_TABLE: TableInfo = {