Fix use as draft (#9718)

- remove delete serverless function when archiving workflow version
- update copy serverless function to reset serverless function to old
version
- remove createNewWorkflowVersion and use createDraftFromWorkflowVersion
- fix step update issue and optimistic rendering when generate draft
from active version
This commit is contained in:
martmull
2025-01-21 15:44:52 +01:00
committed by GitHub
parent d8815d7ebf
commit ed7c48e12a
22 changed files with 207 additions and 309 deletions

View File

@ -1,36 +0,0 @@
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
import { WorkflowVersion } from '@/workflow/types/Workflow';
import { renderHook } from '@testing-library/react';
import { useCreateNewWorkflowVersion } from '../useCreateNewWorkflowVersion';
jest.mock('@/object-record/hooks/useCreateOneRecord', () => ({
useCreateOneRecord: jest.fn(),
}));
describe('useCreateNewWorkflowVersion', () => {
it('should create workflow version', async () => {
const mockCreateOneRecord = jest.fn();
(useCreateOneRecord as jest.Mock).mockImplementation(() => ({
createOneRecord: mockCreateOneRecord,
}));
const workflowVersionData = {
workflowId: '123',
name: 'Test Version',
status: 'draft',
trigger: { type: 'manual' },
steps: [],
};
const { result } = renderHook(() => useCreateNewWorkflowVersion());
await result.current.createNewWorkflowVersion(
workflowVersionData as unknown as WorkflowVersion,
);
expect(useCreateOneRecord).toHaveBeenCalledWith({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
});
expect(mockCreateOneRecord).toHaveBeenCalledWith(workflowVersionData);
});
});

View File

@ -2,21 +2,11 @@ import { renderHook } from '@testing-library/react';
import { useGetUpdatableWorkflowVersion } from '@/workflow/hooks/useGetUpdatableWorkflowVersion';
import { WorkflowWithCurrentVersion } from '@/workflow/types/Workflow';
const mockCreateNewWorkflowVersion = jest.fn().mockResolvedValue({
id: '457',
name: 'toto',
createdAt: '2024-07-03T20:03:35.064Z',
updatedAt: '2024-07-03T20:03:35.064Z',
workflowId: '123',
__typename: 'WorkflowVersion',
status: 'DRAFT',
steps: [],
trigger: null,
});
const mockCreateDraftFromWorkflowVersion = jest.fn().mockResolvedValue('457');
jest.mock('@/workflow/hooks/useCreateNewWorkflowVersion', () => ({
useCreateNewWorkflowVersion: () => ({
createNewWorkflowVersion: mockCreateNewWorkflowVersion,
jest.mock('@/workflow/hooks/useCreateDraftFromWorkflowVersion', () => ({
useCreateDraftFromWorkflowVersion: () => ({
createDraftFromWorkflowVersion: mockCreateDraftFromWorkflowVersion,
}),
}));
@ -44,19 +34,19 @@ describe('useGetUpdatableWorkflowVersion', () => {
it('should not create workflow version if draft version exists', async () => {
const { result } = renderHook(() => useGetUpdatableWorkflowVersion());
const workflowVersion = await result.current.getUpdatableWorkflowVersion(
const workflowVersionId = await result.current.getUpdatableWorkflowVersion(
mockWorkflow('DRAFT'),
);
expect(mockCreateNewWorkflowVersion).not.toHaveBeenCalled();
expect(workflowVersion.id === '456');
expect(mockCreateDraftFromWorkflowVersion).not.toHaveBeenCalled();
expect(workflowVersionId).toEqual('456');
});
it('should create workflow version if no draft version exists', async () => {
const { result } = renderHook(() => useGetUpdatableWorkflowVersion());
const workflowVersion = await result.current.getUpdatableWorkflowVersion(
const workflowVersionId = await result.current.getUpdatableWorkflowVersion(
mockWorkflow('ACTIVE'),
);
expect(mockCreateNewWorkflowVersion).toHaveBeenCalled();
expect(workflowVersion.id === '457');
expect(mockCreateDraftFromWorkflowVersion).toHaveBeenCalled();
expect(workflowVersionId).toEqual('457');
});
});

View File

@ -28,7 +28,7 @@ export const useCreateDraftFromWorkflowVersion = () => {
const createDraftFromWorkflowVersion = async (
input: CreateDraftFromWorkflowVersionInput,
) => {
await mutate({
const result = await mutate({
variables: { input },
awaitRefetchQueries: true,
refetchQueries: [
@ -40,6 +40,8 @@ export const useCreateDraftFromWorkflowVersion = () => {
},
],
});
return result?.data?.createDraftFromWorkflowVersion.id;
};
return {

View File

@ -1,23 +0,0 @@
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
import { WorkflowVersion } from '@/workflow/types/Workflow';
export const useCreateNewWorkflowVersion = () => {
const { createOneRecord: createOneWorkflowVersion } =
useCreateOneRecord<WorkflowVersion>({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
});
const createNewWorkflowVersion = async (
workflowVersionData: Pick<
WorkflowVersion,
'workflowId' | 'name' | 'status' | 'trigger' | 'steps'
>,
) => {
return await createOneWorkflowVersion(workflowVersionData);
};
return {
createNewWorkflowVersion,
};
};

View File

@ -1,21 +1,18 @@
import { WorkflowWithCurrentVersion } from '@/workflow/types/Workflow';
import { useCreateNewWorkflowVersion } from '@/workflow/hooks/useCreateNewWorkflowVersion';
import { useCreateDraftFromWorkflowVersion } from '@/workflow/hooks/useCreateDraftFromWorkflowVersion';
export const useGetUpdatableWorkflowVersion = () => {
const { createNewWorkflowVersion } = useCreateNewWorkflowVersion();
const { createDraftFromWorkflowVersion } =
useCreateDraftFromWorkflowVersion();
const getUpdatableWorkflowVersion = async (
workflow: WorkflowWithCurrentVersion,
) => {
if (workflow.currentVersion.status === 'DRAFT') {
return workflow.currentVersion;
return workflow.currentVersion.id;
}
return await createNewWorkflowVersion({
return await createDraftFromWorkflowVersion({
workflowId: workflow.id,
name: `v${workflow.versions.length + 1}`,
status: 'DRAFT',
trigger: workflow.currentVersion.trigger,
steps: workflow.currentVersion.steps,
workflowVersionIdToCopy: workflow.currentVersion.id,
});
};