95 lines
2.8 KiB
TypeScript
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();
|
|
}
|
|
});
|