Prisma liest seine Einstellungen aus prisma.config.ts statt aus der package.json; die Warnung vor Prisma 7 ist damit weg. Der dotenv-Aufruf darin ist nicht optional: sobald die Datei existiert, laedt Prisma die .env nicht mehr von selbst, und migrate deploy staende ohne DATABASE_URL da. Vier neue Ende-zu-Ende-Tests: Reihenfolge und Mehrfachauswahl ueber die API, Mehrfachauswahl in der Oberflaeche, der Aenderungsverlauf und das Manifest samt Symbolen ohne Anmeldung. Damit sind es 21. Der Test zum Ziehen von Aufgaben war gelegentlich rot, ohne dass etwas kaputt war: das Neuladen brach den noch laufenden Speicheraufruf ab. Er wartet jetzt auf die Antwort, statt auf eine feste Pause zu hoffen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { NOTIFICATION_EVENTS } from "@/lib/notify/types";
|
||||
import { notificationTargetCreateSchema } from "./validation";
|
||||
import {
|
||||
notificationTargetCreateSchema,
|
||||
projectBulkSchema,
|
||||
projectReorderSchema,
|
||||
} from "./validation";
|
||||
|
||||
/**
|
||||
* Dieser Test entstand aus einem Fehler: beim Ergaenzen eines neuen
|
||||
@@ -70,3 +74,60 @@ describe("notificationTargetCreateSchema", () => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("projectReorderSchema", () => {
|
||||
it("nimmt Spalten mit Listen an", () => {
|
||||
const parsed = projectReorderSchema.safeParse({
|
||||
columns: { IDEA: ["a", "b"], DONE: [] },
|
||||
});
|
||||
expect(parsed.success).toBe(true);
|
||||
});
|
||||
|
||||
it("weist unbekannte Spalten ab", () => {
|
||||
expect(
|
||||
projectReorderSchema.safeParse({ columns: { PHANTASIE: ["a"] } }).success,
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it("weist einen leeren Aufruf ab, statt ihn wirkungslos durchzuwinken", () => {
|
||||
expect(projectReorderSchema.safeParse({ columns: {} }).success).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("projectBulkSchema", () => {
|
||||
const ids = ["a", "b"];
|
||||
|
||||
it("verlangt zu jeder Aktion die noetige Angabe", () => {
|
||||
// Ohne diese Pruefungen kaeme die Aktion durch und taete nichts – der
|
||||
// schlimmste Fall, weil niemand merkt, dass nichts passiert ist.
|
||||
expect(projectBulkSchema.safeParse({ ids, action: "status" }).success).toBe(false);
|
||||
expect(projectBulkSchema.safeParse({ ids, action: "tags" }).success).toBe(false);
|
||||
expect(projectBulkSchema.safeParse({ ids, action: "tags", tags: [] }).success).toBe(false);
|
||||
expect(projectBulkSchema.safeParse({ ids, action: "favorite" }).success).toBe(false);
|
||||
});
|
||||
|
||||
it("laesst vollstaendige Aktionen durch", () => {
|
||||
expect(
|
||||
projectBulkSchema.safeParse({ ids, action: "status", status: "DONE" }).success,
|
||||
).toBe(true);
|
||||
expect(
|
||||
projectBulkSchema.safeParse({ ids, action: "tags", tags: ["archiv"] }).success,
|
||||
).toBe(true);
|
||||
expect(
|
||||
projectBulkSchema.safeParse({ ids, action: "favorite", favorite: false }).success,
|
||||
).toBe(true);
|
||||
// Loeschen braucht nichts ausser den IDs.
|
||||
expect(projectBulkSchema.safeParse({ ids, action: "delete" }).success).toBe(true);
|
||||
});
|
||||
|
||||
it("ergaenzt standardmaessig, statt zu entfernen", () => {
|
||||
const parsed = projectBulkSchema.parse({ ids, action: "tags", tags: ["x"] });
|
||||
expect(parsed.tagMode).toBe("add");
|
||||
});
|
||||
|
||||
it("braucht mindestens eine ID und deckelt die Menge", () => {
|
||||
expect(projectBulkSchema.safeParse({ ids: [], action: "delete" }).success).toBe(false);
|
||||
const zuViele = Array.from({ length: 201 }, (_, index) => `id-${index}`);
|
||||
expect(projectBulkSchema.safeParse({ ids: zuViele, action: "delete" }).success).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user