Files
kandev/apps/web/e2e/tests/canvas/workflow-transition-history.spec.ts
T
2026-09-23 20:51:55 +01:00

76 lines
3.0 KiB
TypeScript

import { expect, test } from "../../fixtures/test-base";
import {
approvePendingCanvas,
canvasHref,
enableCanvasFeature,
promoteCanvas,
removeCanvas,
seedTaskCanvas,
} from "./canvas-fixture";
test("workspace transition groups remain available before and after task canvas promotion", async ({
testPage,
apiClient,
backend,
seedData,
}) => {
test.setTimeout(180_000);
const releaseFeature = await enableCanvasFeature(backend, apiClient, seedData.workspaceId);
let canvasId: string | undefined;
try {
const seeded = await seedTaskCanvas(testPage, apiClient, seedData, false, {
minimalPermissions: true,
});
canvasId = seeded.canvas.id;
const approved = seeded.canvas.pending_release
? await approvePendingCanvas(apiClient, seeded.canvas)
: seeded.canvas;
const nextStep = seedData.steps.find((step) => step.id !== seedData.startStepId);
expect(nextStep).toBeDefined();
await apiClient.moveTask(seeded.taskId, seedData.workflowId, nextStep!.id);
await apiClient.moveTask(seeded.taskId, seedData.workflowId, seedData.startStepId);
await testPage.goto(canvasHref(approved.id));
const body = testPage.frameLocator('[data-testid="web-app-frame"] iframe').locator("body");
await expect(body).toBeVisible();
const taskRead = await body.evaluate(async (_, taskId) => {
const response = await fetch(
`./_kandev/v1/data/tasks/${encodeURIComponent(taskId)}/step-transitions?limit=200`,
);
return { status: response.status, body: await response.json() };
}, seeded.taskId);
expect(taskRead.status).toBe(200);
expect(
taskRead.body.items.some(
(item: { to_workflow_step_id: string }) =>
item.to_workflow_step_id === seedData.startStepId,
),
).toBe(true);
const prePromotionGroups = await body.evaluate(async (_, flowId) => {
const response = await fetch(
`./_kandev/v1/data/workflows/${encodeURIComponent(flowId)}/transition-groups?limit=200`,
);
return { status: response.status, body: await response.json() };
}, seedData.workflowId);
expect(prePromotionGroups.status).toBe(200);
expect(prePromotionGroups.body.items.some((item: { count: number }) => item.count > 0)).toBe(
true,
);
const workspace = await promoteCanvas(apiClient, approved);
await testPage.goto(canvasHref(workspace.id));
const groups = await testPage
.frameLocator('[data-testid="web-app-frame"] iframe')
.locator("body")
.evaluate(async (_, flowId) => {
const response = await fetch(
`./_kandev/v1/data/workflows/${encodeURIComponent(flowId)}/transition-groups?limit=200`,
);
return { status: response.status, body: await response.json() };
}, seedData.workflowId);
expect(groups.status).toBe(200);
expect(groups.body.items.some((item: { count: number }) => item.count > 0)).toBe(true);
} finally {
if (canvasId) await removeCanvas(apiClient, canvasId);
await releaseFeature();
}
});