taskmanager/tests/worker.test.ts

95 lines
2.8 KiB
TypeScript

import { test } from "node:test";
import assert from "node:assert/strict";
import { PrismaClient } from "@prisma/client";
import { seedRbac } from "../prisma/rbac-seed";
test("worker creates recurrence and reminders idempotently and cleans deleted files", async () => {
if (
!process.env.DATABASE_URL ||
new URL(process.env.DATABASE_URL).pathname !== "/taskmanager_review"
)
throw new Error("Dedicated taskmanager_review database required");
process.env.WORKER_TEST = "true";
process.env.SMTP_URL = "";
const db = new PrismaClient();
try {
await seedRbac(db);
await db.user.upsert({
where: { id: "worker-test-admin" },
create: {
id: "worker-test-admin",
name: "Worker test",
email: "worker-test@example.test",
password: "login-disabled",
},
update: {},
});
await db.userRole.upsert({
where: {
userId_roleId_scope_targetGroupId: {
userId: "worker-test-admin",
roleId: "system-admin",
scope: "GLOBAL",
targetGroupId: "",
},
},
create: {
userId: "worker-test-admin",
roleId: "system-admin",
scope: "GLOBAL",
},
update: {},
});
await db.userGroup.upsert({
where: {
userId_groupId: { userId: "worker-test-admin", groupId: "legacy" },
},
create: { userId: "worker-test-admin", groupId: "legacy" },
update: {},
});
await db.task.upsert({
where: { id: "worker-test-recurring" },
create: {
id: "worker-test-recurring",
wo: "Test",
was: "Recurring fixture",
bisWann: new Date("2026-01-01"),
creatorId: "worker-test-admin",
assigneeId: "worker-test-admin",
owningGroupId: "legacy",
status: "ERLEDIGT",
completedAt: new Date("2026-01-01"),
recurrenceDays: 7,
},
update: {},
});
const { tick } = await import("../scripts/worker");
await tick();
await tick();
assert.equal(
await db.task.count({
where: { recurrenceSourceId: "worker-test-recurring" },
}),
1,
);
const successor = await db.task.findUniqueOrThrow({
where: { recurrenceSourceId: "worker-test-recurring" },
});
assert.equal(successor.bisWann.toISOString().slice(0, 10), "2026-01-08");
const count = await db.notification.count({
where: { taskId: successor.id, userId: "worker-test-admin" },
});
await tick();
assert.equal(
await db.notification.count({
where: { taskId: successor.id, userId: "worker-test-admin" },
}),
count,
);
assert.equal(await db.cleanupJob.count({ where: { attempts: 0 } }), 0);
} finally {
await db.$disconnect();
const { prisma } = await import("../src/lib/prisma");
await prisma.$disconnect();
}
});