diff --git a/src/lib/components/workflow-actions.svelte b/src/lib/components/workflow-actions.svelte index 9350edcd5..017fbec77 100644 --- a/src/lib/components/workflow-actions.svelte +++ b/src/lib/components/workflow-actions.svelte @@ -12,14 +12,12 @@ import { translate } from '$lib/i18n/translate'; import { coreUserStore } from '$lib/stores/core-user'; import { resetEvents } from '$lib/stores/events'; - import { settings } from '$lib/stores/settings'; import { refresh } from '$lib/stores/workflow-run'; import type { WorkflowExecution } from '$lib/types/workflows'; import { workflowCancelEnabled } from '$lib/utilities/workflow-cancel-enabled'; import { workflowResetEnabled } from '$lib/utilities/workflow-reset-enabled'; import { workflowSignalEnabled } from '$lib/utilities/workflow-signal-enabled'; import { workflowTerminateEnabled } from '$lib/utilities/workflow-terminate-enabled'; - import { writeActionsAreAllowed } from '$lib/utilities/write-actions-are-allowed'; export let workflow: WorkflowExecution; export let namespace: string; @@ -31,28 +29,55 @@ let resetConfirmationModalOpen = false; let signalConfirmationModalOpen = false; let resetTooltipText: string; + let coreUser = coreUserStore(); + + $: cancelEnabled = workflowCancelEnabled( + $page.data.settings, + $coreUser, + namespace, + ); + + $: signalEnabled = workflowSignalEnabled( + $page.data.settings, + $coreUser, + namespace, + ); + + $: terminateEnabled = workflowTerminateEnabled( + $page.data.settings, + $coreUser, + namespace, + ); + + $: resetAuthorized = workflowResetEnabled( + $page.data.settings, + $coreUser, + namespace, + ); - $: cancelEnabled = workflowCancelEnabled($page.data.settings); - $: signalEnabled = workflowSignalEnabled($page.data.settings); - $: terminateEnabled = workflowTerminateEnabled($page.data.settings); - $: resetEnabled = workflowResetEnabled($page.data.settings); + $: resetEnabled = + resetAuthorized && + workflow.pendingChildren.length === 0 && + $resetEvents.length > 0; + + $: actionsDisabled = !resetEnabled && !signalEnabled && !terminateEnabled; let workflowActions: { label: string; onClick: () => void; - allowed: boolean; + enabled: boolean; testId: string; destructive?: boolean; tooltip?: string; }[]; $: { - if (!resetEnabled) { - resetTooltipText = translate('workflows.reset-disabled'); - } else if (resetEnabled && workflow?.pendingChildren?.length > 0) { + if (!resetAuthorized) { + resetTooltipText = translate('workflows.reset-disabled-unauthorized'); + } else if (resetAuthorized && workflow?.pendingChildren?.length > 0) { resetTooltipText = translate('workflows.reset-disabled-pending-children'); } else if ( - resetEnabled && + resetAuthorized && workflow?.pendingChildren?.length === 0 && $resetEvents.length === 0 ) { @@ -65,39 +90,27 @@ label: translate('workflows.reset'), onClick: () => (resetConfirmationModalOpen = true), testId: 'reset-button', - allowed: resetAllowed, - tooltip: resetAllowed ? '' : resetTooltipText, + enabled: resetEnabled, + tooltip: resetEnabled ? '' : resetTooltipText, }, { label: translate('workflows.signal'), onClick: () => (signalConfirmationModalOpen = true), testId: 'signal-button', - allowed: signalEnabled, + enabled: signalEnabled, tooltip: signalEnabled ? '' : translate('workflows.signal-disabled'), }, { label: translate('workflows.terminate'), onClick: () => (terminateConfirmationModalOpen = true), testId: 'terminate-button', - allowed: terminateEnabled, + enabled: terminateEnabled, destructive: true, tooltip: terminateEnabled ? '' : translate('workflows.terminate-disabled'), }, ]; - - let coreUser = coreUserStore(); - - $: actionsDisabled = - $coreUser.namespaceWriteDisabled(namespace) || - !writeActionsAreAllowed(settings); - - $: resetAllowed = - resetEnabled && - workflow?.pendingChildren?.length === 0 && - $resetEvents.length > 0 && - !actionsDisabled; {#if isRunning} @@ -110,7 +123,7 @@ label={translate('workflows.request-cancellation')} menuLabel={translate('workflows.workflow-actions')} > - {#each workflowActions as { onClick, destructive, label, allowed, testId, tooltip }} + {#each workflowActions as { onClick, destructive, label, enabled, testId, tooltip }} {#if destructive} {/if} @@ -118,7 +131,7 @@ {label} @@ -127,10 +140,10 @@ {/each} {:else} - + @@ -95,7 +106,6 @@ variant="ghost" class="text-off-white focus-visible:border-table" data-testid="bulk-reset-button" - disabled={namespaceWriteDisabled} on:click={openBatchResetConfirmationModal} >{translate('workflows.reset')} @@ -106,7 +116,6 @@ variant="destructive" class="focus-visible:border-table" data-testid="bulk-terminate-button" - disabled={namespaceWriteDisabled} on:click={openBatchTerminateConfirmationModal} >{translate('workflows.terminate')} diff --git a/src/lib/i18n/locales/en/workflows.ts b/src/lib/i18n/locales/en/workflows.ts index 109ab2dfc..2ea80647a 100644 --- a/src/lib/i18n/locales/en/workflows.ts +++ b/src/lib/i18n/locales/en/workflows.ts @@ -73,7 +73,7 @@ export const Strings = { json: 'JSON', download: 'Download', 'workflow-actions': 'Workflow Actions', - 'reset-disabled': + 'reset-disabled-unauthorized': 'Resetting workflows is not enabled, please contact your administrator for assistance.', 'reset-disabled-pending-children': 'Cannot reset workflows with pending children.', diff --git a/src/lib/utilities/workflow-cancel-enabled.test.ts b/src/lib/utilities/workflow-cancel-enabled.test.ts index 8b335cb94..26680f69a 100644 --- a/src/lib/utilities/workflow-cancel-enabled.test.ts +++ b/src/lib/utilities/workflow-cancel-enabled.test.ts @@ -3,42 +3,73 @@ import { describe, expect, test } from 'vitest'; import { workflowCancelEnabled } from './workflow-cancel-enabled'; describe('workflowCancelEnabled', () => { - test('returns true when write actions are enabled, and when cancel is enabled', () => { + const coreUser = { + namespaceWriteDisabled: (ns: string) => ns === 'ns-write-disabled', + }; + + test('returns true when global write actions, cancel, and namespace write are all enabled', () => { expect( - workflowCancelEnabled({ - disableWriteActions: false, - worklowCancelDisabled: false, - }), + workflowCancelEnabled( + { + disableWriteActions: false, + worklowCancelDisabled: false, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(true); }); describe('returns false', () => { test('when write actions are disabled', () => { expect( - workflowCancelEnabled({ - disableWriteActions: true, - workflowCancelDisabled: false, - }), + workflowCancelEnabled( + { + disableWriteActions: true, + workflowCancelDisabled: false, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(false); }); test('when cancel is disabled', () => { expect( - workflowCancelEnabled({ - runtimeEnvironment: { isCloud: false }, - disableWriteActions: false, - workflowCancelDisabled: true, - }), + workflowCancelEnabled( + { + disableWriteActions: false, + workflowCancelDisabled: true, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(false); }); test('when write actions and cancel are both disabled', () => { expect( - workflowCancelEnabled({ - runtimeEnvironment: { isCloud: false }, - disableWriteActions: true, - workflowCancelDisabled: true, - }), + workflowCancelEnabled( + { + disableWriteActions: true, + workflowCancelDisabled: true, + }, + coreUser, + 'ns-write-enabled', + ), + ).toBe(false); + }); + + test('when write actions are disabled on the namespace', () => { + expect( + workflowCancelEnabled( + { + disableWriteActions: false, + workflowCancelDisabled: false, + }, + coreUser, + 'ns-write-disabled', + ), ).toBe(false); }); }); diff --git a/src/lib/utilities/workflow-cancel-enabled.ts b/src/lib/utilities/workflow-cancel-enabled.ts index 4cb7af078..1c84af972 100644 --- a/src/lib/utilities/workflow-cancel-enabled.ts +++ b/src/lib/utilities/workflow-cancel-enabled.ts @@ -1,5 +1,14 @@ +import type { CoreUser } from '$lib/models/core-user'; import type { Settings } from '$lib/types/global'; -export const workflowCancelEnabled = (settings: Settings): boolean => { - return !settings.disableWriteActions && !settings.workflowCancelDisabled; +export const workflowCancelEnabled = ( + settings: Settings, + coreUser: CoreUser, + namespace: string, +): boolean => { + return ( + !settings.disableWriteActions && + !settings.workflowCancelDisabled && + !coreUser.namespaceWriteDisabled(namespace) + ); }; diff --git a/src/lib/utilities/workflow-reset-enabled.test.ts b/src/lib/utilities/workflow-reset-enabled.test.ts index 071f7ac1c..2827e6988 100644 --- a/src/lib/utilities/workflow-reset-enabled.test.ts +++ b/src/lib/utilities/workflow-reset-enabled.test.ts @@ -3,40 +3,73 @@ import { describe, expect, test } from 'vitest'; import { workflowResetEnabled } from './workflow-reset-enabled'; describe('workflowResetEnabled', () => { - test('returns true when write actions are enabled and when reset is enabled', () => { + const coreUser = { + namespaceWriteDisabled: (ns: string) => ns === 'ns-write-disabled', + }; + + test('returns true when global write actions, reset, and namespace write actions are all enabled', () => { expect( - workflowResetEnabled({ - disableWriteActions: false, - worklowResetDisabled: false, - }), + workflowResetEnabled( + { + disableWriteActions: false, + worklowResetDisabled: false, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(true); }); describe('returns false', () => { test('when write actions are disabled', () => { expect( - workflowResetEnabled({ - disableWriteActions: true, - workflowResetDisabled: false, - }), + workflowResetEnabled( + { + disableWriteActions: true, + workflowResetDisabled: false, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(false); }); test('when reset is disabled', () => { expect( - workflowResetEnabled({ - disableWriteActions: false, - workflowResetDisabled: true, - }), + workflowResetEnabled( + { + disableWriteActions: false, + workflowResetDisabled: true, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(false); }); test('when write actions and reset are both disabled', () => { expect( - workflowResetEnabled({ - disableWriteActions: true, - workflowResetDisabled: true, - }), + workflowResetEnabled( + { + disableWriteActions: true, + workflowResetDisabled: true, + }, + coreUser, + 'ns-write-enabled', + ), + ).toBe(false); + }); + + test('when namespace write actions are disabled', () => { + expect( + workflowResetEnabled( + { + disableWriteActions: false, + workflowResetDisabled: false, + }, + coreUser, + 'ns-write-disabled', + ), ).toBe(false); }); }); diff --git a/src/lib/utilities/workflow-reset-enabled.ts b/src/lib/utilities/workflow-reset-enabled.ts index 4308c3338..606fe9d39 100644 --- a/src/lib/utilities/workflow-reset-enabled.ts +++ b/src/lib/utilities/workflow-reset-enabled.ts @@ -1,5 +1,14 @@ +import type { CoreUser } from '$lib/models/core-user'; import type { Settings } from '$lib/types/global'; -export const workflowResetEnabled = (settings: Settings): boolean => { - return !settings.disableWriteActions && !settings.workflowResetDisabled; +export const workflowResetEnabled = ( + settings: Settings, + coreUser: CoreUser, + namespace: string, +): boolean => { + return ( + !settings.disableWriteActions && + !settings.workflowResetDisabled && + !coreUser.namespaceWriteDisabled(namespace) + ); }; diff --git a/src/lib/utilities/workflow-signal-enabled.test.ts b/src/lib/utilities/workflow-signal-enabled.test.ts index ddac55bdc..68d6c0150 100644 --- a/src/lib/utilities/workflow-signal-enabled.test.ts +++ b/src/lib/utilities/workflow-signal-enabled.test.ts @@ -3,40 +3,73 @@ import { describe, expect, test } from 'vitest'; import { workflowSignalEnabled } from './workflow-signal-enabled'; describe('workflowSignalEnabled', () => { - test('returns true when write actions are enabled and when signal is enabled', () => { + const coreUser = { + namespaceWriteDisabled: (ns: string) => ns === 'ns-write-disabled', + }; + + test('returns true when global write actions, signal, and namespace write actions are all enabled', () => { expect( - workflowSignalEnabled({ - disableWriteActions: false, - worklowCancelDisabled: false, - }), + workflowSignalEnabled( + { + disableWriteActions: false, + worklowCancelDisabled: false, + }, + coreUser, + 'ns-wriete-enabled', + ), ).toBe(true); }); describe('returns false', () => { test('when write actions are disabled', () => { expect( - workflowSignalEnabled({ - disableWriteActions: true, - workflowCancelDisabled: false, - }), + workflowSignalEnabled( + { + disableWriteActions: true, + workflowCancelDisabled: false, + }, + coreUser, + 'ns-wriete-enabled', + ), ).toBe(false); }); test('when signal is disabled', () => { expect( - workflowSignalEnabled({ - disableWriteActions: false, - workflowSignalDisabled: true, - }), + workflowSignalEnabled( + { + disableWriteActions: false, + workflowSignalDisabled: true, + }, + coreUser, + 'ns-wriete-enabled', + ), ).toBe(false); }); test('when write actions and signal are both disabled', () => { expect( - workflowSignalEnabled({ - disableWriteActions: true, - workflowSignalDisabled: true, - }), + workflowSignalEnabled( + { + disableWriteActions: true, + workflowSignalDisabled: true, + }, + coreUser, + 'ns-wriete-enabled', + ), + ).toBe(false); + }); + + test('when namespace write actions are disabled', () => { + expect( + workflowSignalEnabled( + { + disableWriteActions: false, + workflowSignalDisabled: false, + }, + coreUser, + 'ns-write-disabled', + ), ).toBe(false); }); }); diff --git a/src/lib/utilities/workflow-signal-enabled.ts b/src/lib/utilities/workflow-signal-enabled.ts index 426132724..8f8b3e1ed 100644 --- a/src/lib/utilities/workflow-signal-enabled.ts +++ b/src/lib/utilities/workflow-signal-enabled.ts @@ -1,5 +1,14 @@ +import type { CoreUser } from '$lib/models/core-user'; import type { Settings } from '$lib/types/global'; -export const workflowSignalEnabled = (settings: Settings): boolean => { - return !settings.disableWriteActions && !settings.workflowSignalDisabled; +export const workflowSignalEnabled = ( + settings: Settings, + coreUser: CoreUser, + namespace: string, +): boolean => { + return ( + !settings.disableWriteActions && + !settings.workflowSignalDisabled && + !coreUser.namespaceWriteDisabled(namespace) + ); }; diff --git a/src/lib/utilities/workflow-terminate-enabled.test.ts b/src/lib/utilities/workflow-terminate-enabled.test.ts index 7afcb5aea..f69220232 100644 --- a/src/lib/utilities/workflow-terminate-enabled.test.ts +++ b/src/lib/utilities/workflow-terminate-enabled.test.ts @@ -3,37 +3,70 @@ import { describe, expect, test } from 'vitest'; import { workflowTerminateEnabled } from './workflow-terminate-enabled'; describe('workflowTerminateEnabled', () => { - test('returns true when write actions and terminate are both enabled', () => { + const coreUser = { + namespaceWriteDisabled: (ns: string) => ns === 'ns-write-disabled', + }; + + test('returns true when global write actions terminate, and namespace write actions are all enabled', () => { expect( - workflowTerminateEnabled({ - disableWriteActions: false, - workflowTerminateDisabled: false, - }), + workflowTerminateEnabled( + { + disableWriteActions: false, + workflowTerminateDisabled: false, + }, + coreUser, + 'ns-write-enabled', + ), ); }); describe('returns false', () => { test('when write actions are disabled', () => { - expect(workflowTerminateEnabled({ disableWriteActions: true })).toBe( - false, - ); + expect( + workflowTerminateEnabled( + { disableWriteActions: true }, + coreUser, + 'ns-write-enabled', + ), + ).toBe(false); }); test('when terminate is disabled', () => { expect( - workflowTerminateEnabled({ - disableWriteActions: false, - workflowTerminateDisabled: true, - }), + workflowTerminateEnabled( + { + disableWriteActions: false, + workflowTerminateDisabled: true, + }, + coreUser, + 'ns-write-enabled', + ), ).toBe(false); }); test('when write actions and terminate are both disabled', () => { expect( - workflowTerminateEnabled({ - disableWriteActions: true, - workflowTerminateDisabled: true, - }), + workflowTerminateEnabled( + { + disableWriteActions: true, + workflowTerminateDisabled: true, + }, + coreUser, + 'ns-write-enabled', + ), + ).toBe(false); + }); + + test('when namespace write actions are disabled', () => { + expect( + workflowTerminateEnabled( + { + disableWriteActions: false, + workflowTerminateDisabled: false, + }, + coreUser, + 'ns-write-disabled', + ), ).toBe(false); }); }); diff --git a/src/lib/utilities/workflow-terminate-enabled.ts b/src/lib/utilities/workflow-terminate-enabled.ts index 6ba822c57..4a0c0bd47 100644 --- a/src/lib/utilities/workflow-terminate-enabled.ts +++ b/src/lib/utilities/workflow-terminate-enabled.ts @@ -1,5 +1,14 @@ +import type { CoreUser } from '$lib/models/core-user'; import type { Settings } from '$lib/types/global'; -export const workflowTerminateEnabled = (settings: Settings): boolean => { - return !settings.disableWriteActions && !settings.workflowTerminateDisabled; +export const workflowTerminateEnabled = ( + settings: Settings, + coreUser: CoreUser, + namespace: string, +): boolean => { + return ( + !settings.disableWriteActions && + !settings.workflowTerminateDisabled && + !coreUser.namespaceWriteDisabled(namespace) + ); }; diff --git a/tests/integration/workflow-actions.spec.ts b/tests/integration/workflow-actions.spec.ts new file mode 100644 index 000000000..9cb6404db --- /dev/null +++ b/tests/integration/workflow-actions.spec.ts @@ -0,0 +1,194 @@ +import { expect, test } from '@playwright/test'; + +import { ResetReapplyType } from '$src/lib/models/workflow-actions'; +import { mockSettingsApi, mockWorkflowApis } from '~/test-utilities/mock-apis'; +import { + mockCompletedWorkflow, + mockWorkflow, + mockWorkflowResetApi, + WORKFLOW_RESET_API, +} from '~/test-utilities/mocks/workflow'; + +test.describe('Workflow Actions for a Completed Workflow', () => { + const { + workflowExecutionInfo: { + execution: { workflowId, runId }, + }, + } = mockCompletedWorkflow; + + const workflowUrl = `/namespaces/default/workflows/${workflowId}/${runId}/history`; + + test.beforeEach(async ({ page }) => { + await page.goto(workflowUrl); + + await mockWorkflowApis(page, mockCompletedWorkflow); + await mockWorkflowResetApi(page); + }); + + test.describe('Workflow Reset', () => { + test('is disabled when global write actions are disabled via Settings API', async ({ + page, + }) => { + await mockSettingsApi(page, { DisableWriteActions: true }); + + await expect(page.getByTestId('workflow-reset-button')).toBeDisabled(); + }); + + test('is disabled when reset is disabled via Settings API', async ({ + page, + }) => { + await mockSettingsApi(page, { WorkflowResetDisabled: true }); + + await expect(page.getByTestId('workflow-reset-button')).toBeDisabled(); + }); + + test('allows NOT reapplying signals after the reset point', async ({ + page, + }) => { + const requestPromise = page.waitForRequest(WORKFLOW_RESET_API); + + await page.getByTestId('workflow-reset-button').click(); + await page.locator('#reset-event-5').click(); + await page + .getByTestId('reset-confirmation-modal') + .getByTestId('confirm-modal-button') + .click(); + + const request = await requestPromise; + const body = request.postDataJSON(); + + expect(body.resetReapplyType).toBe(ResetReapplyType.None); + }); + + test('allows reapplying signals after the reset point', async ({ + page, + }) => { + const requestPromise = page.waitForRequest(WORKFLOW_RESET_API); + + await page.getByTestId('workflow-reset-button').click(); + await page.locator('#reset-event-5').click(); + await page + .getByRole('checkbox', { + name: 'Reapply Signals that happened after the Reset point', + }) + .first() + .click(); + + await page + .getByTestId('reset-confirmation-modal') + .getByTestId('confirm-modal-button') + .click(); + + const request = await requestPromise; + const body = request.postDataJSON(); + + expect(body.resetReapplyType).toBe(ResetReapplyType.Signal); + }); + }); +}); + +test.describe('Workflow actions for a Running Workflow', () => { + test.beforeEach(async ({ page }) => { + const { + workflowExecutionInfo: { + execution: { workflowId, runId }, + }, + } = mockWorkflow; + + const workflowUrl = `/namespaces/default/workflows/${workflowId}/${runId}`; + + await page.goto(workflowUrl); + await mockWorkflowApis(page); + await mockWorkflowResetApi(page); + }); + + test('All actions are disabled when global write actions are disabled via Settings API', async ({ + page, + }) => { + await mockSettingsApi(page, { DisableWriteActions: true }); + + await expect(page.locator('#workflow-actions-menu-button')).toBeDisabled(); + + await expect( + page.locator('#workflow-actions-primary-button'), + ).toBeDisabled(); + }); + + test.describe('Workflow Cancel', () => { + test('is disabled when cancel is disabled via Settings API', async ({ + page, + }) => { + await mockSettingsApi(page, { WorkflowCancelDisabled: true }); + + await expect( + page.locator('#workflow-actions-primary-button'), + ).toBeDisabled(); + + await page.locator('#workflow-actions-menu-button').click(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Send a Signal'), + ).toBeEnabled(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Terminate'), + ).toBeEnabled(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Reset'), + ).toBeEnabled(); + }); + }); + + test.describe('Workflow Terminate', () => { + test('is disabled when teminate is disabled via Settings API', async ({ + page, + }) => { + await mockSettingsApi(page, { WorkflowTerminateDisabled: true }); + + await expect( + page.locator('#workflow-actions-primary-button'), + ).toBeEnabled(); + + await page.locator('#workflow-actions-menu-button').click(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Send a Signal'), + ).toBeEnabled(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Terminate'), + ).toBeDisabled(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Reset'), + ).toBeEnabled(); + }); + }); + + test.describe('Workflow Signal', () => { + test('is disabled when signal is disabled via Settings API', async ({ + page, + }) => { + await mockSettingsApi(page, { WorkflowSignalDisabled: true }); + + await expect( + page.locator('#workflow-actions-primary-button'), + ).toBeEnabled(); + + await page.locator('#workflow-actions-menu-button').click(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Send a Signal'), + ).toBeDisabled(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Terminate'), + ).toBeEnabled(); + + await expect( + page.locator('#workflow-actions-menu').getByText('Reset'), + ).toBeEnabled(); + }); + }); +}); diff --git a/tests/integration/workflow-reset.spec.ts b/tests/integration/workflow-reset.spec.ts deleted file mode 100644 index 04f69c181..000000000 --- a/tests/integration/workflow-reset.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { expect, test } from '@playwright/test'; - -import { ResetReapplyType } from '$src/lib/models/workflow-actions'; -import { mockWorkflowApis } from '~/test-utilities/mock-apis'; -import { - mockCompletedWorkflow, - mockWorkflowResetApi, - WORKFLOW_RESET_API, -} from '~/test-utilities/mocks/workflow'; - -const { - workflowExecutionInfo: { - execution: { workflowId, runId }, - }, -} = mockCompletedWorkflow; - -const workflowUrl = `/namespaces/default/workflows/${workflowId}/${runId}/history`; - -test.describe('Workflow reset', () => { - test.beforeEach(async ({ page }) => { - await page.goto(workflowUrl); - - await mockWorkflowApis(page, mockCompletedWorkflow); - await mockWorkflowResetApi(page); - }); - - test('allows NOT reapplying signals after the reset point', async ({ - page, - }) => { - const requestPromise = page.waitForRequest(WORKFLOW_RESET_API); - - await page.getByTestId('workflow-reset-button').click(); - await page.locator('#reset-event-5').click(); - await page - .getByTestId('reset-confirmation-modal') - .getByTestId('confirm-modal-button') - .click(); - - const request = await requestPromise; - const body = request.postDataJSON(); - - expect(body.resetReapplyType).toBe(ResetReapplyType.None); - }); - - test('allows reapplying signals after the reset point', async ({ page }) => { - const requestPromise = page.waitForRequest(WORKFLOW_RESET_API); - - await page.getByTestId('workflow-reset-button').click(); - await page.locator('#reset-event-5').click(); - await page - .getByRole('checkbox', { - name: 'Reapply Signals that happened after the Reset point', - }) - .first() - .click(); - - await page - .getByTestId('reset-confirmation-modal') - .getByTestId('confirm-modal-button') - .click(); - - const request = await requestPromise; - const body = request.postDataJSON(); - - expect(body.resetReapplyType).toBe(ResetReapplyType.Signal); - }); -});