62 lines
2.8 KiB
TypeScript
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");
|
|
});
|
|
});
|