@nocobase/plugin-workflow-manual 1.0.0-alpha.2 → 1.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/client/WorkflowTodo.d.ts +8 -0
  2. package/dist/client/WorkflowTodoBlockInitializer.d.ts +8 -0
  3. package/dist/client/index.d.ts +8 -0
  4. package/dist/client/index.js +9 -0
  5. package/dist/client/instruction/AssigneesSelect.d.ts +8 -0
  6. package/dist/client/instruction/FormBlockInitializer.d.ts +8 -0
  7. package/dist/client/instruction/FormBlockProvider.d.ts +8 -0
  8. package/dist/client/instruction/ModeConfig.d.ts +8 -0
  9. package/dist/client/instruction/SchemaConfig.d.ts +8 -0
  10. package/dist/client/instruction/createManualFormBlockUISchema.d.ts +8 -0
  11. package/dist/client/instruction/forms/create.d.ts +8 -0
  12. package/dist/client/instruction/forms/custom.d.ts +8 -0
  13. package/dist/client/instruction/forms/update.d.ts +8 -0
  14. package/dist/client/instruction/index.d.ts +8 -0
  15. package/dist/client/instruction/utils.d.ts +8 -0
  16. package/dist/externalVersion.js +18 -9
  17. package/dist/index.d.ts +8 -0
  18. package/dist/index.js +9 -0
  19. package/dist/locale/index.d.ts +8 -0
  20. package/dist/locale/index.js +9 -0
  21. package/dist/server/ManualInstruction.d.ts +8 -0
  22. package/dist/server/ManualInstruction.js +9 -0
  23. package/dist/server/Plugin.d.ts +8 -0
  24. package/dist/server/Plugin.js +9 -0
  25. package/dist/server/actions.d.ts +8 -0
  26. package/dist/server/actions.js +9 -0
  27. package/dist/server/collections/1-users_jobs.d.ts +8 -0
  28. package/dist/server/collections/1-users_jobs.js +9 -0
  29. package/dist/server/collections/2-jobs.d.ts +8 -0
  30. package/dist/server/collections/2-jobs.js +9 -0
  31. package/dist/server/collections/3-users.d.ts +8 -0
  32. package/dist/server/collections/3-users.js +9 -0
  33. package/dist/server/forms/create.d.ts +8 -0
  34. package/dist/server/forms/create.js +9 -0
  35. package/dist/server/forms/index.d.ts +8 -0
  36. package/dist/server/forms/index.js +9 -0
  37. package/dist/server/forms/update.d.ts +8 -0
  38. package/dist/server/forms/update.js +9 -0
  39. package/dist/server/index.d.ts +8 -0
  40. package/dist/server/index.js +9 -0
  41. package/dist/server/migrations/20240325213145-fix-schema.d.ts +8 -0
  42. package/dist/server/migrations/20240325213145-fix-schema.js +9 -0
  43. package/package.json +2 -2
  44. package/src/client/WorkflowTodo.tsx +0 -647
  45. package/src/client/WorkflowTodoBlockInitializer.tsx +0 -32
  46. package/src/client/__e2e__/assignees.test.ts +0 -0
  47. package/src/client/__e2e__/createRecordForm.test.ts +0 -2287
  48. package/src/client/__e2e__/customFormBlocks.test.ts +0 -1933
  49. package/src/client/__e2e__/datablocks.test.ts +0 -1208
  50. package/src/client/__e2e__/updateRecordForm.test.ts +0 -2338
  51. package/src/client/__e2e__/workflowTodo.test.ts +0 -242
  52. package/src/client/index.ts +0 -51
  53. package/src/client/instruction/AssigneesSelect.tsx +0 -39
  54. package/src/client/instruction/FormBlockInitializer.tsx +0 -79
  55. package/src/client/instruction/FormBlockProvider.tsx +0 -92
  56. package/src/client/instruction/ModeConfig.tsx +0 -85
  57. package/src/client/instruction/SchemaConfig.tsx +0 -659
  58. package/src/client/instruction/createManualFormBlockUISchema.ts +0 -5
  59. package/src/client/instruction/forms/create.tsx +0 -123
  60. package/src/client/instruction/forms/custom.tsx +0 -439
  61. package/src/client/instruction/forms/update.tsx +0 -167
  62. package/src/client/instruction/index.tsx +0 -160
  63. package/src/client/instruction/utils.ts +0 -19
  64. package/src/index.ts +0 -2
  65. package/src/locale/en-US.json +0 -30
  66. package/src/locale/index.ts +0 -14
  67. package/src/locale/ko_KR.json +0 -32
  68. package/src/locale/zh-CN.json +0 -32
  69. package/src/server/ManualInstruction.ts +0 -157
  70. package/src/server/Plugin.ts +0 -43
  71. package/src/server/__tests__/assignees.test.ts +0 -153
  72. package/src/server/__tests__/collections/categories.ts +0 -15
  73. package/src/server/__tests__/collections/comments.ts +0 -24
  74. package/src/server/__tests__/collections/posts.ts +0 -40
  75. package/src/server/__tests__/collections/replies.ts +0 -9
  76. package/src/server/__tests__/collections/tags.ts +0 -15
  77. package/src/server/__tests__/data-source.test.ts +0 -223
  78. package/src/server/__tests__/form.test.ts +0 -637
  79. package/src/server/__tests__/mode.test.ts +0 -561
  80. package/src/server/actions.ts +0 -103
  81. package/src/server/collections/1-users_jobs.ts +0 -52
  82. package/src/server/collections/2-jobs.ts +0 -19
  83. package/src/server/collections/3-users.ts +0 -17
  84. package/src/server/forms/create.ts +0 -30
  85. package/src/server/forms/index.ts +0 -13
  86. package/src/server/forms/update.ts +0 -30
  87. package/src/server/index.ts +0 -1
  88. package/src/server/migrations/20240325213145-fix-schema.ts +0 -82
@@ -1,1208 +0,0 @@
1
- import { faker } from '@faker-js/faker';
2
- import {
3
- AggregateNode,
4
- ClculationNode,
5
- CollectionTriggerNode,
6
- CreateRecordNode,
7
- ManualNode,
8
- QueryRecordNode,
9
- apiCreateWorkflow,
10
- apiCreateWorkflowNode,
11
- apiDeleteWorkflow,
12
- apiFilterList,
13
- apiGetList,
14
- apiGetWorkflow,
15
- apiGetWorkflowNode,
16
- apiUpdateWorkflowTrigger,
17
- appendJsonCollectionName,
18
- generalWithNoRelationalFields,
19
- } from '@nocobase/plugin-workflow-test/e2e';
20
- import { expect, test } from '@nocobase/test/e2e';
21
- import { dayjs } from '@nocobase/utils';
22
-
23
- test.describe('field data', () => {
24
- test('Collection event to add a data trigger, get a single line of text data for the trigger node', async ({
25
- page,
26
- mockPage,
27
- mockCollections,
28
- mockRecords,
29
- }) => {
30
- //数据表后缀标识
31
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
32
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
33
- // 创建触发器节点数据表
34
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
35
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
36
- const triggerNodeFieldName = 'orgname';
37
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
38
- await mockCollections(
39
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
40
- .collections,
41
- );
42
- // 创建Manual节点数据表
43
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
44
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
45
- const manualNodeFieldName = 'orgname';
46
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
47
- await mockCollections(
48
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
49
- .collections,
50
- );
51
- //添加工作流
52
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
53
- const workflowData = {
54
- current: true,
55
- options: { deleteExecutionOnStatus: [] },
56
- title: workFlowName,
57
- type: 'collection',
58
- enabled: true,
59
- };
60
- const workflow = await apiCreateWorkflow(workflowData);
61
- const workflowObj = JSON.parse(JSON.stringify(workflow));
62
- const workflowId = workflowObj.id;
63
- //配置工作流触发器
64
- const triggerNodeData = {
65
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
66
- };
67
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
68
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
69
- //配置Manual节点
70
- await page.goto(`admin/workflow/workflows/${workflowId}`);
71
- await page.waitForLoadState('networkidle');
72
- const collectionTriggerNode = new CollectionTriggerNode(page, workFlowName, triggerNodeCollectionName);
73
- await collectionTriggerNode.addNodeButton.click();
74
- await page.getByRole('button', { name: 'manual', exact: true }).click();
75
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
76
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
77
- const manualNode = new ManualNode(page, manualNodeName);
78
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
79
- await manualNode.nodeConfigure.click();
80
- await manualNode.assigneesDropDown.click();
81
- await page.getByRole('option', { name: 'Super Admin' }).click();
82
- await manualNode.configureUserInterfaceButton.click();
83
- await manualNode.addBlockButton.hover();
84
- await manualNode.triggerDataMenu.click();
85
- await page.mouse.move(300, 0, { steps: 100 });
86
- await page.getByText('Configure fields').hover();
87
- await page.getByRole('menuitem', { name: triggerNodeFieldDisplayName }).getByRole('switch').click();
88
- await page.mouse.move(300, 0, { steps: 100 });
89
- await page.mouse.click(300, 0);
90
- await manualNode.submitButton.click();
91
-
92
- // 2、测试步骤:添加数据触发工作流
93
- const triggerNodeCollectionRecordOne =
94
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
95
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
96
- { orgname: triggerNodeCollectionRecordOne },
97
- ]);
98
- await page.waitForTimeout(1000);
99
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
100
- const getWorkflow = await apiGetWorkflow(workflowId);
101
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
102
- const getWorkflowExecuted = getWorkflowObj.executed;
103
- expect(getWorkflowExecuted).toBe(1);
104
-
105
- const newPage = mockPage();
106
- await newPage.goto();
107
- await page.waitForLoadState('networkidle');
108
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
109
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
110
- await page.mouse.move(300, 0, { steps: 100 });
111
- await page.waitForTimeout(300);
112
- await page
113
- .locator(`//td[span[text()="${manualNodeName}"]]`)
114
- .locator('xpath=preceding-sibling::td[1]')
115
- .locator('text=View')
116
- .click();
117
- await expect(page.getByText(triggerNodeCollectionRecordOne)).toBeAttached();
118
- // 4、后置处理:删除工作流
119
- await apiDeleteWorkflow(workflowId);
120
- });
121
-
122
- test('Collection event to add a data trigger, get calculation node data', async ({
123
- page,
124
- mockPage,
125
- mockCollections,
126
- mockRecords,
127
- }) => {
128
- //数据表后缀标识
129
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
130
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
131
- // 创建触发器节点数据表
132
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
133
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
134
- const triggerNodeFieldName = 'orgname';
135
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
136
- await mockCollections(
137
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
138
- .collections,
139
- );
140
- // 创建Manual节点数据表
141
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
142
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
143
- const manualNodeFieldName = 'orgname';
144
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
145
- await mockCollections(
146
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
147
- .collections,
148
- );
149
- //添加工作流
150
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
151
- const workflowData = {
152
- current: true,
153
- options: { deleteExecutionOnStatus: [] },
154
- title: workFlowName,
155
- type: 'collection',
156
- enabled: true,
157
- };
158
- const workflow = await apiCreateWorkflow(workflowData);
159
- const workflowObj = JSON.parse(JSON.stringify(workflow));
160
- const workflowId = workflowObj.id;
161
- //配置工作流触发器
162
- const triggerNodeData = {
163
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
164
- };
165
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
166
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
167
- //配置前置计算节点
168
- const preCalculationNodeTitle = 'calculation' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
169
- const preCalculationNodeData = {
170
- type: 'calculation',
171
- upstreamId: null,
172
- branchIndex: null,
173
- title: preCalculationNodeTitle,
174
- config: { engine: 'math.js', expression: '{{$context.data.orgname}}' },
175
- };
176
- const preCalculationNode = await apiCreateWorkflowNode(workflowId, preCalculationNodeData);
177
- const preCalculationNodeObj = JSON.parse(JSON.stringify(preCalculationNode));
178
- const preCalculationNodeId = preCalculationNodeObj.id;
179
- const getPreCalculationNode = await apiGetWorkflowNode(preCalculationNodeId);
180
- const preCalculationNodeKey = getPreCalculationNode.key;
181
-
182
- //配置Manual节点
183
- await page.goto(`admin/workflow/workflows/${workflowId}`);
184
- await page.waitForLoadState('networkidle');
185
- const preCalculationNodePom = new ClculationNode(page, preCalculationNodeTitle);
186
- await preCalculationNodePom.addNodeButton.click();
187
- await page.getByRole('button', { name: 'manual', exact: true }).click();
188
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
189
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
190
- const manualNode = new ManualNode(page, manualNodeName);
191
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
192
- await manualNode.nodeConfigure.click();
193
- await manualNode.assigneesDropDown.click();
194
- await page.getByRole('option', { name: 'Super Admin' }).click();
195
- await manualNode.configureUserInterfaceButton.click();
196
- await manualNode.addBlockButton.hover();
197
- await manualNode.nodeDataMenu.hover();
198
- await page.getByRole('menuitem', { name: preCalculationNodeTitle }).click();
199
- await page.mouse.move(300, 0, { steps: 100 });
200
- await page.mouse.move(300, 0, { steps: 100 });
201
- await page.mouse.click(300, 0);
202
- await manualNode.submitButton.click();
203
-
204
- // 2、测试步骤:添加数据触发工作流
205
- const triggerNodeCollectionRecordOne =
206
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
207
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
208
- { orgname: triggerNodeCollectionRecordOne },
209
- ]);
210
- await page.waitForTimeout(1000);
211
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
212
- const getWorkflow = await apiGetWorkflow(workflowId);
213
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
214
- const getWorkflowExecuted = getWorkflowObj.executed;
215
- expect(getWorkflowExecuted).toBe(1);
216
-
217
- const newPage = mockPage();
218
- await newPage.goto();
219
- await page.waitForLoadState('networkidle');
220
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
221
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
222
- await page.mouse.move(300, 0, { steps: 100 });
223
- await page.waitForTimeout(300);
224
- await page
225
- .locator(`//td[span[text()="${manualNodeName}"]]`)
226
- .locator('xpath=preceding-sibling::td[1]')
227
- .locator('text=View')
228
- .click();
229
- await expect(page.getByText(triggerNodeCollectionRecordOne)).toBeAttached();
230
- // 4、后置处理:删除工作流
231
- await apiDeleteWorkflow(workflowId);
232
- });
233
-
234
- test('Collection event to add a data trigger, get query record node data', async ({
235
- page,
236
- mockPage,
237
- mockCollections,
238
- mockRecords,
239
- }) => {
240
- //数据表后缀标识
241
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
242
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
243
- // 创建触发器节点数据表
244
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
245
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
246
- const triggerNodeFieldName = 'orgname';
247
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
248
- await mockCollections(
249
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
250
- .collections,
251
- );
252
- // 创建Manual节点数据表
253
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
254
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
255
- const manualNodeFieldName = 'orgname';
256
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
257
- await mockCollections(
258
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
259
- .collections,
260
- );
261
- //添加工作流
262
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
263
- const workflowData = {
264
- current: true,
265
- options: { deleteExecutionOnStatus: [] },
266
- title: workFlowName,
267
- type: 'collection',
268
- enabled: true,
269
- };
270
- const workflow = await apiCreateWorkflow(workflowData);
271
- const workflowObj = JSON.parse(JSON.stringify(workflow));
272
- const workflowId = workflowObj.id;
273
- //配置工作流触发器
274
- const triggerNodeData = {
275
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
276
- };
277
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
278
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
279
- //配置前置查询节点
280
- const preQueryRecordNodeTitle = 'Query record' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
281
- const preQueryRecordNodeData = {
282
- type: 'query',
283
- upstreamId: null,
284
- branchIndex: null,
285
- title: preQueryRecordNodeTitle,
286
- config: {
287
- collection: triggerNodeCollectionName,
288
- params: {
289
- filter: { $and: [{ id: { $eq: '{{$context.data.id}}' } }] },
290
- sort: [],
291
- page: 1,
292
- pageSize: 20,
293
- appends: [],
294
- },
295
- },
296
- };
297
- const preQueryRecordNode = await apiCreateWorkflowNode(workflowId, preQueryRecordNodeData);
298
- const preQueryRecordNodeObj = JSON.parse(JSON.stringify(preQueryRecordNode));
299
- const preQueryRecordNodeId = preQueryRecordNodeObj.id;
300
- const getPreQueryRecordNode = await apiGetWorkflowNode(preQueryRecordNodeId);
301
- const preQueryRecordNodeKey = getPreQueryRecordNode.key;
302
-
303
- //配置Manual节点
304
- await page.goto(`admin/workflow/workflows/${workflowId}`);
305
- await page.waitForLoadState('networkidle');
306
- const preQueryRecordNodePom = new QueryRecordNode(page, preQueryRecordNodeTitle);
307
- await preQueryRecordNodePom.addNodeButton.click();
308
- await page.getByRole('button', { name: 'manual', exact: true }).click();
309
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
310
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
311
- const manualNode = new ManualNode(page, manualNodeName);
312
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
313
- await manualNode.nodeConfigure.click();
314
- await manualNode.assigneesDropDown.click();
315
- await page.getByRole('option', { name: 'Super Admin' }).click();
316
- await manualNode.configureUserInterfaceButton.click();
317
- await manualNode.addBlockButton.hover();
318
- await manualNode.nodeDataMenu.hover();
319
- await page.getByRole('menuitem', { name: preQueryRecordNodeTitle }).click();
320
- await page.mouse.move(300, 0, { steps: 100 });
321
- await page.getByText('Configure fields').hover();
322
- await page.getByRole('menuitem', { name: triggerNodeFieldDisplayName }).getByRole('switch').click();
323
- await page.mouse.move(300, 0, { steps: 100 });
324
- await page.mouse.click(300, 0);
325
- await manualNode.submitButton.click();
326
-
327
- // 2、测试步骤:添加数据触发工作流
328
- const triggerNodeCollectionRecordOne =
329
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
330
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
331
- { orgname: triggerNodeCollectionRecordOne },
332
- ]);
333
- await page.waitForTimeout(1000);
334
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
335
- const getWorkflow = await apiGetWorkflow(workflowId);
336
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
337
- const getWorkflowExecuted = getWorkflowObj.executed;
338
- expect(getWorkflowExecuted).toBe(1);
339
-
340
- const newPage = mockPage();
341
- await newPage.goto();
342
- await page.waitForLoadState('networkidle');
343
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
344
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
345
- await page.mouse.move(300, 0, { steps: 100 });
346
- await page.waitForTimeout(300);
347
- await page
348
- .locator(`//td[span[text()="${manualNodeName}"]]`)
349
- .locator('xpath=preceding-sibling::td[1]')
350
- .locator('text=View')
351
- .click();
352
- await expect(page.getByText(triggerNodeCollectionRecordOne)).toBeAttached();
353
- // 4、后置处理:删除工作流
354
- await apiDeleteWorkflow(workflowId);
355
- });
356
-
357
- test('Collection event to add a data trigger, get create record node data', async ({
358
- page,
359
- mockPage,
360
- mockCollections,
361
- mockRecords,
362
- }) => {
363
- //数据表后缀标识
364
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
365
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
366
- const createRecordNodeAppendText = 'c' + dayjs().format('HHmmss').toString();
367
- // 创建触发器节点数据表
368
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
369
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
370
- const triggerNodeFieldName = 'orgname';
371
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
372
- await mockCollections(
373
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
374
- .collections,
375
- );
376
- // 创建create record节点数据表
377
- const createRecordNodeCollectionDisplayName = `自动>组织[普通表]${createRecordNodeAppendText}`;
378
- const createRecordNodeCollectionName = `tt_amt_org${createRecordNodeAppendText}`;
379
- const createRecordNodeFieldName = 'orgname';
380
- const createRecordNodeFieldDisplayName = '公司名称(单行文本)';
381
- await mockCollections(
382
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), createRecordNodeAppendText)
383
- .collections,
384
- );
385
- // 创建Manual节点数据表
386
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
387
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
388
- const manualNodeFieldName = 'orgname';
389
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
390
- await mockCollections(
391
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
392
- .collections,
393
- );
394
- //添加工作流
395
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
396
- const workflowData = {
397
- current: true,
398
- options: { deleteExecutionOnStatus: [] },
399
- title: workFlowName,
400
- type: 'collection',
401
- enabled: true,
402
- };
403
- const workflow = await apiCreateWorkflow(workflowData);
404
- const workflowObj = JSON.parse(JSON.stringify(workflow));
405
- const workflowId = workflowObj.id;
406
- //配置工作流触发器
407
- const triggerNodeData = {
408
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
409
- };
410
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
411
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
412
-
413
- //配置前置添加数据节点
414
- const preCreateRecordNodeTitle = 'Create record' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
415
- const preCreateRecordNodeData = {
416
- type: 'create',
417
- upstreamId: null,
418
- branchIndex: null,
419
- title: preCreateRecordNodeTitle,
420
- config: {
421
- params: { values: { orgname: '{{$context.data.orgname}}' }, appends: [] },
422
- collection: createRecordNodeCollectionName,
423
- },
424
- };
425
- const preCreateRecordNode = await apiCreateWorkflowNode(workflowId, preCreateRecordNodeData);
426
- const preCreateRecordNodeObj = JSON.parse(JSON.stringify(preCreateRecordNode));
427
- const preCreateRecordNodeId = preCreateRecordNodeObj.id;
428
- const getPreCreateRecordNode = await apiGetWorkflowNode(preCreateRecordNodeId);
429
- const preCreateRecordNodeKey = getPreCreateRecordNode.key;
430
-
431
- //配置Manual节点
432
- await page.goto(`admin/workflow/workflows/${workflowId}`);
433
- await page.waitForLoadState('networkidle');
434
- const preCreateRecordNodePom = new CreateRecordNode(page, preCreateRecordNodeTitle);
435
- await preCreateRecordNodePom.addNodeButton.click();
436
- await page.getByRole('button', { name: 'manual', exact: true }).click();
437
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
438
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
439
- const manualNode = new ManualNode(page, manualNodeName);
440
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
441
- await manualNode.nodeConfigure.click();
442
- await manualNode.assigneesDropDown.click();
443
- await page.getByRole('option', { name: 'Super Admin' }).click();
444
- await manualNode.configureUserInterfaceButton.click();
445
- await manualNode.addBlockButton.hover();
446
- await manualNode.nodeDataMenu.hover();
447
- await page.getByRole('menuitem', { name: preCreateRecordNodeTitle }).click();
448
- await page.mouse.move(300, 0, { steps: 100 });
449
- await page.getByText('Configure fields').hover();
450
- await page.getByRole('menuitem', { name: triggerNodeFieldDisplayName }).getByRole('switch').click();
451
- await page.mouse.move(300, 0, { steps: 100 });
452
- await page.mouse.click(300, 0);
453
- await manualNode.submitButton.click();
454
-
455
- // 2、测试步骤:添加数据触发工作流
456
- const triggerNodeCollectionRecordOne =
457
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
458
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
459
- { orgname: triggerNodeCollectionRecordOne },
460
- ]);
461
- await page.waitForTimeout(1000);
462
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
463
- const getWorkflow = await apiGetWorkflow(workflowId);
464
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
465
- const getWorkflowExecuted = getWorkflowObj.executed;
466
- expect(getWorkflowExecuted).toBe(1);
467
-
468
- const newPage = mockPage();
469
- await newPage.goto();
470
- await page.waitForLoadState('networkidle');
471
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
472
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
473
- await page.mouse.move(300, 0, { steps: 100 });
474
- await page.waitForTimeout(300);
475
- await page
476
- .locator(`//td[span[text()="${manualNodeName}"]]`)
477
- .locator('xpath=preceding-sibling::td[1]')
478
- .locator('text=View')
479
- .click();
480
- await expect(page.getByText(triggerNodeCollectionRecordOne)).toBeAttached();
481
- // 4、后置处理:删除工作流
482
- await apiDeleteWorkflow(workflowId);
483
- });
484
-
485
- test('Collection event to add a data trigger, get aggregate node data', async ({
486
- page,
487
- mockPage,
488
- mockCollections,
489
- mockRecords,
490
- }) => {
491
- //数据表后缀标识
492
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
493
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
494
- const aggregateNodeAppendText = 'c' + dayjs().format('HHmmss').toString();
495
- // 创建触发器节点数据表
496
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
497
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
498
- const triggerNodeFieldName = 'orgname';
499
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
500
- await mockCollections(
501
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
502
- .collections,
503
- );
504
- // 创建aggregate节点数据表
505
- const aggregateNodeCollectionDisplayName = `自动>组织[普通表]${aggregateNodeAppendText}`;
506
- const aggregateNodeCollectionName = `tt_amt_org${aggregateNodeAppendText}`;
507
- const aggregateNodeFieldName = 'orgname';
508
- const aggregateNodeFieldDisplayName = '公司名称(单行文本)';
509
- await mockCollections(
510
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), aggregateNodeAppendText)
511
- .collections,
512
- );
513
- const aggregateNodeCollectioRecordOne = [
514
- { orgname: '公司名称(单行文本)1', status_singleselect: '1', staffnum: 10 },
515
- ];
516
- const aggregateNodeCollectioRecordTwo = [
517
- { orgname: '公司名称(单行文本)2', status_singleselect: '1', staffnum: 20 },
518
- ];
519
- const aggregateNodeCollectioRecordThree = [
520
- { orgname: '公司名称(单行文本)3', status_singleselect: '1', staffnum: 30 },
521
- ];
522
- const aggregateNodeCollectioRecordFour = [
523
- { orgname: '公司名称(单行文本)4', status_singleselect: '1', staffnum: 40 },
524
- ];
525
- const aggregateNodeCollectioRecordFive = [
526
- { orgname: '公司名称(单行文本)5', status_singleselect: '2', staffnum: 10 },
527
- ];
528
- const aggregateNodeCollectioRecordSix = [
529
- { orgname: '公司名称(单行文本)6', status_singleselect: '2', staffnum: 20 },
530
- ];
531
- const aggregateNodeCollectioRecordSeven = [
532
- { orgname: '公司名称(单行文本)7', status_singleselect: '2', staffnum: 30 },
533
- ];
534
- const aggregateNodeCollectioRecordEight = [
535
- { orgname: '公司名称(单行文本)8', status_singleselect: '2', staffnum: 40 },
536
- ];
537
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordOne);
538
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordTwo);
539
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordThree);
540
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordFour);
541
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordFive);
542
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordSix);
543
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordSeven);
544
- await mockRecords(aggregateNodeCollectionName, aggregateNodeCollectioRecordEight);
545
- // 创建Manual节点数据表
546
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
547
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
548
- const manualNodeFieldName = 'orgname';
549
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
550
- await mockCollections(
551
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
552
- .collections,
553
- );
554
- //添加工作流
555
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
556
- const workflowData = {
557
- current: true,
558
- options: { deleteExecutionOnStatus: [] },
559
- title: workFlowName,
560
- type: 'collection',
561
- enabled: true,
562
- };
563
- const workflow = await apiCreateWorkflow(workflowData);
564
- const workflowObj = JSON.parse(JSON.stringify(workflow));
565
- const workflowId = workflowObj.id;
566
- //配置工作流触发器
567
- const triggerNodeData = {
568
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
569
- };
570
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
571
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
572
-
573
- //配置前置聚合查询节点
574
- const preAggregateNodeTitle = 'Aggregate' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
575
- const preAggregateNodeData = {
576
- type: 'aggregate',
577
- upstreamId: null,
578
- branchIndex: null,
579
- title: preAggregateNodeTitle,
580
- config: {
581
- aggregator: 'count',
582
- associated: false,
583
- params: { field: 'id', filter: { $and: [] } },
584
- collection: aggregateNodeCollectionName,
585
- },
586
- };
587
- const preAggregateNode = await apiCreateWorkflowNode(workflowId, preAggregateNodeData);
588
- const preAggregateNodeObj = JSON.parse(JSON.stringify(preAggregateNode));
589
- const preAggregateNodeId = preAggregateNodeObj.id;
590
- const getPreAggregateNode = await apiGetWorkflowNode(preAggregateNodeId);
591
- const preAggregateNodeKey = getPreAggregateNode.key;
592
-
593
- //配置Manual节点
594
- await page.goto(`admin/workflow/workflows/${workflowId}`);
595
- await page.waitForLoadState('networkidle');
596
- const preAggregateNodePom = new AggregateNode(page, preAggregateNodeTitle);
597
- await preAggregateNodePom.addNodeButton.click();
598
- await page.getByRole('button', { name: 'manual', exact: true }).click();
599
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
600
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
601
- const manualNode = new ManualNode(page, manualNodeName);
602
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
603
- await manualNode.nodeConfigure.click();
604
- await manualNode.assigneesDropDown.click();
605
- await page.getByRole('option', { name: 'Super Admin' }).click();
606
- await manualNode.configureUserInterfaceButton.click();
607
- await manualNode.addBlockButton.hover();
608
- await manualNode.nodeDataMenu.hover();
609
- await page.getByRole('menuitem', { name: preAggregateNodeTitle }).click();
610
- await page.mouse.move(300, 0, { steps: 100 });
611
- await page.mouse.move(300, 0, { steps: 100 });
612
- await page.mouse.click(300, 0);
613
- await manualNode.submitButton.click();
614
-
615
- // 2、测试步骤:添加数据触发工作流
616
- const triggerNodeCollectionRecordOne =
617
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
618
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
619
- { orgname: triggerNodeCollectionRecordOne },
620
- ]);
621
- await page.waitForTimeout(1000);
622
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
623
- const getWorkflow = await apiGetWorkflow(workflowId);
624
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
625
- const getWorkflowExecuted = getWorkflowObj.executed;
626
- expect(getWorkflowExecuted).toBe(1);
627
-
628
- const newPage = mockPage();
629
- await newPage.goto();
630
- await page.waitForLoadState('networkidle');
631
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
632
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
633
- await page.mouse.move(300, 0, { steps: 100 });
634
- await page.waitForTimeout(300);
635
- await page
636
- .locator(`//td[span[text()="${manualNodeName}"]]`)
637
- .locator('xpath=preceding-sibling::td[1]')
638
- .locator('text=View')
639
- .click();
640
- // await expect(page.getByText('8')).toBeAttached();
641
- await expect(
642
- page
643
- .getByLabel(`block-item-CardItem-users_jobs-workflow-todo-${preAggregateNodeTitle}`)
644
- .locator('.ant-card-body')
645
- .getByText('8'),
646
- ).toBeAttached();
647
- // 4、后置处理:删除工作流
648
- await apiDeleteWorkflow(workflowId);
649
- });
650
-
651
- test('Collection event to add a data trigger, get single line text data for manual node custom form', async ({
652
- page,
653
- mockPage,
654
- mockCollections,
655
- mockRecords,
656
- }) => {
657
- //数据表后缀标识
658
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
659
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
660
- const preManualNodeAppendText = 'c' + dayjs().format('HHmmss').toString();
661
- // 创建触发器节点数据表
662
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
663
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
664
- const triggerNodeFieldName = 'orgname';
665
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
666
- await mockCollections(
667
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
668
- .collections,
669
- );
670
- // 创建前置Manual节点数据表
671
- const preManualNodeCollectionDisplayName = `自动>组织[普通表]${preManualNodeAppendText}`;
672
- const preManualNodeCollectionName = `tt_amt_org${preManualNodeAppendText}`;
673
- const preManualNodeFieldName = 'orgname';
674
- const preManualNodeFieldDisplayName = '公司名称(单行文本)';
675
- await mockCollections(
676
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), preManualNodeAppendText)
677
- .collections,
678
- );
679
- // 创建Manual节点数据表
680
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
681
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
682
- const manualNodeFieldName = 'orgname';
683
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
684
- await mockCollections(
685
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
686
- .collections,
687
- );
688
- //添加工作流
689
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
690
- const workflowData = {
691
- current: true,
692
- options: { deleteExecutionOnStatus: [] },
693
- title: workFlowName,
694
- type: 'collection',
695
- enabled: true,
696
- };
697
- const workflow = await apiCreateWorkflow(workflowData);
698
- const workflowObj = JSON.parse(JSON.stringify(workflow));
699
- const workflowId = workflowObj.id;
700
- //配置工作流触发器
701
- const triggerNodeData = {
702
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
703
- };
704
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
705
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
706
- //配置前置Manual节点
707
- const preManualNodeTitle = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
708
- const preManualNodeData = {
709
- type: 'manual',
710
- upstreamId: null,
711
- branchIndex: null,
712
- title: preManualNodeTitle,
713
- config: { assignees: [1], schema: null, forms: {} },
714
- };
715
- const preManualNode = await apiCreateWorkflowNode(workflowId, preManualNodeData);
716
- const preManualNodeObj = JSON.parse(JSON.stringify(preManualNode));
717
- const preAggregateNodeId = preManualNodeObj.id;
718
- const getAggregateNode = await apiGetWorkflowNode(preAggregateNodeId);
719
- const preAggregateNodeKey = getAggregateNode.key;
720
-
721
- await page.goto(`admin/workflow/workflows/${workflowId}`);
722
- await page.waitForLoadState('networkidle');
723
- const preManualNodePom = new ManualNode(page, preManualNodeTitle);
724
- await preManualNodePom.nodeConfigure.click();
725
- await preManualNodePom.configureUserInterfaceButton.click();
726
- await preManualNodePom.addBlockButton.hover();
727
- await preManualNodePom.customFormMenu.click();
728
- await page.mouse.move(300, 0, { steps: 100 });
729
- // 获取自定义表单的随机值
730
- const configureFieldsButton = page.locator(
731
- 'button[aria-label^="schema-initializer-Grid-workflowManual:customForm:configureFields-"]',
732
- );
733
- const ariaLabel = await configureFieldsButton.getAttribute('aria-label');
734
- const randomValue = ariaLabel.split('-').pop();
735
-
736
- await page
737
- .locator(`button[aria-label^="schema-initializer-Grid-workflowManual:customForm:configureFields-${randomValue}"]`)
738
- .hover();
739
- await page.getByLabel(`designer-schema-settings-CardItem-SimpleDesigner-${randomValue}`).hover();
740
- await page.getByRole('menuitem', { name: 'Edit block title' }).click();
741
- const blockTitle = 'Form' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
742
- await page.getByLabel('Edit block title').getByRole('textbox').fill(blockTitle);
743
- await page.getByRole('button', { name: 'OK', exact: true }).click();
744
- await page
745
- .locator(`button[aria-label^="schema-initializer-Grid-workflowManual:customForm:configureFields-${randomValue}"]`)
746
- .hover();
747
- await page.getByRole('menuitem', { name: 'Single line text' }).click();
748
- await page
749
- .getByLabel(`block-item-Input-${randomValue}-Field display name`)
750
- .getByRole('textbox')
751
- .fill('公司名称(单行文本)');
752
- await page.getByLabel(`block-item-Input-${randomValue}-Field name`).getByRole('textbox').fill('orgname');
753
- await page.getByLabel(`action-Action-Submit-${randomValue}`).click();
754
- await page.mouse.move(300, 0, { steps: 100 });
755
- await page.mouse.click(300, 0);
756
- await preManualNodePom.submitButton.click();
757
- await page.waitForLoadState('networkidle');
758
- //配置Manual节点
759
- await preManualNodePom.addNodeButton.click();
760
- await page.getByRole('button', { name: 'manual', exact: true }).click();
761
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
762
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
763
- const manualNode = new ManualNode(page, manualNodeName);
764
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
765
- await manualNode.nodeConfigure.click();
766
- await manualNode.assigneesDropDown.click();
767
- await page.getByRole('option', { name: 'Super Admin' }).click();
768
- await manualNode.configureUserInterfaceButton.click();
769
- await manualNode.addBlockButton.hover();
770
- await manualNode.nodeDataMenu.hover();
771
- await page.getByRole('menuitem', { name: preManualNodeTitle }).hover();
772
- await page.getByRole('menuitem', { name: blockTitle }).click();
773
- await page.mouse.move(300, 0, { steps: 100 });
774
- await page.getByText('Configure fields').hover();
775
- await page.getByRole('menuitem', { name: '公司名称(单行文本)' }).getByRole('switch').click();
776
- await page.mouse.move(300, 0, { steps: 100 });
777
- await page.mouse.click(300, 0);
778
- await manualNode.submitButton.click();
779
-
780
- // 2、测试步骤:添加数据触发工作流
781
- const triggerNodeCollectionRecordOne =
782
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
783
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
784
- { orgname: triggerNodeCollectionRecordOne },
785
- ]);
786
- await page.waitForTimeout(1000);
787
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
788
- const getWorkflow = await apiGetWorkflow(workflowId);
789
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
790
- const getWorkflowExecuted = getWorkflowObj.executed;
791
- expect(getWorkflowExecuted).toBe(1);
792
-
793
- const newPage = mockPage();
794
- await newPage.goto();
795
- await page.waitForLoadState('networkidle');
796
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
797
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
798
- await page.mouse.move(300, 0, { steps: 100 });
799
- await page.waitForTimeout(300);
800
- await page
801
- .locator(`//td[span[text()="${preManualNodeTitle}"]]`)
802
- .locator('xpath=preceding-sibling::td[1]')
803
- .locator('text=View')
804
- .click();
805
- const preManualNodeRecord = triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
806
- await page.getByRole('textbox').fill(preManualNodeRecord);
807
- await page.getByRole('button', { name: 'Continue the process' }).click();
808
- await page.getByLabel('action-Filter.Action-Filter-filter-users_jobs-workflow-todo').click();
809
- await page.getByText('Add condition', { exact: true }).click();
810
- await page.getByTestId('select-filter-field').click();
811
- await page.getByRole('menuitemcheckbox', { name: 'Task right' }).click();
812
- await page.getByRole('menuitemcheckbox', { name: 'Title' }).click();
813
- await page.getByRole('textbox').fill(manualNodeName);
814
- await page.getByRole('button', { name: 'Submit' }).click();
815
- await page
816
- .locator(`//td[span[text()="${manualNodeName}"]]`)
817
- .locator('xpath=preceding-sibling::td[1]')
818
- .locator('text=View')
819
- .click();
820
- await expect(page.getByText(preManualNodeRecord)).toBeAttached();
821
- // 4、后置处理:删除工作流
822
- await apiDeleteWorkflow(workflowId);
823
- });
824
-
825
- test('Collection event to add a data trigger, get single line text data for manual node create record form', async ({
826
- page,
827
- mockPage,
828
- mockCollections,
829
- mockRecords,
830
- }) => {
831
- //数据表后缀标识
832
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
833
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
834
- const preManualNodeAppendText = 'c' + dayjs().format('HHmmss').toString();
835
- // 创建触发器节点数据表
836
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
837
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
838
- const triggerNodeFieldName = 'orgname';
839
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
840
- await mockCollections(
841
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
842
- .collections,
843
- );
844
- // 创建前置Manual节点数据表
845
- const preManualNodeCollectionDisplayName = `自动>组织[普通表]${preManualNodeAppendText}`;
846
- const preManualNodeCollectionName = `tt_amt_org${preManualNodeAppendText}`;
847
- const preManualNodeFieldName = 'orgname';
848
- const preManualNodeFieldDisplayName = '公司名称(单行文本)';
849
- await mockCollections(
850
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), preManualNodeAppendText)
851
- .collections,
852
- );
853
- // 创建Manual节点数据表
854
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
855
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
856
- const manualNodeFieldName = 'orgname';
857
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
858
- await mockCollections(
859
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
860
- .collections,
861
- );
862
- //添加工作流
863
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
864
- const workflowData = {
865
- current: true,
866
- options: { deleteExecutionOnStatus: [] },
867
- title: workFlowName,
868
- type: 'collection',
869
- enabled: true,
870
- };
871
- const workflow = await apiCreateWorkflow(workflowData);
872
- const workflowObj = JSON.parse(JSON.stringify(workflow));
873
- const workflowId = workflowObj.id;
874
- //配置工作流触发器
875
- const triggerNodeData = {
876
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
877
- };
878
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
879
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
880
- //配置前置Manual节点
881
- const preManualNodeTitle = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
882
- const preManualNodeData = {
883
- type: 'manual',
884
- upstreamId: null,
885
- branchIndex: null,
886
- title: preManualNodeTitle,
887
- config: { assignees: [1], schema: null, forms: {} },
888
- };
889
- const preManualNode = await apiCreateWorkflowNode(workflowId, preManualNodeData);
890
- const preManualNodeObj = JSON.parse(JSON.stringify(preManualNode));
891
- const preAggregateNodeId = preManualNodeObj.id;
892
- const getAggregateNode = await apiGetWorkflowNode(preAggregateNodeId);
893
- const preAggregateNodeKey = getAggregateNode.key;
894
-
895
- await page.goto(`admin/workflow/workflows/${workflowId}`);
896
- await page.waitForLoadState('networkidle');
897
- const preManualNodePom = new ManualNode(page, preManualNodeTitle);
898
- await preManualNodePom.nodeConfigure.click();
899
- await preManualNodePom.configureUserInterfaceButton.click();
900
- await preManualNodePom.addBlockButton.hover();
901
- await preManualNodePom.createRecordFormMenu.hover();
902
- await page.getByRole('menuitem', { name: preManualNodeCollectionDisplayName }).click();
903
- await page.mouse.move(300, 0, { steps: 100 });
904
- await page
905
- .locator(`button[aria-label^="schema-initializer-Grid-form:configureFields-${preManualNodeCollectionName}"]`)
906
- .hover();
907
- await page
908
- .getByLabel(`designer-schema-settings-CardItem-CreateFormDesigner-${preManualNodeCollectionName}`)
909
- .hover();
910
- await page.getByRole('menuitem', { name: 'Edit block title' }).click();
911
- const blockTitle = 'Create record' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
912
- await page.getByLabel('Edit block title').getByRole('textbox').fill(blockTitle);
913
- await page.getByRole('button', { name: 'OK', exact: true }).click();
914
- await page
915
- .locator(`button[aria-label^="schema-initializer-Grid-form:configureFields-${preManualNodeCollectionName}"]`)
916
- .hover();
917
- await page.getByRole('menuitem', { name: triggerNodeFieldDisplayName }).getByRole('switch').click();
918
- await page.mouse.move(300, 0, { steps: 100 });
919
- await page.mouse.click(300, 0);
920
- await preManualNodePom.submitButton.click();
921
- await page.waitForLoadState('networkidle');
922
- //配置Manual节点
923
- await preManualNodePom.addNodeButton.click();
924
- await page.getByRole('button', { name: 'manual', exact: true }).click();
925
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
926
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
927
- const manualNode = new ManualNode(page, manualNodeName);
928
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
929
- await manualNode.nodeConfigure.click();
930
- await manualNode.assigneesDropDown.click();
931
- await page.getByRole('option', { name: 'Super Admin' }).click();
932
- await manualNode.configureUserInterfaceButton.click();
933
- await manualNode.addBlockButton.hover();
934
- await manualNode.nodeDataMenu.hover();
935
- await page.getByRole('menuitem', { name: preManualNodeTitle }).hover();
936
- await page.getByRole('menuitem', { name: blockTitle }).click();
937
- await page.mouse.move(300, 0, { steps: 100 });
938
- await page.getByText('Configure fields').hover();
939
- await page.getByRole('menuitem', { name: '公司名称(单行文本)' }).getByRole('switch').click();
940
- await page.mouse.move(300, 0, { steps: 100 });
941
- await page.mouse.click(300, 0);
942
- await manualNode.submitButton.click();
943
-
944
- // 2、测试步骤:添加数据触发工作流
945
- const triggerNodeCollectionRecordOne =
946
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
947
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
948
- { orgname: triggerNodeCollectionRecordOne },
949
- ]);
950
- await page.waitForTimeout(1000);
951
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
952
- const getWorkflow = await apiGetWorkflow(workflowId);
953
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
954
- const getWorkflowExecuted = getWorkflowObj.executed;
955
- expect(getWorkflowExecuted).toBe(1);
956
-
957
- const newPage = mockPage();
958
- await newPage.goto();
959
- await page.waitForLoadState('networkidle');
960
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
961
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
962
- await page.mouse.move(300, 0, { steps: 100 });
963
- await page.waitForTimeout(300);
964
- await page
965
- .locator(`//td[span[text()="${preManualNodeTitle}"]]`)
966
- .locator('xpath=preceding-sibling::td[1]')
967
- .locator('text=View')
968
- .click();
969
- const preManualNodeRecord = triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
970
- await page.getByRole('textbox').fill(preManualNodeRecord);
971
- await page.getByRole('button', { name: 'Continue the process' }).click();
972
- await page.getByLabel('action-Filter.Action-Filter-filter-users_jobs-workflow-todo').click();
973
- await page.getByText('Add condition', { exact: true }).click();
974
- await page.getByTestId('select-filter-field').click();
975
- await page.getByRole('menuitemcheckbox', { name: 'Task right' }).click();
976
- await page.getByRole('menuitemcheckbox', { name: 'Title' }).click();
977
- await page.getByRole('textbox').fill(manualNodeName);
978
- await page.getByRole('button', { name: 'Submit' }).click();
979
- await page
980
- .locator(`//td[span[text()="${manualNodeName}"]]`)
981
- .locator('xpath=preceding-sibling::td[1]')
982
- .locator('text=View')
983
- .click();
984
- await expect(page.getByText(preManualNodeRecord)).toBeAttached();
985
-
986
- const createNodeCollectionData = await apiGetList(preManualNodeCollectionName);
987
- const createNodeCollectionDataObj = JSON.parse(JSON.stringify(createNodeCollectionData));
988
- expect(createNodeCollectionDataObj.meta.count).toBe(1);
989
- // 4、后置处理:删除工作流
990
- await apiDeleteWorkflow(workflowId);
991
- });
992
-
993
- test('Collection event to add a data trigger, get single line text data for manual node update record form', async ({
994
- page,
995
- mockPage,
996
- mockCollections,
997
- mockRecords,
998
- }) => {
999
- //数据表后缀标识
1000
- const triggerNodeAppendText = 'a' + faker.string.alphanumeric(4);
1001
- const manualNodeAppendText = 'b' + dayjs().format('HHmmss').toString();
1002
- const preManualNodeAppendText = 'c' + dayjs().format('HHmmss').toString();
1003
- // 创建触发器节点数据表
1004
- const triggerNodeCollectionDisplayName = `自动>组织[普通表]${triggerNodeAppendText}`;
1005
- const triggerNodeCollectionName = `tt_amt_org${triggerNodeAppendText}`;
1006
- const triggerNodeFieldName = 'orgname';
1007
- const triggerNodeFieldDisplayName = '公司名称(单行文本)';
1008
- await mockCollections(
1009
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), triggerNodeAppendText)
1010
- .collections,
1011
- );
1012
- // 创建前置Manual节点数据表
1013
- const preManualNodeCollectionDisplayName = `自动>组织[普通表]${preManualNodeAppendText}`;
1014
- const preManualNodeCollectionName = `tt_amt_org${preManualNodeAppendText}`;
1015
- const preManualNodeFieldName = 'orgname';
1016
- const preManualNodeFieldDisplayName = '公司名称(单行文本)';
1017
- await mockCollections(
1018
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), preManualNodeAppendText)
1019
- .collections,
1020
- );
1021
- const preManualNodeCollectioRecordOne = [
1022
- { orgname: '公司名称(单行文本)1', status_singleselect: '1', staffnum: 10 },
1023
- ];
1024
- const preManualNodeCollectioRecordTwo = [
1025
- { orgname: '公司名称(单行文本)2', status_singleselect: '1', staffnum: 20 },
1026
- ];
1027
- const preManualNodeCollectioRecordThree = [
1028
- { orgname: '公司名称(单行文本)3', status_singleselect: '1', staffnum: 30 },
1029
- ];
1030
- const preManualNodeCollectioRecordFour = [
1031
- { orgname: '公司名称(单行文本)4', status_singleselect: '1', staffnum: 40 },
1032
- ];
1033
- const preManualNodeCollectioRecordFive = [
1034
- { orgname: '公司名称(单行文本)5', status_singleselect: '2', staffnum: 10 },
1035
- ];
1036
- const preManualNodeCollectioRecordSix = [
1037
- { orgname: '公司名称(单行文本)6', status_singleselect: '2', staffnum: 20 },
1038
- ];
1039
- const preManualNodeCollectioRecordSeven = [
1040
- { orgname: '公司名称(单行文本)7', status_singleselect: '2', staffnum: 30 },
1041
- ];
1042
- const preManualNodeCollectioRecordEight = [
1043
- { orgname: '公司名称(单行文本)8', status_singleselect: '2', staffnum: 40 },
1044
- ];
1045
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordOne);
1046
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordTwo);
1047
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordThree);
1048
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordFour);
1049
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordFive);
1050
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordSix);
1051
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordSeven);
1052
- await mockRecords(preManualNodeCollectionName, preManualNodeCollectioRecordEight);
1053
- // 创建Manual节点数据表
1054
- const manualNodeCollectionDisplayName = `自动>组织[普通表]${manualNodeAppendText}`;
1055
- const manualNodeCollectionName = `tt_amt_org${manualNodeAppendText}`;
1056
- const manualNodeFieldName = 'orgname';
1057
- const manualNodeFieldDisplayName = '公司名称(单行文本)';
1058
- await mockCollections(
1059
- appendJsonCollectionName(JSON.parse(JSON.stringify(generalWithNoRelationalFields)), manualNodeAppendText)
1060
- .collections,
1061
- );
1062
- //添加工作流
1063
- const workFlowName = faker.string.alphanumeric(5) + triggerNodeAppendText;
1064
- const workflowData = {
1065
- current: true,
1066
- options: { deleteExecutionOnStatus: [] },
1067
- title: workFlowName,
1068
- type: 'collection',
1069
- enabled: true,
1070
- };
1071
- const workflow = await apiCreateWorkflow(workflowData);
1072
- const workflowObj = JSON.parse(JSON.stringify(workflow));
1073
- const workflowId = workflowObj.id;
1074
- //配置工作流触发器
1075
- const triggerNodeData = {
1076
- config: { appends: [], collection: triggerNodeCollectionName, changed: [], condition: { $and: [] }, mode: 1 },
1077
- };
1078
- const triggerNode = await apiUpdateWorkflowTrigger(workflowId, triggerNodeData);
1079
- const triggerNodeObj = JSON.parse(JSON.stringify(triggerNode));
1080
- //配置前置Manual节点
1081
- const preManualNodeTitle = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
1082
- const preManualNodeData = {
1083
- type: 'manual',
1084
- upstreamId: null,
1085
- branchIndex: null,
1086
- title: preManualNodeTitle,
1087
- config: { assignees: [1], schema: null, forms: {} },
1088
- };
1089
- const preManualNode = await apiCreateWorkflowNode(workflowId, preManualNodeData);
1090
- const preManualNodeObj = JSON.parse(JSON.stringify(preManualNode));
1091
- const preAggregateNodeId = preManualNodeObj.id;
1092
- const getAggregateNode = await apiGetWorkflowNode(preAggregateNodeId);
1093
- const preAggregateNodeKey = getAggregateNode.key;
1094
-
1095
- await page.goto(`admin/workflow/workflows/${workflowId}`);
1096
- await page.waitForLoadState('networkidle');
1097
- const preManualNodePom = new ManualNode(page, preManualNodeTitle);
1098
- await preManualNodePom.nodeConfigure.click();
1099
- await preManualNodePom.configureUserInterfaceButton.click();
1100
- await preManualNodePom.addBlockButton.hover();
1101
- await preManualNodePom.updateRecordFormMenu.hover();
1102
- await page.getByRole('menuitem', { name: preManualNodeCollectionDisplayName }).click();
1103
- await page.mouse.move(300, 0, { steps: 100 });
1104
- await page
1105
- .locator(`button[aria-label^="schema-initializer-Grid-form:configureFields-${preManualNodeCollectionName}"]`)
1106
- .hover();
1107
- await page
1108
- .getByLabel(`designer-schema-settings-CardItem-UpdateFormDesigner-${preManualNodeCollectionName}`)
1109
- .click();
1110
- await page.getByRole('menuitem', { name: 'Filter settings' }).click();
1111
- await page.getByText('Add condition', { exact: true }).click();
1112
- await page.getByTestId('select-filter-field').click();
1113
- await page.getByRole('menuitemcheckbox', { name: 'ID', exact: true }).click();
1114
- await page.getByTestId('select-filter-operator').click();
1115
- await page.getByRole('option', { name: 'exists', exact: true }).click();
1116
- await page.getByRole('button', { name: 'Submit', exact: true }).click();
1117
- await page
1118
- .locator(`button[aria-label^="schema-initializer-Grid-form:configureFields-${preManualNodeCollectionName}"]`)
1119
- .hover();
1120
- await page
1121
- .getByLabel(`designer-schema-settings-CardItem-UpdateFormDesigner-${preManualNodeCollectionName}`)
1122
- .hover();
1123
- await page.getByRole('menuitem', { name: 'Edit block title' }).click();
1124
- const blockTitle = 'Update record' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
1125
- await page.getByLabel('Edit block title').getByRole('textbox').fill(blockTitle);
1126
- await page.getByRole('button', { name: 'OK', exact: true }).click();
1127
- await page
1128
- .locator(`button[aria-label^="schema-initializer-Grid-form:configureFields-${preManualNodeCollectionName}"]`)
1129
- .hover();
1130
- await page.getByRole('menuitem', { name: triggerNodeFieldDisplayName }).getByRole('switch').click();
1131
- await page.mouse.move(300, 0, { steps: 100 });
1132
- await page.mouse.click(300, 0);
1133
- await preManualNodePom.submitButton.click();
1134
- await page.waitForLoadState('networkidle');
1135
- //配置Manual节点
1136
- await preManualNodePom.addNodeButton.click();
1137
- await page.getByRole('button', { name: 'manual', exact: true }).click();
1138
- const manualNodeName = 'Manual' + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
1139
- await page.getByLabel('Manual-Manual', { exact: true }).getByRole('textbox').fill(manualNodeName);
1140
- const manualNode = new ManualNode(page, manualNodeName);
1141
- const manualNodeId = await manualNode.node.locator('.workflow-node-id').innerText();
1142
- await manualNode.nodeConfigure.click();
1143
- await manualNode.assigneesDropDown.click();
1144
- await page.getByRole('option', { name: 'Super Admin' }).click();
1145
- await manualNode.configureUserInterfaceButton.click();
1146
- await manualNode.addBlockButton.hover();
1147
- await manualNode.nodeDataMenu.hover();
1148
- await page.getByRole('menuitem', { name: preManualNodeTitle }).hover();
1149
- await page.getByRole('menuitem', { name: blockTitle }).click();
1150
- await page.mouse.move(300, 0, { steps: 100 });
1151
- await page.getByText('Configure fields').hover();
1152
- await page.getByRole('menuitem', { name: '公司名称(单行文本)' }).getByRole('switch').click();
1153
- await page.mouse.move(300, 0, { steps: 100 });
1154
- await page.mouse.click(300, 0);
1155
- await manualNode.submitButton.click();
1156
-
1157
- // 2、测试步骤:添加数据触发工作流
1158
- const triggerNodeCollectionRecordOne =
1159
- triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
1160
- const triggerNodeCollectionRecords = await mockRecords(triggerNodeCollectionName, [
1161
- { orgname: triggerNodeCollectionRecordOne },
1162
- ]);
1163
- await page.waitForTimeout(1000);
1164
- // 3、预期结果:工作流成功触发,待办弹窗表单中显示数据
1165
- const getWorkflow = await apiGetWorkflow(workflowId);
1166
- const getWorkflowObj = JSON.parse(JSON.stringify(getWorkflow));
1167
- const getWorkflowExecuted = getWorkflowObj.executed;
1168
- expect(getWorkflowExecuted).toBe(1);
1169
-
1170
- const newPage = mockPage();
1171
- await newPage.goto();
1172
- await page.waitForLoadState('networkidle');
1173
- await page.getByLabel('schema-initializer-Grid-page:addBlock').hover();
1174
- await page.getByRole('menuitem', { name: 'check-square Workflow todos' }).click();
1175
- await page.mouse.move(300, 0, { steps: 100 });
1176
- await page.waitForTimeout(300);
1177
- await page
1178
- .locator(`//td[span[text()="${preManualNodeTitle}"]]`)
1179
- .locator('xpath=preceding-sibling::td[1]')
1180
- .locator('text=View')
1181
- .click();
1182
- const preManualNodeRecord = triggerNodeFieldDisplayName + dayjs().format('YYYYMMDDHHmmss.SSS').toString();
1183
- await page.getByRole('textbox').fill(preManualNodeRecord);
1184
- await page.getByRole('button', { name: 'Continue the process' }).click();
1185
- await page.getByLabel('action-Filter.Action-Filter-filter-users_jobs-workflow-todo').click();
1186
- await page.getByText('Add condition', { exact: true }).click();
1187
- await page.getByTestId('select-filter-field').click();
1188
- await page.getByRole('menuitemcheckbox', { name: 'Task right' }).click();
1189
- await page.getByRole('menuitemcheckbox', { name: 'Title' }).click();
1190
- await page.getByRole('textbox').fill(manualNodeName);
1191
- await page.getByRole('button', { name: 'Submit' }).click();
1192
- await page
1193
- .locator(`//td[span[text()="${manualNodeName}"]]`)
1194
- .locator('xpath=preceding-sibling::td[1]')
1195
- .locator('text=View')
1196
- .click();
1197
- await expect(page.getByText(preManualNodeRecord)).toBeAttached();
1198
- const filter = `pageSize=20&page=1&filter={"$and":[{"orgname":{"$eq":"${preManualNodeRecord}"}}]}`;
1199
- const createNodeCollectionData = await apiFilterList(preManualNodeCollectionName, filter);
1200
- const createNodeCollectionDataObj = JSON.parse(JSON.stringify(createNodeCollectionData));
1201
- expect(createNodeCollectionDataObj.meta.count).toBe(8);
1202
-
1203
- // 4、后置处理:删除工作流
1204
- await apiDeleteWorkflow(workflowId);
1205
- });
1206
- });
1207
-
1208
- test.describe('relation field data', () => {});