20 lines
1.2 KiB
TypeScript
Vendored
20 lines
1.2 KiB
TypeScript
Vendored
import { describe, expect, it } from "vitest";
|
|
import { buildMysqlEventSql } from "./mysqlEventSql";
|
|
|
|
describe("buildMysqlEventSql", () => {
|
|
it("builds an escaped EVERY event", () => {
|
|
expect(buildMysqlEventSql({ name: "daily`sync", schedule: { mode: "every", intervalValue: "1", intervalUnit: "day" }, preserve: true, enabled: false, comment: "owner's job", body: "CALL refresh();" }, "CREATE")).toBe(
|
|
"CREATE EVENT `daily``sync` ON SCHEDULE EVERY 1 DAY ON COMPLETION PRESERVE DISABLE COMMENT 'owner\\'s job' DO CALL refresh();",
|
|
);
|
|
});
|
|
it("rejects empty body and invalid units", () => {
|
|
expect(() => buildMysqlEventSql({ name: "e", schedule: { mode: "every", intervalValue: "1", intervalUnit: "FORTNIGHT" }, body: "SELECT 1" })).toThrow("Invalid interval unit");
|
|
expect(() => buildMysqlEventSql({ name: "e", schedule: { mode: "at", executeAt: "" }, body: " " })).toThrow("Event body");
|
|
});
|
|
it("rejects non-positive or non-numeric interval values", () => {
|
|
for (const intervalValue of ["", "0", " 000 ", "1 DAY", "1; DROP EVENT other"]) {
|
|
expect(() => buildMysqlEventSql({ name: "e", schedule: { mode: "every", intervalValue, intervalUnit: "DAY" }, body: "SELECT 1" })).toThrow("positive integer interval value");
|
|
}
|
|
});
|
|
});
|