## Old In the demo, I press the `Delete` key multiple times, and it deletes the nodes. https://github.com/user-attachments/assets/75bf84d3-b182-488c-a781-bbe236985142 ## New https://github.com/user-attachments/assets/4ae4f387-e143-4ce8-8140-6cb2c549f5d2
219 lines
6.3 KiB
TypeScript
219 lines
6.3 KiB
TypeScript
import { expect } from '@playwright/test';
|
|
import { test } from '../lib/fixtures/blank-workflow';
|
|
|
|
test('Create workflow with every possible step', async ({
|
|
workflowVisualizer,
|
|
page,
|
|
}) => {
|
|
await workflowVisualizer.createInitialTrigger('record-created');
|
|
|
|
await workflowVisualizer.createStep('create-record');
|
|
await workflowVisualizer.createStep('update-record');
|
|
await workflowVisualizer.createStep('delete-record');
|
|
await workflowVisualizer.createStep('code');
|
|
await workflowVisualizer.createStep('send-email');
|
|
|
|
await workflowVisualizer.background.click();
|
|
|
|
const draftWorkflowStatus =
|
|
workflowVisualizer.workflowStatus.getByText('Draft');
|
|
|
|
await expect(draftWorkflowStatus).toBeVisible();
|
|
|
|
await workflowVisualizer.activateWorkflowButton.click();
|
|
|
|
const activeWorkflowStatus =
|
|
workflowVisualizer.workflowStatus.getByText('Active');
|
|
|
|
await expect(draftWorkflowStatus).not.toBeVisible();
|
|
await expect(activeWorkflowStatus).toBeVisible();
|
|
await expect(workflowVisualizer.activateWorkflowButton).not.toBeVisible();
|
|
await expect(workflowVisualizer.deactivateWorkflowButton).toBeVisible();
|
|
});
|
|
|
|
test('Delete steps from draft version', async ({
|
|
workflowVisualizer,
|
|
page,
|
|
}) => {
|
|
await workflowVisualizer.createInitialTrigger('record-created');
|
|
|
|
const { createdStepId: firstStepId } =
|
|
await workflowVisualizer.createStep('create-record');
|
|
const { createdStepId: secondStepId } =
|
|
await workflowVisualizer.createStep('update-record');
|
|
const { createdStepId: thirdStepId } =
|
|
await workflowVisualizer.createStep('delete-record');
|
|
const { createdStepId: fourthStepId } =
|
|
await workflowVisualizer.createStep('code');
|
|
const { createdStepId: fifthStepId } =
|
|
await workflowVisualizer.createStep('send-email');
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Create Record',
|
|
'Update Record',
|
|
'Delete Record',
|
|
'Code - Serverless Function',
|
|
'Send Email',
|
|
]);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(5);
|
|
|
|
await workflowVisualizer.deleteStep(firstStepId);
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Update Record',
|
|
'Delete Record',
|
|
'Code - Serverless Function',
|
|
'Send Email',
|
|
]);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(4);
|
|
|
|
await workflowVisualizer.deleteStep(fifthStepId);
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Update Record',
|
|
'Delete Record',
|
|
'Code - Serverless Function',
|
|
]);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(3);
|
|
|
|
await workflowVisualizer.deleteStep(secondStepId);
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Delete Record',
|
|
'Code - Serverless Function',
|
|
]);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(2);
|
|
|
|
await workflowVisualizer.deleteStep(fourthStepId);
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Delete Record',
|
|
]);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1);
|
|
|
|
await workflowVisualizer.deleteStep(thirdStepId);
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(0);
|
|
|
|
await Promise.all([
|
|
page.reload(),
|
|
|
|
expect(workflowVisualizer.triggerNode).toBeVisible(),
|
|
]);
|
|
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(0);
|
|
});
|
|
|
|
test('Add a step to an active version', async ({
|
|
workflowVisualizer,
|
|
page,
|
|
}) => {
|
|
await workflowVisualizer.createInitialTrigger('record-created');
|
|
|
|
await workflowVisualizer.createStep('create-record');
|
|
|
|
await expect(workflowVisualizer.workflowStatus).toHaveText('Draft');
|
|
|
|
await workflowVisualizer.background.click();
|
|
|
|
await Promise.all([
|
|
expect(workflowVisualizer.workflowStatus).toHaveText('Active'),
|
|
|
|
workflowVisualizer.activateWorkflowButton.click(),
|
|
]);
|
|
|
|
await expect(workflowVisualizer.activateWorkflowButton).not.toBeVisible();
|
|
|
|
const assertEndState = async () => {
|
|
await expect(workflowVisualizer.workflowStatus).toHaveText('Active');
|
|
await expect(workflowVisualizer.triggerNode).toContainText(
|
|
'Record is Created',
|
|
);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Create Record',
|
|
]);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1);
|
|
};
|
|
|
|
await assertEndState();
|
|
|
|
await page.reload();
|
|
|
|
await assertEndState();
|
|
});
|
|
|
|
test('Replace the trigger of an active version', async ({
|
|
workflowVisualizer,
|
|
page,
|
|
}) => {
|
|
await workflowVisualizer.createInitialTrigger('record-created');
|
|
|
|
await workflowVisualizer.createStep('create-record');
|
|
|
|
await workflowVisualizer.background.click();
|
|
|
|
await Promise.all([
|
|
expect(workflowVisualizer.workflowStatus).toHaveText('Active'),
|
|
|
|
workflowVisualizer.activateWorkflowButton.click(),
|
|
]);
|
|
|
|
await Promise.all([
|
|
expect(workflowVisualizer.workflowStatus).toHaveText('Draft'),
|
|
|
|
workflowVisualizer.deleteTrigger(),
|
|
]);
|
|
|
|
await workflowVisualizer.createInitialTrigger('record-deleted');
|
|
|
|
await workflowVisualizer.background.click();
|
|
|
|
await Promise.all([
|
|
expect(workflowVisualizer.workflowStatus).toHaveText('Active'),
|
|
|
|
workflowVisualizer.activateWorkflowButton.click(),
|
|
]);
|
|
|
|
await page.reload();
|
|
|
|
await expect(workflowVisualizer.triggerNode).toContainText(
|
|
'Record is Deleted',
|
|
);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toHaveCount(1);
|
|
await expect(workflowVisualizer.getAllStepNodes()).toContainText([
|
|
'Create Record',
|
|
]);
|
|
});
|
|
|
|
test("Nodes can't be deleted by pressing Backspace or Delete keys", async ({
|
|
workflowVisualizer,
|
|
page,
|
|
}) => {
|
|
await workflowVisualizer.triggerNode.click();
|
|
|
|
await page.keyboard.press('Backspace');
|
|
await page.keyboard.press('Delete');
|
|
|
|
await expect(workflowVisualizer.triggerNode).toBeVisible();
|
|
|
|
const { createdStepId: firstStepId } =
|
|
await workflowVisualizer.createStep('create-record');
|
|
const firstStep = workflowVisualizer.getStepNode(firstStepId);
|
|
|
|
await firstStep.click();
|
|
|
|
await expect(workflowVisualizer.getDeleteNodeButton(firstStep)).toBeVisible();
|
|
|
|
await page.keyboard.press('Backspace');
|
|
await page.keyboard.press('Delete');
|
|
|
|
await expect(firstStep).toBeVisible();
|
|
|
|
await workflowVisualizer.addStepButton.click();
|
|
|
|
await page.keyboard.press('Backspace');
|
|
await page.keyboard.press('Delete');
|
|
|
|
await expect(workflowVisualizer.addStepButton).toBeVisible();
|
|
});
|