Files
kandev/apps/web/e2e/tests/workflow/mobile-workflow-task-completion.spec.ts
T
2026-09-10 15:01:37 +01:00

62 lines
2.8 KiB
TypeScript

import { test, expect } from "../../fixtures/test-base";
import { assertNoDocumentHorizontalOverflow } from "../../helpers/layout-assertions";
import { WorkflowSettingsPage } from "../../pages/workflow-settings-page";
test.describe("Workflow task completion on mobile", () => {
test("keeps the final-step control and help disclosure touch accessible", async ({
testPage,
apiClient,
seedData,
}) => {
const workflow = await apiClient.createWorkflow(
seedData.workspaceId,
`Mobile completion editor ${Date.now()}`,
);
const first = await apiClient.createWorkflowStep(workflow.id, "Draft", 0, {
is_start_step: true,
});
const final = await apiClient.createWorkflowStep(workflow.id, "Done", 1, {
complete_task_on_enter: true,
});
const settings = new WorkflowSettingsPage(testPage);
await settings.goto(seedData.workspaceId);
const card = await settings.findWorkflowCard(workflow.name, { waitForName: true });
await settings.selectStep(card, "Draft", true);
await expect(settings.completeTaskOnEnterCheckbox(card, first.id)).toHaveCount(0);
await expect(settings.completeTaskOnEnterHelp(card, first.id)).toHaveCount(0);
await settings.selectStep(card, "Done", true);
const checkbox = settings.completeTaskOnEnterCheckbox(card, final.id);
const help = settings.completeTaskOnEnterHelp(card, final.id);
await expect(checkbox).toBeChecked();
const helpBox = await help.boundingBox();
expect(helpBox).not.toBeNull();
expect(helpBox!.height).toBeGreaterThanOrEqual(44);
await help.evaluate((element) => (element as HTMLElement).blur());
await expect(testPage.getByRole("tooltip")).toHaveCount(0);
await help.tap();
await expect(testPage.getByRole("dialog")).toContainText(
"Marks the task complete when it enters this final step",
);
await expect(checkbox).toBeChecked();
await testPage.keyboard.press("Escape");
await expect(testPage.getByRole("dialog")).toHaveCount(0);
await checkbox.tap();
await expect(checkbox).not.toBeChecked();
const viewportWidth = await testPage.evaluate(() => window.innerWidth);
const saveButton = settings.floatingSave.getByRole("button", { name: "Save changes" });
for (const control of [checkbox, help, saveButton]) {
const box = await control.boundingBox();
expect(box).not.toBeNull();
expect(box!.x).toBeGreaterThanOrEqual(0);
expect(box!.x + box!.width).toBeLessThanOrEqual(viewportWidth);
}
await settings.saveChanges(true);
const { steps } = await apiClient.listWorkflowSteps(workflow.id);
expect(steps.find((step) => step.id === final.id)?.complete_task_on_enter).toBe(false);
await assertNoDocumentHorizontalOverflow(testPage, "mobile workflow task completion");
});
});